[Xfce4-commits] <parole:master> Show confirmation dialog on delete event

Ali Abdallah noreply at xfce.org
Tue Oct 6 10:16:05 CEST 2009


Updating branch refs/heads/master
         to 932afb714aa197bca2dac90574dea3f3e814c612 (commit)
       from 487edadc7ff4317b9cba25b65694ecd77bb34cf2 (commit)

commit 932afb714aa197bca2dac90574dea3f3e814c612
Author: Ali Abdallah <ali at ali-xfce.org>
Date:   Tue Oct 6 10:10:13 2009 +0000

    Show confirmation dialog on delete event

 plugins/tray/tray-icon.c |  144 +++++++++++++++++++++++++++++++++++++++++-----
 1 files changed, 130 insertions(+), 14 deletions(-)

diff --git a/plugins/tray/tray-icon.c b/plugins/tray/tray-icon.c
index fa635b5..b64c962 100644
--- a/plugins/tray/tray-icon.c
+++ b/plugins/tray/tray-icon.c
@@ -297,11 +297,10 @@ tag_message_cb (ParolePlugin *plugin, const ParoleStream *stream, PluginData *da
 #endif
 }
 
-#ifdef HAVE_LIBNOTIFY
 static gboolean
-notify_enabled (void)
+read_entry_bool (const gchar *entry, gboolean fallback)
 {
-    gboolean ret_val = TRUE;
+    gboolean ret_val = fallback;
     gchar *file;
     XfceRc *rc;
     
@@ -311,7 +310,7 @@ notify_enabled (void)
     
     if ( rc )
     {
-	ret_val = xfce_rc_read_bool_entry (rc, "NOTIFY", TRUE);
+	ret_val = xfce_rc_read_bool_entry (rc, entry, fallback);
 	xfce_rc_close (rc);
     }
     
@@ -319,9 +318,8 @@ notify_enabled (void)
 }
 
 static void
-notify_toggled_cb (GtkToggleButton *bt, PluginData *data)
+write_entry_bool (const gchar *entry, gboolean value)
 {
-    gboolean active;
     gchar *file;
     XfceRc *rc;
     
@@ -329,12 +327,36 @@ notify_toggled_cb (GtkToggleButton *bt, PluginData *data)
     rc = xfce_rc_simple_open (file, FALSE);
     g_free (file);
     
-    active = gtk_toggle_button_get_active (bt);
+    xfce_rc_write_bool_entry (rc, entry, value);
+    xfce_rc_close (rc);
+}
+
+#ifdef HAVE_LIBNOTIFY
+static gboolean
+notify_enabled (void)
+{
+    gboolean ret_val = read_entry_bool ("NOTIFY", TRUE);
     
+    return ret_val;
+}
+
+static void
+notify_toggled_cb (GtkToggleButton *bt, PluginData *data)
+{
+    gboolean active;
+    active = gtk_toggle_button_get_active (bt);
     data->enabled = active;
     
-    xfce_rc_write_bool_entry (rc, "NOTIFY", active);
-    xfce_rc_close (rc);
+    write_entry_bool ("NOTIFY", active);
+}
+#endif /*HAVE_LIBNOTIFY*/
+
+static void
+hide_on_delete_toggled_cb (GtkWidget *widget, gpointer data)
+{
+    gboolean toggled;
+    toggled = gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (widget));
+    write_entry_bool ("MINIMIZE_TO_TRAY", toggled);
 }
 
 static void
@@ -342,7 +364,11 @@ configure_cb (ParolePlugin *plugin, GtkWidget *widget, PluginData *data)
 {
     GtkWidget *dialog;
     GtkWidget *content_area;
+#ifdef HAVE_LIBNOTIFY
     GtkWidget *check;
+#endif
+    GtkWidget *hide_on_delete;
+    gboolean hide_on_delete_b;
     
     dialog = gtk_dialog_new_with_buttons (_("Tray icon plugin"), 
 					  GTK_WINDOW (widget),
@@ -353,20 +379,110 @@ configure_cb (ParolePlugin *plugin, GtkWidget *widget, PluginData *data)
 
     content_area = gtk_dialog_get_content_area (GTK_DIALOG (dialog));
     
+#ifdef HAVE_LIBNOTIFY    
     check = gtk_check_button_new_with_label (_("Enable notification"));
-    
     gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (check), data->enabled);
-    
     g_signal_connect (check, "toggled",
 		      G_CALLBACK (notify_toggled_cb), data);
+    gtk_box_pack_start_defaults (GTK_BOX (content_area), check) ;
+    
+#endif /*HAVE_LIBNOTIFY*/
+
+    hide_on_delete_b = read_entry_bool ("MINIMIZE_TO_TRAY", TRUE);
+    hide_on_delete = gtk_check_button_new_with_label (_("Always minimize to tray when window is closed"));
+    gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (hide_on_delete), hide_on_delete_b);
     
-    gtk_container_add (GTK_CONTAINER (content_area), check);
+    g_signal_connect (hide_on_delete, "toggled",
+		      G_CALLBACK (hide_on_delete_toggled_cb), NULL);
     
+    gtk_box_pack_start_defaults (GTK_BOX (content_area), hide_on_delete);
+	
     g_signal_connect (dialog, "response",
 		      G_CALLBACK (gtk_widget_destroy), NULL);
+    
     gtk_widget_show_all (dialog);
 }
-#endif /*HAVE_LIBNOTIFY*/
+
+static void
+action_on_hide_confirmed_cb (GtkWidget *widget, gpointer data)
+{
+    gboolean toggled;
+    
+    toggled = gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (widget));
+    
+    write_entry_bool ("ACTION_CONFIRMED_ON_DELETE", toggled);
+}
+
+static gboolean
+delete_event_cb (GtkWidget *widget, GdkEvent *ev, PluginData *data)
+{
+    GtkWidget *dialog, *check, *content_area, *label;
+    GtkWidget *quit, *minimize, *cancel, *img;
+    gboolean confirmed, ret_val = TRUE, minimize_to_tray;
+    
+    confirmed = read_entry_bool ("ACTION_CONFIRMED_ON_DELETE", FALSE);
+    minimize_to_tray = read_entry_bool ("MINIMIZE_TO_TRAY", TRUE);
+    
+    if ( confirmed )
+    {
+	return minimize_to_tray ? gtk_widget_hide_on_delete (widget) : FALSE;
+    }
+    
+    dialog = gtk_dialog_new_with_buttons (_("Minimize to tray?"), NULL, GTK_DIALOG_MODAL,
+					  NULL);
+    
+    gtk_dialog_set_default_response (GTK_DIALOG (dialog),
+				     GTK_RESPONSE_OK);
+			
+    minimize = gtk_button_new_with_label (_("Minimize to tray"));
+    img = gtk_image_new_from_stock (GTK_STOCK_GO_DOWN, GTK_ICON_SIZE_BUTTON);
+    gtk_button_set_image (GTK_BUTTON (minimize), img);
+    gtk_widget_show (minimize);
+    gtk_dialog_add_action_widget (GTK_DIALOG (dialog), minimize, GTK_RESPONSE_OK);
+    
+    quit = gtk_button_new_from_stock (GTK_STOCK_QUIT);
+    gtk_widget_show (quit);
+    gtk_dialog_add_action_widget (GTK_DIALOG (dialog), quit, GTK_RESPONSE_CLOSE);
+    
+    cancel = gtk_button_new_from_stock (GTK_STOCK_CANCEL);
+    gtk_widget_show (cancel);
+    gtk_dialog_add_action_widget (GTK_DIALOG (dialog), cancel, GTK_RESPONSE_CANCEL);
+    
+    content_area = gtk_dialog_get_content_area (GTK_DIALOG (dialog));
+    
+    label = gtk_label_new (_("Are you sure you want to quit Parole"));
+    gtk_widget_show (label);
+    gtk_box_pack_start_defaults (GTK_BOX (content_area), label) ;
+    
+    check = gtk_check_button_new_with_mnemonic (_("Remember my choice"));
+    gtk_widget_show (check);
+    gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (check), FALSE);
+    
+    g_signal_connect (check, "toggled",
+		      G_CALLBACK (action_on_hide_confirmed_cb), NULL);
+		      
+    gtk_box_pack_start_defaults (GTK_BOX (content_area),
+			         check) ;
+
+    switch ( gtk_dialog_run (GTK_DIALOG (dialog)) )
+    {
+	case GTK_RESPONSE_OK:
+	    gtk_widget_hide_on_delete (widget);
+	    break;
+	case GTK_RESPONSE_CLOSE:
+	    ret_val = FALSE;
+	    break;
+	case GTK_RESPONSE_CANCEL:
+	    ret_val = TRUE;
+	    break;
+	default:
+	    ret_val = TRUE;
+	    break;
+    }
+    
+    gtk_widget_destroy (dialog);
+    return ret_val;
+}
 
 G_MODULE_EXPORT static void
 construct (ParolePlugin *plugin)
@@ -406,7 +522,7 @@ construct (ParolePlugin *plugin)
 		      G_CALLBACK (tray_activate_cb), data);
     
     data->sig = g_signal_connect (data->window, "delete-event",
-			          G_CALLBACK (gtk_widget_hide_on_delete), NULL);
+			          G_CALLBACK (delete_event_cb), NULL);
 				  
     g_signal_connect (plugin, "free-data",
 		      G_CALLBACK (free_data_cb), data);



More information about the Xfce4-commits mailing list