[gnome-control-center/wip/cdavis/date-and-time-polish: 7/7] cc-datetime-panel: Use AdwComboRow




commit 9ce53ad01b1d5135f2f37fa772a7eb556dbe5bb9
Author: Christopher Davis <christopherdavis gnome org>
Date:   Mon Jan 3 14:30:21 2022 -0800

    cc-datetime-panel: Use AdwComboRow
    
    The API is nicer, and it's the recommended widget to use
    for dropdown rows.

 panels/datetime/cc-datetime-panel.c  | 42 ++++++++++++++++++++++++------------
 panels/datetime/cc-datetime-panel.ui | 17 +++++++++++++--
 2 files changed, 43 insertions(+), 16 deletions(-)
---
diff --git a/panels/datetime/cc-datetime-panel.c b/panels/datetime/cc-datetime-panel.c
index 0524acb16..8cc14d656 100644
--- a/panels/datetime/cc-datetime-panel.c
+++ b/panels/datetime/cc-datetime-panel.c
@@ -93,7 +93,7 @@ struct _CcDateTimePanel
   GtkWidget *datetime_dialog;
   GtkWidget *datetime_label;
   GtkWidget *day_spinbutton;
-  GtkWidget *format_combobox;
+  GtkWidget *timeformat_row;
   GtkWidget *h_spinbutton;
   GtkLockButton *lock_button;
   GtkLabel  *month_label;
@@ -178,22 +178,38 @@ cc_date_time_panel_get_help_uri (CcPanel *panel)
 static void clock_settings_changed_cb (CcDateTimePanel *panel,
                                        gchar           *key);
 
+static char *
+clock_format_name (AdwEnumListItem *item,
+                   gpointer         user_data)
+{
+
+  switch (adw_enum_list_item_get_value (item))
+    {
+    case G_DESKTOP_CLOCK_FORMAT_24H:
+      return g_strdup (_("24-hour"));
+      break;
+    case G_DESKTOP_CLOCK_FORMAT_12H:
+      return g_strdup (_("AM / PM"));
+      break;
+    default:
+      return NULL;
+      break;
+    }
+}
+
 static void
 change_clock_settings (GObject         *gobject,
                        GParamSpec      *pspec,
                        CcDateTimePanel *self)
 {
   GDesktopClockFormat value;
-  const char *active_id;
+  AdwEnumListItem *item;
 
   g_signal_handlers_block_by_func (self->clock_settings, clock_settings_changed_cb,
                                    self);
 
-  active_id = gtk_combo_box_get_active_id (GTK_COMBO_BOX (self->format_combobox));
-  if (!g_strcmp0 (active_id, "24h"))
-    value = G_DESKTOP_CLOCK_FORMAT_24H;
-  else
-    value = G_DESKTOP_CLOCK_FORMAT_12H;
+  item = ADW_ENUM_LIST_ITEM (adw_combo_row_get_selected_item (ADW_COMBO_ROW (self->timeformat_row)));
+  value = adw_enum_list_item_get_value (item);
 
   g_settings_set_enum (self->clock_settings, CLOCK_FORMAT_KEY, value);
   g_settings_set_enum (self->filechooser_settings, CLOCK_FORMAT_KEY, value);
@@ -214,18 +230,15 @@ clock_settings_changed_cb (CcDateTimePanel *self,
   value = g_settings_get_enum (self->clock_settings, CLOCK_FORMAT_KEY);
   self->clock_format = value;
 
-  g_signal_handlers_block_by_func (self->format_combobox, change_clock_settings, self);
+  g_signal_handlers_block_by_func (self->timeformat_row, change_clock_settings, self);
 
-  if (value == G_DESKTOP_CLOCK_FORMAT_24H)
-    gtk_combo_box_set_active_id (GTK_COMBO_BOX (self->format_combobox), "24h");
-  else
-    gtk_combo_box_set_active_id (GTK_COMBO_BOX (self->format_combobox), "12h");
+  adw_combo_row_set_selected (ADW_COMBO_ROW (self->timeformat_row), value);
 
   cc_time_editor_set_am_pm (CC_TIME_EDITOR (self->time_editor),
                             value == G_DESKTOP_CLOCK_FORMAT_12H);
   update_time (self);
 
-  g_signal_handlers_unblock_by_func (self->format_combobox, change_clock_settings, self);
+  g_signal_handlers_unblock_by_func (self->timeformat_row, change_clock_settings, self);
 }
 
 
@@ -972,7 +985,7 @@ cc_date_time_panel_class_init (CcDateTimePanelClass *klass)
   gtk_widget_class_bind_template_child (widget_class, CcDateTimePanel, datetime_label);
   gtk_widget_class_bind_template_child (widget_class, CcDateTimePanel, day_row);
   gtk_widget_class_bind_template_child (widget_class, CcDateTimePanel, day_spinbutton);
-  gtk_widget_class_bind_template_child (widget_class, CcDateTimePanel, format_combobox);
+  gtk_widget_class_bind_template_child (widget_class, CcDateTimePanel, timeformat_row);
   gtk_widget_class_bind_template_child (widget_class, CcDateTimePanel, lock_button);
   gtk_widget_class_bind_template_child (widget_class, CcDateTimePanel, month_label);
   gtk_widget_class_bind_template_child (widget_class, CcDateTimePanel, month_popover);
@@ -991,6 +1004,7 @@ cc_date_time_panel_class_init (CcDateTimePanelClass *klass)
   gtk_widget_class_bind_template_callback (widget_class, change_clock_settings);
   gtk_widget_class_bind_template_callback (widget_class, month_row_activated_cb);
   gtk_widget_class_bind_template_callback (widget_class, date_box_row_activated_cb);
+  gtk_widget_class_bind_template_callback (widget_class, clock_format_name);
 
   bind_textdomain_codeset (GETTEXT_PACKAGE_TIMEZONES, "UTF-8");
 
diff --git a/panels/datetime/cc-datetime-panel.ui b/panels/datetime/cc-datetime-panel.ui
index 4e5c07373..f9135798d 100644
--- a/panels/datetime/cc-datetime-panel.ui
+++ b/panels/datetime/cc-datetime-panel.ui
@@ -366,7 +366,20 @@
         <child>
           <object class="AdwPreferencesGroup">
             <child>
-              <object class="AdwActionRow" id="timeformat_row">
+              <object class="AdwComboRow" id="timeformat_row">
+                <property name="title" translatable="yes">Time _Format</property>
+                <property name="use_underline">True</property>
+                <signal name="notify::selected-item" handler="change_clock_settings" 
object="CcDateTimePanel" swapped="no"/>
+                <property name="model">
+                  <object class="AdwEnumListModel">
+                    <property name="enum_type">GDesktopClockFormat</property>
+                  </object>
+                </property>
+                <property name="expression">
+                  <closure type="gchararray" function="clock_format_name"/>
+                </property>
+              </object>
+              <!-- <object class="AdwActionRow" id="timeformat_row">
                 <property name="title" translatable="yes">Time _Format</property>
                 <property name="use_underline">True</property>
                 <child>
@@ -379,7 +392,7 @@
                     </items>
                   </object>
                 </child>
-              </object>
+              </object> -->
             </child>
           </object>
         </child>


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