Fixed "Hide" button gtk_main_quit() issue.
authorshort <>
Fri, 14 May 2004 06:51:17 +0000 (06:51 +0000)
committershort <>
Fri, 14 May 2004 06:51:17 +0000 (06:51 +0000)
Implemented Gnome presentation of g_log() errors/warnings/messages.

src/ui-gnome.c

index 7b2691d..3aa4681 100644 (file)
@@ -35,6 +35,7 @@
 #include <gtk/gtktogglebutton.h>
 #include <string.h>
 #include <gtk/gtkmain.h>
+#include <libgnomeui/gnome-app-util.h>
 
 #include "network.h"
 
@@ -123,7 +124,27 @@ void on_ButtonHide_clicked(GtkButton *button,gpointer user_data)
 {
        g_return_if_fail(GTK_IS_BUTTON(button));
 
-       gtk_main_quit();
+       /* Do not: gtk_main_quit();
+        * as 'App' widget will quit our gtk_main() automatically.
+        */
+       gtk_widget_destroy(GTK_WIDGET(App));
+}
+
+static void ui_gnome_g_log_handler(const gchar *log_domain,GLogLevelFlags log_level,const gchar *message,gpointer user_data)
+{
+GtkWidget *dialog;
+
+       /**/ if (log_level & G_LOG_LEVEL_ERROR)
+               dialog=gnome_app_error(App,message);
+       else if (log_level & (G_LOG_LEVEL_CRITICAL|G_LOG_LEVEL_WARNING))
+               dialog=gnome_app_warning(App,message);
+       else
+               dialog=gnome_app_message(App,message);
+
+       gtk_window_set_modal(GTK_WINDOW(dialog),TRUE);
+       g_signal_connect((gpointer)dialog,"close",G_CALLBACK(gtk_main_quit),NULL);
+       gtk_main();
+       /* 'dialog' gets destroyed automatically */
 }
 
 /* of "ui-gnome-interface.h": */
@@ -141,6 +162,13 @@ gboolean ui_gnome_init(void)
        AppBar=GNOME_APPBAR(lookup_widget(GTK_WIDGET(App),"AppBar"));
        PortEntry=GTK_ENTRY(lookup_widget(GTK_WIDGET(App),"PortEntry"));
 
+       /* ui_gnome_g_log_handler() needs 'App'. */
+       g_log_set_handler(
+                       G_LOG_DOMAIN,   /* log_domain; "Captive" */
+                       G_LOG_LEVEL_MASK | G_LOG_FLAG_FATAL,    /* log_levels */
+                       ui_gnome_g_log_handler, /* log_func */
+                       NULL);  /* user_data */
+
        gtk_widget_show_all(GTK_WIDGET(App));
        g_timeout_add(
                        DAEMON_CHECK_INTERVAL_MS,       /* interval */
@@ -152,5 +180,4 @@ gboolean ui_gnome_init(void)
 void ui_gnome_interactive(void)
 {
        gtk_main();
-       gtk_widget_destroy(GTK_WIDGET(App));
 }