From e1df67a0febf281a6d4d11d54078ea69c27014d1 Mon Sep 17 00:00:00 2001 From: Samuel Dudik Date: Fri, 14 Aug 2020 20:19:17 +0200 Subject: [PATCH] Notifications now wait in a 'queue' and get displayed one after another, add handling of 2 more signals for clean exit --- TODO.md | 5 ----- herbe.c | 17 ++++++++++++++--- makefile | 2 +- 3 files changed, 15 insertions(+), 9 deletions(-) delete mode 100644 TODO.md diff --git a/TODO.md b/TODO.md deleted file mode 100644 index 78e9c08..0000000 --- a/TODO.md +++ /dev/null @@ -1,5 +0,0 @@ -* Handle multiple notifications at the same time -* ~~Properly handle duration = 0~~ -* Keyboard shortcut to dismiss and accept notifications (also mouse) -* ~~Properly print new lines~~ -* Refactor code \ No newline at end of file diff --git a/herbe.c b/herbe.c index c8dc279..f1b1ca9 100644 --- a/herbe.c +++ b/herbe.c @@ -6,6 +6,8 @@ #include #include #include +#include +#include #include "config.h" @@ -75,9 +77,8 @@ int main(int argc, char *argv[]) die("Usage: %s body", argv[0]); signal(SIGALRM, expire); - - if (duration != 0) - alarm(duration); + signal(SIGTERM, expire); + signal(SIGINT, expire); display = XOpenDisplay(0); @@ -150,6 +151,12 @@ int main(int argc, char *argv[]) XMapWindow(display, window); + sem_t *mutex = sem_open("/herbe", O_CREAT, 0644, 1); + sem_wait(mutex); + + if (duration != 0) + alarm(duration); + while (1) { XEvent event; @@ -165,6 +172,10 @@ int main(int argc, char *argv[]) break; } + sem_post(mutex); + sem_close(mutex); + sem_unlink("/herbe"); + for (int i = 0; i < num_of_lines; i++) free(words[i]); diff --git a/makefile b/makefile index dd26b9a..dcc5639 100644 --- a/makefile +++ b/makefile @@ -1,5 +1,5 @@ default: - gcc herbe.c -Wall -Wextra -pedantic -lX11 -lXft -I/usr/include/freetype2 -lm -o herbe + gcc herbe.c -Wall -Wextra -pedantic -lX11 -lXft -I/usr/include/freetype2 -lm -pthread -o herbe install: default cp herbe /usr/local/bin