[gedit] EncodingsDialog: don't use gtk_dialog_run()



commit d0aec4638d5447c283e41a5ac845b3d21a86b5ce
Author: Sébastien Wilmet <swilmet gnome org>
Date:   Sun May 10 19:43:57 2015 +0200

    EncodingsDialog: don't use gtk_dialog_run()
    
    If two gedit main windows are opened (e.g. on two different desktops),
    gtk_dialog_run() blocks the second window, so it's Bad™.

 gedit/gedit-encodings-dialog.c |   34 ++++++++++++++++++++++------------
 1 files changed, 22 insertions(+), 12 deletions(-)
---
diff --git a/gedit/gedit-encodings-dialog.c b/gedit/gedit-encodings-dialog.c
index c27c24c..4ef8c1d 100644
--- a/gedit/gedit-encodings-dialog.c
+++ b/gedit/gedit-encodings-dialog.c
@@ -159,11 +159,27 @@ init_liststores (GeditEncodingsDialog *dialog,
 }
 
 static void
+reset_dialog_response_cb (GtkDialog            *msg_dialog,
+                         gint                  response,
+                         GeditEncodingsDialog *dialog)
+{
+       if (response == GTK_RESPONSE_ACCEPT)
+       {
+               gtk_list_store_clear (dialog->liststore_available);
+               gtk_list_store_clear (dialog->liststore_chosen);
+
+               init_liststores (dialog, TRUE);
+               dialog->state = STATE_RESET;
+       }
+
+       gtk_widget_destroy (GTK_WIDGET (msg_dialog));
+}
+
+static void
 reset_button_clicked_cb (GtkWidget            *button,
                         GeditEncodingsDialog *dialog)
 {
        GtkDialog *msg_dialog;
-       gint response;
 
        msg_dialog = GTK_DIALOG (gtk_message_dialog_new (GTK_WINDOW (dialog),
                                                         GTK_DIALOG_DESTROY_WITH_PARENT |
@@ -179,18 +195,12 @@ reset_button_clicked_cb (GtkWidget            *button,
                                _("_Reset"), GTK_RESPONSE_ACCEPT,
                                NULL);
 
-       response = gtk_dialog_run (msg_dialog);
-
-       if (response == GTK_RESPONSE_ACCEPT)
-       {
-               gtk_list_store_clear (dialog->liststore_available);
-               gtk_list_store_clear (dialog->liststore_chosen);
-
-               init_liststores (dialog, TRUE);
-               dialog->state = STATE_RESET;
-       }
+       g_signal_connect (msg_dialog,
+                         "response",
+                         G_CALLBACK (reset_dialog_response_cb),
+                         dialog);
 
-       gtk_widget_destroy (GTK_WIDGET (msg_dialog));
+       gtk_widget_show_all (GTK_WIDGET (msg_dialog));
 }
 
 static GSList *


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]