about summary refs log tree commit diff stats
path: root/src
diff options
context:
space:
mode:
authorDavid <petrodavi@gmail.com>2016-04-10 14:55:06 +0200
committerDavid <petrodavi@gmail.com>2016-04-10 15:44:37 +0200
commit92a50000c2421604f73ccad4e534948a4dc552e1 (patch)
tree43bfdfbf2849c3dedad8d7a5064febda20329373 /src
parent1e60d17d7c32194aa090f8d2ba7d5be4bffc0a44 (diff)
downloadprofani-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.c8
-rw-r--r--src/profanity.c29
-rw-r--r--src/tray.c2
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);