[gtk/ebassi/run-dialog-run: 104/116] demos: Remove gtk_dialog_run()
- From: Emmanuele Bassi <ebassi src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gtk/ebassi/run-dialog-run: 104/116] demos: Remove gtk_dialog_run()
- Date: Tue, 12 May 2020 12:42:26 +0000 (UTC)
commit 4d09bf3b9ba5130e804ff6d9b11d5f146c41619e
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 b0c3f3cdc3..56d2fb08ea 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 99953a5cb5..ccc16c9f6f 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_window_destroy (GTK_WINDOW (dialog));
+ g_signal_connect (dialog, "response", G_CALLBACK (gtk_window_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_window_destroy (GTK_WINDOW (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_window_destroy (GTK_WINDOW (dialog));
+ gtk_widget_show (dialog);
}
GtkWidget *
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]