diff --git a/src/profanity.c b/src/profanity.c index 4b7ea4b9..698994eb 100644 --- a/src/profanity.c +++ b/src/profanity.c @@ -77,8 +77,6 @@ prof_run(const int disable_tls, char *log_level, char *account_name) _init(disable_tls, log_level); log_info("Starting main event loop"); ui_input_nonblocking(TRUE); - GTimer *remind_timer = g_timer_new(); - gboolean cmd_result = TRUE; jabber_conn_status_t conn_status = jabber_get_connection_status(); char inp[INP_WIN_MAX]; @@ -97,6 +95,7 @@ prof_run(const int disable_tls, char *log_level, char *account_name) prefs_free_string(pref_connect_account); ui_update(); + gboolean cmd_result = TRUE; while(cmd_result == TRUE) { wint_t ch = ERR; size = 0; @@ -107,18 +106,12 @@ prof_run(const int disable_tls, char *log_level, char *account_name) _handle_idle_time(); } - gdouble elapsed = g_timer_elapsed(remind_timer, NULL); - - gint remind_period = prefs_get_notify_remind(); - if (remind_period > 0 && elapsed >= remind_period) { - notify_remind(); - g_timer_start(remind_timer); - } - ch = ui_get_char(inp, &size); + #ifdef HAVE_LIBOTR otr_poll(); #endif + notify_remind(); jabber_process_events(); ui_update(); } @@ -126,8 +119,6 @@ prof_run(const int disable_tls, char *log_level, char *account_name) inp[size++] = '\0'; cmd_result = process_input(inp); } - - g_timer_destroy(remind_timer); } void diff --git a/src/ui/core.c b/src/ui/core.c index 2873b693..6918a658 100644 --- a/src/ui/core.c +++ b/src/ui/core.c @@ -102,6 +102,7 @@ ui_init(void) status_bar_active(1); create_input_window(); wins_init(); + notifier_initialise(); cons_about(); #ifdef HAVE_LIBXSS display = XOpenDisplay(0); diff --git a/src/ui/notifier.c b/src/ui/notifier.c index ff93443f..7ca8f705 100644 --- a/src/ui/notifier.c +++ b/src/ui/notifier.c @@ -48,10 +48,19 @@ #include "log.h" #include "muc.h" #include "ui/ui.h" +#include "config/preferences.h" static void _notify(const char * const message, int timeout, const char * const category); +static GTimer *remind_timer; + +void +notifier_initialise(void) +{ + remind_timer = g_timer_new(); +} + void notifier_uninit(void) { @@ -60,6 +69,7 @@ notifier_uninit(void) notify_uninit(); } #endif + g_timer_destroy(remind_timer); } void @@ -128,46 +138,52 @@ notify_subscription(const char * const from) void notify_remind(void) { - gint unread = ui_unread(); - gint open = muc_invites_count(); - gint subs = presence_sub_request_count(); + gdouble elapsed = g_timer_elapsed(remind_timer, NULL); + gint remind_period = prefs_get_notify_remind(); + if (remind_period > 0 && elapsed >= remind_period) { + gint unread = ui_unread(); + gint open = muc_invites_count(); + gint subs = presence_sub_request_count(); - GString *text = g_string_new(""); + GString *text = g_string_new(""); - if (unread > 0) { - if (unread == 1) { - g_string_append(text, "1 unread message"); - } else { - g_string_append_printf(text, "%d unread messages", unread); - } - - } - if (open > 0) { if (unread > 0) { - g_string_append(text, "\n"); - } - if (open == 1) { - g_string_append(text, "1 room invite"); - } else { - g_string_append_printf(text, "%d room invites", open); - } - } - if (subs > 0) { - if ((unread > 0) || (open > 0)) { - g_string_append(text, "\n"); - } - if (subs == 1) { - g_string_append(text, "1 subscription request"); - } else { - g_string_append_printf(text, "%d subscription requests", subs); - } - } + if (unread == 1) { + g_string_append(text, "1 unread message"); + } else { + g_string_append_printf(text, "%d unread messages", unread); + } - if ((unread > 0) || (open > 0) || (subs > 0)) { - _notify(text->str, 5000, "Incoming message"); - } + } + if (open > 0) { + if (unread > 0) { + g_string_append(text, "\n"); + } + if (open == 1) { + g_string_append(text, "1 room invite"); + } else { + g_string_append_printf(text, "%d room invites", open); + } + } + if (subs > 0) { + if ((unread > 0) || (open > 0)) { + g_string_append(text, "\n"); + } + if (subs == 1) { + g_string_append(text, "1 subscription request"); + } else { + g_string_append_printf(text, "%d subscription requests", subs); + } + } - g_string_free(text, TRUE); + if ((unread > 0) || (open > 0) || (subs > 0)) { + _notify(text->str, 5000, "Incoming message"); + } + + g_string_free(text, TRUE); + + g_timer_start(remind_timer); + } } static void diff --git a/src/ui/ui.h b/src/ui/ui.h index 8c9690d6..1e78ce40 100644 --- a/src/ui/ui.h +++ b/src/ui/ui.h @@ -329,6 +329,7 @@ void rosterwin_roster(void); void occupantswin_occupants(const char * const room); // desktop notifier actions +void notifier_initialise(void); void notifier_uninit(void); void notify_typing(const char * const handle);