From f66c0e8fd6c050cbb687512aae07bf27679d9509 Mon Sep 17 00:00:00 2001 From: Mike Massonnet Date: Thu, 10 Jun 2010 01:12:49 +0200 Subject: [PATCH] Hide window on window close when the status icon is visible --- src/main.c | 21 ++++++++++++++++++++- src/process-window.c | 10 ++++++++++ 2 files changed, 30 insertions(+), 1 deletion(-) diff --git a/src/main.c b/src/main.c index 2d1fdb2..bb9f5c8 100644 --- a/src/main.c +++ b/src/main.c @@ -42,6 +42,24 @@ show_hide_status_icon (void) gtk_status_icon_set_visible (status_icon, show_status_icon); } +static void +destroy_window (void) +{ + gtk_main_quit (); +} + +static gboolean +delete_window (void) +{ + if (!gtk_status_icon_get_visible (status_icon)) + { + gtk_main_quit (); + return FALSE; + } + gtk_widget_hide (window); + return TRUE; +} + static gboolean init_timeout (void) { @@ -136,7 +154,8 @@ int main (int argc, char *argv[]) g_signal_connect_after (settings, "notify::full-command-line", G_CALLBACK (force_timeout_update), NULL); g_signal_connect (settings, "notify::show-status-icon", G_CALLBACK (show_hide_status_icon), NULL); - g_signal_connect (window, "destroy", G_CALLBACK (gtk_main_quit), NULL); + g_signal_connect (window, "destroy", G_CALLBACK (destroy_window), NULL); + g_signal_connect (window, "delete-event", G_CALLBACK (delete_window), NULL); gtk_main (); diff --git a/src/process-window.c b/src/process-window.c index 43986d9..9cf5d09 100644 --- a/src/process-window.c +++ b/src/process-window.c @@ -57,6 +57,7 @@ static void xtm_process_window_show (GtkWidget *widget); static void xtm_process_window_hide (GtkWidget *widget); static void emit_destroy_signal (XtmProcessWindow *window); +static gboolean emit_delete_event_signal (XtmProcessWindow *window, GdkEvent *event); static void show_menu_execute_task (XtmProcessWindow *window); static void show_menu_preferences (XtmProcessWindow *window); static void show_about_dialog (XtmProcessWindow *window); @@ -96,6 +97,7 @@ xtm_process_window_init (XtmProcessWindow *window) if (width >= 1 && height >= 1) gtk_window_resize (GTK_WINDOW (window->priv->window), width, height); g_signal_connect_swapped (window->priv->window, "destroy", G_CALLBACK (emit_destroy_signal), window); + g_signal_connect_swapped (window->priv->window, "delete-event", G_CALLBACK (emit_delete_event_signal), window); window->priv->cpu_monitor = GTK_WIDGET (gtk_builder_get_object (window->priv->builder, "cpu-monitor")); window->priv->memory_monitor = GTK_WIDGET (gtk_builder_get_object (window->priv->builder, "mem-monitor")); @@ -171,6 +173,14 @@ emit_destroy_signal (XtmProcessWindow *window) g_signal_emit_by_name (window, "destroy", G_TYPE_NONE); } +static gboolean +emit_delete_event_signal (XtmProcessWindow *window, GdkEvent *event) +{ + gboolean ret; + g_signal_emit_by_name (window, "delete-event", event, &ret, G_TYPE_BOOLEAN); + return ret; +} + static void execute_command (const gchar *command) {