[gtk/ebassi/run-dialog-run: 11/22] demos: Remove gtk_dialog_run()



commit cbd3d25d221b3db9b7195c4189fc7cdeccaf1bc3
Author: Emmanuele Bassi <ebassi gnome org>
Date:   Thu Apr 30 13:30:51 2020 +0100

    demos: Remove gtk_dialog_run()
    
    Use modal dialogs and the "response" signal.

 demos/gtk-demo/builder.c |  6 ++++--
 demos/gtk-demo/demo.ui   |  1 +
 demos/gtk-demo/dialog.c  | 48 ++++++++++++++++++++++++++++++++++++++----------
 3 files changed, 43 insertions(+), 12 deletions(-)
---
diff --git a/demos/gtk-demo/builder.c b/demos/gtk-demo/builder.c
index 35714f2351..88acbfa92f 100644
--- a/demos/gtk-demo/builder.c
+++ b/demos/gtk-demo/builder.c
@@ -26,8 +26,10 @@ about_activate (GSimpleAction *action,
 
   builder = g_object_get_data (G_OBJECT (window), "builder");
   about_dlg = GTK_WIDGET (gtk_builder_get_object (builder, "aboutdialog1"));
-  gtk_dialog_run (GTK_DIALOG (about_dlg));
-  gtk_widget_hide (about_dlg);
+  gtk_window_set_transient_for (GTK_WINDOW (about_dlg), GTK_WINDOW (window));
+  gtk_window_set_hide_on_close (GTK_WINDOW (about_dlg), TRUE);
+  g_signal_connect (about_dlg, "response", G_CALLBACK (gtk_widget_hide), NULL);
+  gtk_widget_show (about_dlg);
 }
 
 static void
diff --git a/demos/gtk-demo/demo.ui b/demos/gtk-demo/demo.ui
index a25c12d6a1..7cb39a33e7 100644
--- a/demos/gtk-demo/demo.ui
+++ b/demos/gtk-demo/demo.ui
@@ -94,6 +94,7 @@
   <object class="GtkAboutDialog" id="aboutdialog1">
     <property name="program-name" translatable="yes">Builder demo</property>
     <property name="logo-icon-name" translatable="yes">gtk3-demo</property>
+    <property name="modal">True</property>
     <accessibility>
       <relation target="window1" type="subwindow-of"/>
     </accessibility>
diff --git a/demos/gtk-demo/dialog.c b/demos/gtk-demo/dialog.c
index 2313b6f255..27377f968e 100644
--- a/demos/gtk-demo/dialog.c
+++ b/demos/gtk-demo/dialog.c
@@ -25,11 +25,36 @@ message_dialog_clicked (GtkButton *button,
                                    "number of times:");
   gtk_message_dialog_format_secondary_text (GTK_MESSAGE_DIALOG (dialog),
                                             "%d", i);
-  gtk_dialog_run (GTK_DIALOG (dialog));
-  gtk_widget_destroy (dialog);
+  g_signal_connect (dialog, "response", G_CALLBACK (gtk_widget_destroy), NULL);
+  gtk_widget_show (dialog);
   i++;
 }
 
+typedef struct {
+  GtkWidget *local_entry1;
+  GtkWidget *local_entry2;
+  GtkWidget *global_entry1;
+  GtkWidget *global_entry2;
+} ResponseData;
+
+static void
+on_dialog_response (GtkDialog *dialog,
+                    int        response,
+                    gpointer   user_data)
+{
+  ResponseData *data = user_data;
+
+  if (response == GTK_RESPONSE_OK)
+    {
+      gtk_editable_set_text (GTK_EDITABLE (data->global_entry1),
+                             gtk_editable_get_text (GTK_EDITABLE (data->local_entry1)));
+      gtk_editable_set_text (GTK_EDITABLE (data->global_entry2),
+                             gtk_editable_get_text (GTK_EDITABLE (data->local_entry2)));
+    }
+
+  gtk_widget_destroy (GTK_WIDGET (dialog));
+}
+
 static void
 interactive_dialog_clicked (GtkButton *button,
                             gpointer   user_data)
@@ -42,7 +67,7 @@ interactive_dialog_clicked (GtkButton *button,
   GtkWidget *local_entry1;
   GtkWidget *local_entry2;
   GtkWidget *label;
-  gint response;
+  ResponseData *data;
 
   dialog = gtk_dialog_new_with_buttons ("Interactive Dialog",
                                         GTK_WINDOW (window),
@@ -81,15 +106,18 @@ interactive_dialog_clicked (GtkButton *button,
   gtk_grid_attach (GTK_GRID (table), local_entry2, 1, 1, 1, 1);
   gtk_label_set_mnemonic_widget (GTK_LABEL (label), local_entry2);
 
-  response = gtk_dialog_run (GTK_DIALOG (dialog));
+  data = g_new (ResponseData, 1);
+  data->local_entry1 = local_entry1;
+  data->local_entry2 = local_entry2;
+  data->global_entry1 = entry1;
+  data->global_entry2 = entry2;
 
-  if (response == GTK_RESPONSE_OK)
-    {
-      gtk_editable_set_text (GTK_EDITABLE (entry1), gtk_editable_get_text (GTK_EDITABLE (local_entry1)));
-      gtk_editable_set_text (GTK_EDITABLE (entry2), gtk_editable_get_text (GTK_EDITABLE (local_entry2)));
-    }
+  g_signal_connect_data (dialog, "response",
+                         G_CALLBACK (on_dialog_response),
+                         data, (GClosureNotify) g_free,
+                         0);
 
-  gtk_widget_destroy (dialog);
+  gtk_widget_show (dialog);
 }
 
 GtkWidget *


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