From e8ed23cd6069d749faaab3509e613e66ecc5eb43 Mon Sep 17 00:00:00 2001
From: Frederic Culot <calcurse@culot.org>
Date: Sat, 14 Apr 2007 18:44:53 +0000
Subject: bugfix: wrong define was used (DAYINSEC instead of HOURINSEC)
 appointment state now taken into account to make the notify bar blink
 notify_catch_children() and notify_thread_children() suppressed

---
 src/notify.c | 50 ++++++++++++++------------------------------------
 1 file changed, 14 insertions(+), 36 deletions(-)

(limited to 'src')

diff --git a/src/notify.c b/src/notify.c
index e6374f3..be7193a 100755
--- a/src/notify.c
+++ b/src/notify.c
@@ -1,4 +1,4 @@
-/*	$calcurse: notify.c,v 1.10 2007/04/04 19:41:57 culot Exp $	*/
+/*	$calcurse: notify.c,v 1.11 2007/04/14 18:44:53 culot Exp $	*/
 
 /*
  * Calcurse - text-based organizer
@@ -31,7 +31,6 @@
 #include <stdio.h>
 #include <string.h>
 #include <unistd.h>
-#include <sys/wait.h>
 
 #include "i18n.h"
 #include "utils.h"
@@ -44,7 +43,6 @@
 static struct notify_vars_s *notify = NULL;
 static struct notify_app_s *notify_app = NULL;
 static pthread_t notify_t_main;
-static pthread_t notify_t_children;
 
 /* Return 1 if we need to display the notify-bar, else 0. */
 int 
@@ -124,6 +122,7 @@ notify_update_bar(void)
 	const int space = 3;
 	int file_pos, date_pos, app_pos, txt_max_len, too_long = 0;
 	int time_left, hours_left, minutes_left;
+	int blinking;
 	char buf[BUFSIZ];
 	
 	date_pos = space;
@@ -147,13 +146,21 @@ notify_update_bar(void)
 			strncpy(buf, notify_app->txt, txt_max_len - 3);
 			buf[txt_max_len - 3] = '\0';
 		}
+		
 		time_left = notify_app->time - notify->time_in_sec; 
 		if (time_left > 0) {
 			hours_left = (time_left / HOURINSEC);
-			minutes_left = (time_left - hours_left * DAYINSEC) / 
+			minutes_left = (time_left - hours_left * HOURINSEC) / 
 			    MININSEC;
 			pthread_mutex_lock(&nbar->mutex);
-			if (time_left < nbar->cntdwn) 
+
+			if (time_left < nbar->cntdwn &&
+			    (notify_app->state & APOINT_NOTIFY))
+				blinking = 1;
+			else
+				blinking = 0;
+
+			if (blinking)
 				wattron(notify->win, A_BLINK);
 			if (too_long) 	
 				mvwprintw(notify->win, 0, app_pos, 
@@ -164,16 +171,14 @@ notify_update_bar(void)
 			            "> %02d:%02d :: %s <", 
 			            hours_left, minutes_left, 
 				    notify_app->txt);
-			if (time_left < nbar->cntdwn)
+			if (blinking)
 				wattroff(notify->win, A_BLINK);
 
-			if (time_left < nbar->cntdwn && 
-			    (notify_app->state & APOINT_NOTIFY) &&
+			if (blinking && 
 			    !(notify_app->state & APOINT_NOTIFIED)) {
 				notify_app->state |= APOINT_NOTIFIED;
 				notify_launch_cmd(nbar->cmd, nbar->shell);
 			}
-
 			pthread_mutex_unlock(&nbar->mutex);
 		} else {
 			notify_app->got_app = 0;
@@ -271,21 +276,6 @@ notify_thread_app(void *arg)
 	pthread_exit((void*) 0);
 }
 
-/* 
- * Catch return values from children (user-defined notification commands).
- * This is needed to avoid zombie processes running on system.
- */
-static void *
-notify_thread_children(void *arg)
-{
-	for (;;) {
-		waitpid(WAIT_MYPGRP, NULL, WNOHANG);
-		sleep(1);
-	}
-
-	pthread_exit((void *)0);
-}
-
 /* Launch the thread notify_thread_app to look for next appointment. */
 void 
 notify_check_next_app(void)
@@ -414,15 +404,3 @@ notify_start_main_thread(void)
 	notify_check_next_app();
 	return;
 }
-
-/* 
- * Launch the catch_children thread. 
- * This is useful to avoid zombie processes when launching user-defined command
- * to get notified.
- */
-void 
-notify_catch_children(void) 
-{
-	pthread_create(&notify_t_children, NULL, notify_thread_children, NULL);
-	return;
-}
-- 
cgit v1.2.3-70-g09d2