[gnome-panel] libgnome-panel: add close key binding to GpInitialSetupDialog



commit c1f638919b5c43180ec9b67ea02e740b73c40211
Author: Alberts Muktupāvels <alberts muktupavels gmail com>
Date:   Wed Apr 15 23:33:37 2020 +0300

    libgnome-panel: add close key binding to GpInitialSetupDialog

 libgnome-panel/gp-initial-setup-dialog.c | 41 ++++++++++++++++++++++++++++++++
 1 file changed, 41 insertions(+)
---
diff --git a/libgnome-panel/gp-initial-setup-dialog.c b/libgnome-panel/gp-initial-setup-dialog.c
index a7c93d1fd..7cbb01851 100644
--- a/libgnome-panel/gp-initial-setup-dialog.c
+++ b/libgnome-panel/gp-initial-setup-dialog.c
@@ -37,6 +37,15 @@ struct _GpInitialSetupDialog
   GHashTable             *settings;
 };
 
+enum
+{
+  CLOSE,
+
+  LAST_SIGNAL
+};
+
+static guint dialog_signals[LAST_SIGNAL] = { 0 };
+
 G_DEFINE_TYPE (GpInitialSetupDialog, gp_initital_setup_dialog, GTK_TYPE_WINDOW)
 
 static void
@@ -57,6 +66,15 @@ done_clicked_cb (GtkButton            *button,
   gtk_widget_destroy (GTK_WIDGET (dialog));
 }
 
+static void
+close_cb (GpInitialSetupDialog *self,
+          gpointer              user_data)
+{
+  g_assert (self->setup_callback != NULL);
+  self->setup_callback (self, TRUE, self->setup_user_data);
+  gtk_widget_destroy (GTK_WIDGET (self));
+}
+
 static void
 gp_initital_setup_dialog_finalize (GObject *object)
 {
@@ -99,11 +117,27 @@ gp_initital_setup_dialog_delete_event (GtkWidget   *widget,
   return FALSE;
 }
 
+static void
+install_signals (void)
+{
+  dialog_signals[CLOSE] =
+    g_signal_new ("close",
+                  GP_TYPE_INITIAL_SETUP_DIALOG,
+                  G_SIGNAL_RUN_LAST | G_SIGNAL_ACTION,
+                  0,
+                  NULL,
+                  NULL,
+                  NULL,
+                  G_TYPE_NONE,
+                  0);
+}
+
 static void
 gp_initital_setup_dialog_class_init (GpInitialSetupDialogClass *dialog_class)
 {
   GObjectClass *object_class;
   GtkWidgetClass *widget_class;
+  GtkBindingSet *binding_set;
 
   object_class = G_OBJECT_CLASS (dialog_class);
   widget_class = GTK_WIDGET_CLASS (dialog_class);
@@ -111,6 +145,11 @@ gp_initital_setup_dialog_class_init (GpInitialSetupDialogClass *dialog_class)
   object_class->finalize = gp_initital_setup_dialog_finalize;
 
   widget_class->delete_event = gp_initital_setup_dialog_delete_event;
+
+  install_signals ();
+
+  binding_set = gtk_binding_set_by_class (widget_class);
+  gtk_binding_entry_add_signal (binding_set, GDK_KEY_Escape, 0, "close", 0);
 }
 
 static void
@@ -143,6 +182,8 @@ gp_initital_setup_dialog_init (GpInitialSetupDialog *dialog)
 
   g_signal_connect (cancel, "clicked", G_CALLBACK (cancel_clicked_cb), dialog);
   g_signal_connect (done, "clicked", G_CALLBACK (done_clicked_cb), dialog);
+
+  g_signal_connect (dialog, "close", G_CALLBACK (close_cb), NULL);
 }
 
 GpInitialSetupDialog *


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