[gnome-initial-setup] region chooser: Add a confirm signal



commit f8cfd40af652e89941e0013634769f342a51e230
Author: Matthias Clasen <mclasen redhat com>
Date:   Sun Sep 7 09:58:47 2014 -0400

    region chooser: Add a confirm signal
    
    Add a confirm signal, and emit it when the active row is activated
    again. This will be use to make Enter go to the next page.
    
    Note that we delay the emission of the signal to an idle to avoid
    problems with accessibility.

 .../pages/region/cc-region-chooser.c               |   30 +++++++++++++++++++-
 .../pages/region/cc-region-chooser.h               |    2 +
 2 files changed, 31 insertions(+), 1 deletions(-)
---
diff --git a/gnome-initial-setup/pages/region/cc-region-chooser.c 
b/gnome-initial-setup/pages/region/cc-region-chooser.c
index 45eca5a..3b40233 100644
--- a/gnome-initial-setup/pages/region/cc-region-chooser.c
+++ b/gnome-initial-setup/pages/region/cc-region-chooser.c
@@ -65,6 +65,13 @@ enum {
 
 static GParamSpec *obj_props[PROP_LAST];
 
+enum {
+        CONFIRM,
+        LAST_SIGNAL
+};
+
+static guint signals[LAST_SIGNAL] = { 0 };
+
 typedef struct {
         GtkWidget *box;
         GtkWidget *checkmark;
@@ -470,6 +477,16 @@ set_locale_id (CcRegionChooser *chooser,
         g_object_notify_by_pspec (G_OBJECT (chooser), obj_props[PROP_LOCALE]);
 }
 
+static gboolean
+confirm_choice (gpointer data)
+{
+        GtkWidget *widget = data;
+
+        g_signal_emit (widget, signals[CONFIRM], 0);
+
+        return G_SOURCE_REMOVE;
+}
+
 static void
 row_activated (GtkListBox        *box,
                GtkListBoxRow     *row,
@@ -489,7 +506,10 @@ row_activated (GtkListBox        *box,
                 widget = get_region_widget (child);
                 if (widget == NULL)
                         return;
-                set_locale_id (chooser, widget->locale_id);
+                if (g_strcmp0 (priv->locale, widget->locale_id) == 0)
+                        g_idle_add (confirm_choice, chooser);
+                else
+                        set_locale_id (chooser, widget->locale_id);
         }
 }
 
@@ -615,6 +635,14 @@ cc_region_chooser_class_init (CcRegionChooserClass *klass)
         object_class->set_property = cc_region_chooser_set_property;
         object_class->constructed = cc_region_chooser_constructed;
 
+        signals[CONFIRM] = g_signal_new ("confirm",
+                                         G_TYPE_FROM_CLASS (object_class),
+                                         G_SIGNAL_RUN_FIRST,
+                                         G_STRUCT_OFFSET (CcRegionChooserClass, confirm),
+                                         NULL, NULL,
+                                         g_cclosure_marshal_VOID__VOID,
+                                         G_TYPE_NONE, 0);
+
         obj_props[PROP_LOCALE] =
                 g_param_spec_string ("locale", "", "", "",
                                      G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS);
diff --git a/gnome-initial-setup/pages/region/cc-region-chooser.h 
b/gnome-initial-setup/pages/region/cc-region-chooser.h
index f99d63e..a2b771e 100644
--- a/gnome-initial-setup/pages/region/cc-region-chooser.h
+++ b/gnome-initial-setup/pages/region/cc-region-chooser.h
@@ -46,6 +46,8 @@ struct _CcRegionChooser
 struct _CcRegionChooserClass
 {
         GtkBoxClass parent_class;
+
+        void (*confirm) (CcRegionChooser *chooser);
 };
 
 GType cc_region_chooser_get_type (void);


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