From 92a50000c2421604f73ccad4e534948a4dc552e1 Mon Sep 17 00:00:00 2001 From: David Date: Sun, 10 Apr 2016 14:55:06 +0200 Subject: Re-introduce gtk_use boolean This param is still actual, in case the environemnt does not support gtk initialization. Fix a GTK assert on the way (GTKStatusIcon is not a Widget, but a plain GObject). --- src/main.c | 8 -------- src/profanity.c | 29 ++++++++++++++++++++--------- src/tray.c | 2 +- 3 files changed, 21 insertions(+), 18 deletions(-) (limited to 'src') diff --git a/src/main.c b/src/main.c index 242bf127..431feedc 100644 --- a/src/main.c +++ b/src/main.c @@ -34,9 +34,6 @@ #include "prof_config.h" -#ifdef PROF_HAVE_GTK -#include -#endif #include #include #include @@ -149,11 +146,6 @@ main(int argc, char **argv) return 0; } -#ifdef PROF_HAVE_GTK - if (gtk_init_check(&argc, &argv)) { - gtk_init(&argc, &argv); - } -#endif prof_run(log, account_name); return 0; diff --git a/src/profanity.c b/src/profanity.c index d6c39f06..42f5936b 100644 --- a/src/profanity.c +++ b/src/profanity.c @@ -39,6 +39,7 @@ #ifdef PROF_HAVE_GTK #include +#include "tray.h" #endif #include #include @@ -75,9 +76,6 @@ #include "window_list.h" #include "event/client_events.h" #include "config/tlscerts.h" -#ifdef PROF_HAVE_GTK -#include "tray.h" -#endif static void _check_autoaway(void); static void _init(char *log_level); @@ -98,15 +96,21 @@ char *saved_status; static gboolean cont = TRUE; static gboolean force_quit = FALSE; +static gboolean gtk_ready = FALSE; void prof_run(char *log_level, char *account_name) { - _init(log_level); - plugins_on_start(); #ifdef PROF_HAVE_GTK - gtk_main_iteration_do(false); + 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); + } #endif + _init(log_level); + plugins_on_start(); _connect_default(account_name); ui_update(); @@ -140,7 +144,9 @@ prof_run(char *log_level, char *account_name) iq_autoping_check(); ui_update(); #ifdef PROF_HAVE_GTK - gtk_main_iteration_do(false); + if (gtk_ready) { + gtk_main_iteration_do(false); + } #endif } } @@ -365,7 +371,10 @@ _init(char *log_level) atexit(_shutdown); plugins_init(); #ifdef PROF_HAVE_GTK - create_tray(); + if (gtk_ready) { + log_debug("Building GTK icon"); + create_tray(); + } #endif inp_nonblocking(TRUE); } @@ -386,7 +395,9 @@ _shutdown(void) cl_ev_disconnect(); } #ifdef PROF_HAVE_GTK - destroy_tray(); + if (gtk_ready) { + destroy_tray(); + } #endif jabber_shutdown(); plugins_on_shutdown(); diff --git a/src/tray.c b/src/tray.c index 8b078adf..12c46796 100644 --- a/src/tray.c +++ b/src/tray.c @@ -151,7 +151,7 @@ void destroy_tray(void) shutting_down = true; g_source_remove(timer); if (prof_tray) { - gtk_widget_destroy(GTK_WIDGET(prof_tray)); + g_clear_object(&prof_tray); prof_tray = NULL; } g_string_free(icon_filename, true); -- cgit 1.4.1-2-gfad0 'n18' href='#n18'>18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77