pause/unpause via SIGUSR1/SIGUSR2

This commit is contained in:
Sascha Kruse 2012-12-08 15:42:44 +01:00
parent d53ad1b376
commit a378aa9b19
2 changed files with 23 additions and 1 deletions

View File

@ -148,7 +148,14 @@ The progress value can be set with a hint, too.
=head1 MISCELLANEOUS
Dunst can be paused by sending a notification with a summary of "DUNST_COMMAND_PAUSE"
and resumed with a summary of "DUNST_COMMAND_RESUME".
and resumed with a summary of "DUNST_COMMAND_RESUME". Alternatively you can send SIGUSR1 and SIGUSR2 to pause and unpause respectivly. For Example:
=item killall -SIGUSR1 dunst # pause
=item killall -SIGUSR2 dunst # resume
=back
When paused dunst will not display any notifications but keep all notifications in a queue.
This can for example be wrapped around a screen locker (i3lock, slock) to prevent flickering
of notifications through the lock and to read all missed notifications after returning to the computer.

15
dunst.c
View File

@ -12,6 +12,7 @@
#include <fnmatch.h>
#include <sys/time.h>
#include <math.h>
#include <signal.h>
#include <X11/Xlib.h>
#include <X11/XKBlib.h>
#include <X11/Xatom.h>
@ -108,6 +109,18 @@ void warn(const char *text, int urg);
void init_shortcut(keyboard_shortcut * shortcut);
KeySym string_to_mask(char *str);
void pause_signal_handler(int sig)
{
if (sig == SIGUSR1) {
pause_display = true;
}
if (sig == SIGUSR2) {
pause_display = false;
}
signal (sig, pause_signal_handler);
}
static void print_notification(notification * n)
{
printf("{\n");
@ -1714,6 +1727,8 @@ int main(int argc, char *argv[])
initdbus();
setup();
signal (SIGUSR1, pause_signal_handler);
signal (SIGUSR2, pause_signal_handler);
if (deprecated_mod)
warn("-mod is deprecated. Use \"-key mod+key\" instead\n",