diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/profanity.c | 23 | ||||
-rw-r--r-- | src/tray.c | 35 | ||||
-rw-r--r-- | src/tray.h | 4 |
3 files changed, 42 insertions, 20 deletions
diff --git a/src/profanity.c b/src/profanity.c index 79d13c08..3c508dcd 100644 --- a/src/profanity.c +++ b/src/profanity.c @@ -38,7 +38,6 @@ #endif #ifdef HAVE_GTK -#include <gtk/gtk.h> #include "tray.h" #endif #include <locale.h> @@ -96,9 +95,6 @@ char *saved_status; static gboolean cont = TRUE; static gboolean force_quit = FALSE; -#ifdef HAVE_GTK -static gboolean gtk_ready = FALSE; -#endif void prof_run(char *log_level, char *account_name) @@ -138,9 +134,7 @@ prof_run(char *log_level, char *account_name) iq_autoping_check(); ui_update(); #ifdef HAVE_GTK - if (gtk_ready) { - gtk_main_iteration_do(FALSE); - } + tray_update(); #endif } } @@ -365,16 +359,7 @@ _init(char *log_level) atexit(_shutdown); plugins_init(); #ifdef HAVE_GTK - gtk_ready = gtk_init_check(0, NULL); - log_debug("Env is GTK-ready: %s", gtk_ready ? "true" : "false"); - if (gtk_ready) { - gtk_init(0, NULL); - gtk_main_iteration_do(FALSE); - if (prefs_get_boolean(PREF_TRAY)) { - log_debug("Building GTK icon"); - create_tray(); - } - } + tray_init(); #endif inp_nonblocking(TRUE); } @@ -395,9 +380,7 @@ _shutdown(void) cl_ev_disconnect(); } #ifdef HAVE_GTK - if (gtk_ready && prefs_get_boolean(PREF_TRAY)) { - destroy_tray(); - } + tray_close(); #endif jabber_shutdown(); plugins_on_shutdown(); diff --git a/src/tray.c b/src/tray.c index 98039977..7c731313 100644 --- a/src/tray.c +++ b/src/tray.c @@ -42,7 +42,9 @@ #include "tray.h" #include "window_list.h" #include "log.h" +#include "config/preferences.h" +static gboolean gtk_ready = FALSE; static GtkStatusIcon *prof_tray = NULL; static GString *icon_filename = NULL; static GString *icon_msg_filename = NULL; @@ -141,6 +143,39 @@ _tray_change_icon(gpointer data) /* {{{ Public */ void +tray_init(void) +{ + gtk_ready = gtk_init_check(0, NULL); + log_debug("Env is GTK-ready: %s", gtk_ready ? "true" : "false"); + if (!gtk_ready) { + return; + } + + gtk_init(0, NULL); + gtk_main_iteration_do(FALSE); + if (prefs_get_boolean(PREF_TRAY)) { + log_debug("Building GTK icon"); + create_tray(); + } +} + +void +tray_update(void) +{ + if (gtk_ready) { + gtk_main_iteration_do(FALSE); + } +} + +void +tray_close(void) +{ + if (gtk_ready && prefs_get_boolean(PREF_TRAY)) { + destroy_tray(); + } +} + +void create_tray(void) { _get_icons(); diff --git a/src/tray.h b/src/tray.h index 416ca7d2..98cac490 100644 --- a/src/tray.h +++ b/src/tray.h @@ -35,6 +35,10 @@ #ifndef PROFANITY_TRAY_H #define PROFANITY_TRAY_H +void tray_init(void); +void tray_update(void); +void tray_close(void); + /* * Create tray icon * |