diff options
author | David <petrodavi@gmail.com> | 2016-04-10 14:55:06 +0200 |
---|---|---|
committer | David <petrodavi@gmail.com> | 2016-04-10 15:44:37 +0200 |
commit | 92a50000c2421604f73ccad4e534948a4dc552e1 (patch) | |
tree | 43bfdfbf2849c3dedad8d7a5064febda20329373 /src | |
parent | 1e60d17d7c32194aa090f8d2ba7d5be4bffc0a44 (diff) | |
download | profani-tty-92a50000c2421604f73ccad4e534948a4dc552e1.tar.gz |
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).
Diffstat (limited to 'src')
-rw-r--r-- | src/main.c | 8 | ||||
-rw-r--r-- | src/profanity.c | 29 | ||||
-rw-r--r-- | src/tray.c | 2 |
3 files changed, 21 insertions, 18 deletions
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 <gtk/gtk.h> -#endif #include <string.h> #include <glib.h> #include <assert.h> @@ -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 <gtk/gtk.h> +#include "tray.h" #endif #include <locale.h> #include <signal.h> @@ -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); |