commit e1df67a0febf281a6d4d11d54078ea69c27014d1
parent b41b280509d879904aaebf68d68817d71829d335
Author: Samuel Dudik <samuel.dudik@gmail.com>
Date: Fri, 14 Aug 2020 20:19:17 +0200
Notifications now wait in a 'queue' and get displayed one after another, add handling of 2 more signals for clean exit
Diffstat:
3 files changed, 15 insertions(+), 10 deletions(-)
diff --git a/TODO.md b/TODO.md
@@ -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
@@ -6,6 +6,8 @@
#include <unistd.h>
#include <string.h>
#include <stdarg.h>
+#include <fcntl.h>
+#include <semaphore.h>
#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
@@ -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