aboutsummaryrefslogtreecommitdiffstats
path: root/src/notify.c
diff options
context:
space:
mode:
authorFrederic Culot <calcurse@culot.org>2006-09-15 15:42:22 +0000
committerFrederic Culot <calcurse@culot.org>2006-09-15 15:42:22 +0000
commitebcc972941cf0ef0bbd30b0b649df3f7b1e99b95 (patch)
treeeef5e80070f8502530600a53c9556b19fcd6c1f2 /src/notify.c
parentb6df46019339ba63b3425a3bd5f265264af29621 (diff)
downloadcalcurse-ebcc972941cf0ef0bbd30b0b649df3f7b1e99b95.tar.gz
calcurse-ebcc972941cf0ef0bbd30b0b649df3f7b1e99b95.zip
updates to take notify-bar into account
notify_bar(), notify_start_main_thread() and notify_stop_main_thread() created
Diffstat (limited to 'src/notify.c')
-rwxr-xr-xsrc/notify.c48
1 files changed, 39 insertions, 9 deletions
diff --git a/src/notify.c b/src/notify.c
index cd27da9..7316c51 100755
--- a/src/notify.c
+++ b/src/notify.c
@@ -1,4 +1,4 @@
-/* $calcurse: notify.c,v 1.3 2006/09/14 15:05:34 culot Exp $ */
+/* $calcurse: notify.c,v 1.4 2006/09/15 15:42:22 culot Exp $ */
/*
* Calcurse - text-based organizer
@@ -38,7 +38,19 @@
static struct notify_vars_s *notify = NULL;
static struct notify_app_s *notify_app = NULL;
+static pthread_t notify_t_main;
+/* Return 1 if we need to display the notify-bar, else 0. */
+int notify_bar(void)
+{
+ int display_bar = 0;
+
+ pthread_mutex_lock(&nbar->mutex);
+ display_bar = (nbar->show) ? 1 : 0;
+ pthread_mutex_unlock(&nbar->mutex);
+
+ return display_bar;
+}
/*
* Create the notification bar, by initializing all the variables and
* creating the notification window (l is the number of lines, c the
@@ -46,15 +58,27 @@ static struct notify_app_s *notify_app = NULL;
*/
void notify_init_bar(int l, int c, int y, int x)
{
- pthread_t notify_t_time;
-
notify = (struct notify_vars_s *) malloc(sizeof(struct notify_vars_s));
notify_app = (struct notify_app_s *) malloc(sizeof(struct notify_app_s));
pthread_mutex_init(&notify->mutex, NULL);
pthread_mutex_init(&notify_app->mutex, NULL);
notify->win = newwin(l, c, y, x);
notify_extract_aptsfile();
- pthread_create(&notify_t_time, NULL, notify_thread_time, NULL);
+}
+
+/* Launch the notify-bar main thread. */
+void notify_start_main_thread(void)
+{
+ pthread_create(&notify_t_main, NULL, notify_main_thread, NULL);
+ notify_check_next_app();
+ return;
+}
+
+/* Stop the notify-bar main thread. */
+void notify_stop_main_thread(void)
+{
+ pthread_cancel(notify_t_main);
+ return;
}
/*
@@ -95,9 +119,15 @@ void notify_update_bar(void)
if (time_left > 0) {
hours_left = (time_left / 3600);
minutes_left = (time_left - hours_left*3600) / 60;
+ pthread_mutex_lock(&nbar->mutex);
+ if (time_left < nbar->cntdwn)
+ wattron(notify->win, A_BLINK);
mvwprintw(notify->win, 0, app_pos,
"> %02d:%02d :: %s <",
hours_left, minutes_left, notify_app->txt);
+ if (time_left < nbar->cntdwn)
+ wattroff(notify->win, A_BLINK);
+ pthread_mutex_unlock(&nbar->mutex);
} else {
notify_app->got_app = 0;
pthread_mutex_unlock(&notify_app->mutex);
@@ -123,22 +153,22 @@ void notify_extract_aptsfile(void)
}
/* Update the notication bar content */
-void *notify_thread_time(void *arg)
+void *notify_main_thread(void *arg)
{
unsigned thread_sleep = 1, check_app = 60;
int elapse = 0, got_app = 0;
struct tm *ntime;
time_t ntimer;
- char *time_format = "%T";
- char *date_format = "%a %F";
for (;;) {
ntimer = time(NULL);
ntime = localtime(&ntimer);
pthread_mutex_lock(&notify->mutex);
notify->time_in_sec = ntimer;
- strftime(notify->time, NOTIFY_FIELD_LENGTH, time_format, ntime);
- strftime(notify->date, NOTIFY_FIELD_LENGTH, date_format, ntime);
+ pthread_mutex_lock(&nbar->mutex);
+ strftime(notify->time, NOTIFY_FIELD_LENGTH, nbar->timefmt, ntime);
+ strftime(notify->date, NOTIFY_FIELD_LENGTH, nbar->datefmt, ntime);
+ pthread_mutex_unlock(&nbar->mutex);
pthread_mutex_unlock(&notify->mutex);
notify_update_bar();
sleep(thread_sleep);