[Xfce4-commits] <xfce4-taskmanager:master> Hide window on window close when the status icon is visible

Mike Massonnet noreply at xfce.org
Thu Jun 10 03:04:01 CEST 2010


Updating branch refs/heads/master
         to f66c0e8fd6c050cbb687512aae07bf27679d9509 (commit)
       from 6978d8f8486c2022b58f333b42d81ed74d0ae7c9 (commit)

commit f66c0e8fd6c050cbb687512aae07bf27679d9509
Author: Mike Massonnet <mmassonnet at xfce.org>
Date:   Thu Jun 10 01:12:49 2010 +0200

    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 deletions(-)

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)
 {



More information about the Xfce4-commits mailing list