[gnome-control-center] lock: Use AdwComboRow for blank screen delay



commit 847f1ea584697ab760d387cdc3b449120da9d9cb
Author: Christopher Davis <christopherdavis gnome org>
Date:   Fri Jan 21 15:38:49 2022 -0800

    lock: Use AdwComboRow for blank screen delay

 panels/lock/cc-lock-panel.c  | 123 +++++++++++++++++++++----------------------
 panels/lock/cc-lock-panel.h  |  14 +++++
 panels/lock/cc-lock-panel.ui |  70 ++++--------------------
 3 files changed, 82 insertions(+), 125 deletions(-)
---
diff --git a/panels/lock/cc-lock-panel.c b/panels/lock/cc-lock-panel.c
index 4427a389d..c4b602a90 100644
--- a/panels/lock/cc-lock-panel.c
+++ b/panels/lock/cc-lock-panel.c
@@ -40,7 +40,7 @@ struct _CcLockPanel
   GCancellable  *cancellable;
 
   GtkSwitch     *automatic_screen_lock_switch;
-  GtkComboBox   *blank_screen_combo;
+  AdwComboRow   *blank_screen_row;
   AdwComboRow   *lock_after_row;
   GtkSwitch     *show_notifications_switch;
   GtkSwitch     *usb_protection_switch;
@@ -114,79 +114,72 @@ set_lock_value_for_combo (AdwComboRow *combo_row,
                               adw_enum_list_model_find_position (model, value));
 }
 
+static char *
+screen_delay_name_cb (AdwEnumListItem *item,
+                      gpointer         user_data)
+{
+
+  switch (adw_enum_list_item_get_value (item))
+    {
+    case CC_LOCK_PANEL_BLANK_SCREEN_DELAY_1_MIN:
+      /* Translators: Option for "Blank screen" in "Screen Lock" panel */
+      return g_strdup (C_("blank_screen", "1 minute"));
+    case CC_LOCK_PANEL_BLANK_SCREEN_DELAY_2_MIN:
+      /* Translators: Option for "Blank screen" in "Screen Lock" panel */
+      return g_strdup (C_("blank_screen", "2 minutes"));
+    case CC_LOCK_PANEL_BLANK_SCREEN_DELAY_3_MIN:
+      /* Translators: Option for "Blank screen" in "Screen Lock" panel */
+      return g_strdup (C_("blank_screen", "3 minutes"));
+    case CC_LOCK_PANEL_BLANK_SCREEN_DELAY_4_MIN:
+      /* Translators: Option for "Blank screen" in "Screen Lock" panel */
+      return g_strdup (C_("blank_screen", "4 minutes"));
+    case CC_LOCK_PANEL_BLANK_SCREEN_DELAY_5_MIN:
+      /* Translators: Option for "Blank screen" in "Screen Lock" panel */
+      return g_strdup (C_("blank_screen", "5 minutes"));
+    case CC_LOCK_PANEL_BLANK_SCREEN_DELAY_8_MIN:
+      /* Translators: Option for "Blank screen" in "Screen Lock" panel */
+      return g_strdup (C_("blank_screen", "8 minutes"));
+    case CC_LOCK_PANEL_BLANK_SCREEN_DELAY_10_MIN:
+      /* Translators: Option for "Blank screen" in "Screen Lock" panel */
+      return g_strdup (C_("blank_screen", "10 minutes"));
+    case CC_LOCK_PANEL_BLANK_SCREEN_DELAY_12_MIN:
+      /* Translators: Option for "Blank screen" in "Screen Lock" panel */
+      return g_strdup (C_("blank_screen", "12 minutes"));
+    case CC_LOCK_PANEL_BLANK_SCREEN_DELAY_15_MIN:
+      /* Translators: Option for "Blank screen" in "Screen Lock" panel */
+      return g_strdup (C_("blank_screen", "15 minutes"));
+    case CC_LOCK_PANEL_BLANK_SCREEN_DELAY_NEVER:
+      /* Translators: Option for "Blank screen" in "Screen Lock" panel */
+      return g_strdup (C_("blank_screen", "Never"));
+    default:
+      return NULL;
+    }
+}
+
 static void
 set_blank_screen_delay_value (CcLockPanel *self,
                               gint         value)
 {
-  g_autoptr(GtkTreeIter) insert = NULL;
-  g_autofree gchar *text = NULL;
-  GtkTreeIter iter;
-  GtkTreeIter new;
-  GtkTreeModel *model;
-  gint value_tmp;
-  gint value_last = 0;
-  gboolean ret;
-
-  /* get entry */
-  model = gtk_combo_box_get_model (self->blank_screen_combo);
-  ret = gtk_tree_model_get_iter_first (model, &iter);
-  if (!ret)
-    return;
-
-  /* try to make the UI match the setting */
-  do
-    {
-      gtk_tree_model_get (model,
-                          &iter,
-                          1, &value_tmp,
-                          -1);
-      if (value_tmp == value)
-        {
-          gtk_combo_box_set_active_iter (self->blank_screen_combo, &iter);
-          return;
-        }
-
-      /* Insert before if the next value is larger or the value is lower
-       * again (i.e. "Never" is zero and last). */
-      if (!insert && (value_tmp > value || value_last > value_tmp))
-        insert = gtk_tree_iter_copy (&iter);
-
-      value_last = value_tmp;
-    } while (gtk_tree_model_iter_next (model, &iter));
+  AdwEnumListModel *model;
 
-  /* The value is not listed, so add it at the best point (or the end). */
-  gtk_list_store_insert_before (GTK_LIST_STORE (model), &new, insert);
+  model = ADW_ENUM_LIST_MODEL (adw_combo_row_get_model (self->blank_screen_row));
 
-  text = cc_util_time_to_string_text (value * 1000);
-  gtk_list_store_set (GTK_LIST_STORE (model), &new,
-                      0, text,
-                      1, value,
-                      -1);
-  gtk_combo_box_set_active_iter (self->blank_screen_combo, &new);
+  adw_combo_row_set_selected (self->blank_screen_row,
+                              adw_enum_list_model_find_position (model, value));
 }
 
 static void
-on_blank_screen_delay_changed_cb (GtkWidget   *widget,
+on_blank_screen_delay_changed_cb (AdwComboRow *combo_row,
+                                  GParamSpec  *pspec,
                                   CcLockPanel *self)
 {
-  GtkTreeIter iter;
-  GtkTreeModel *model;
-  gint value;
-  gboolean ret;
-
-  /* no selection */
-  ret = gtk_combo_box_get_active_iter (GTK_COMBO_BOX (widget), &iter);
-  if (!ret)
-    return;
-
-  /* get entry */
-  model = gtk_combo_box_get_model (GTK_COMBO_BOX(widget));
-  gtk_tree_model_get (model, &iter,
-                      1, &value,
-                      -1);
-
-  /* set both keys */
-  g_settings_set_uint (self->session_settings, "idle-delay", value);
+  AdwEnumListItem *item;
+  CcLockPanelBlankScreenDelay delay;
+
+  item = ADW_ENUM_LIST_ITEM (adw_combo_row_get_selected_item (combo_row));
+  delay = adw_enum_list_item_get_value (item);
+
+  g_settings_set_uint (self->session_settings, "idle-delay", delay);
 }
 
 static void
@@ -266,16 +259,18 @@ cc_lock_panel_class_init (CcLockPanelClass *klass)
   oclass->finalize = cc_lock_panel_finalize;
 
   g_type_ensure (CC_TYPE_LOCK_PANEL_LOCK_AFTER);
+  g_type_ensure (CC_TYPE_LOCK_PANEL_BLANK_SCREEN_DELAY);
 
   gtk_widget_class_set_template_from_resource (widget_class, 
"/org/gnome/control-center/lock/cc-lock-panel.ui");
 
   gtk_widget_class_bind_template_child (widget_class, CcLockPanel, automatic_screen_lock_switch);
-  gtk_widget_class_bind_template_child (widget_class, CcLockPanel, blank_screen_combo);
+  gtk_widget_class_bind_template_child (widget_class, CcLockPanel, blank_screen_row);
   gtk_widget_class_bind_template_child (widget_class, CcLockPanel, lock_after_row);
   gtk_widget_class_bind_template_child (widget_class, CcLockPanel, show_notifications_switch);
   gtk_widget_class_bind_template_child (widget_class, CcLockPanel, usb_protection_switch);
   gtk_widget_class_bind_template_child (widget_class, CcLockPanel, usb_protection_row);
 
+  gtk_widget_class_bind_template_callback (widget_class, screen_delay_name_cb);
   gtk_widget_class_bind_template_callback (widget_class, on_blank_screen_delay_changed_cb);
   gtk_widget_class_bind_template_callback (widget_class, lock_after_name_cb);
   gtk_widget_class_bind_template_callback (widget_class, on_lock_combo_changed_cb);
diff --git a/panels/lock/cc-lock-panel.h b/panels/lock/cc-lock-panel.h
index 0737a914a..0174863d8 100644
--- a/panels/lock/cc-lock-panel.h
+++ b/panels/lock/cc-lock-panel.h
@@ -38,4 +38,18 @@ typedef enum {
   CC_LOCK_PANEL_LOCK_AFTER_1_HR       = 3600,
 } CcLockPanelLockAfter;
 
+typedef enum {
+  CC_LOCK_PANEL_BLANK_SCREEN_DELAY_1_MIN  = 60,
+  CC_LOCK_PANEL_BLANK_SCREEN_DELAY_2_MIN  = 120,
+  CC_LOCK_PANEL_BLANK_SCREEN_DELAY_3_MIN  = 180,
+  CC_LOCK_PANEL_BLANK_SCREEN_DELAY_4_MIN  = 240,
+  CC_LOCK_PANEL_BLANK_SCREEN_DELAY_5_MIN  = 300,
+  CC_LOCK_PANEL_BLANK_SCREEN_DELAY_8_MIN  = 480,
+  CC_LOCK_PANEL_BLANK_SCREEN_DELAY_10_MIN = 600,
+  CC_LOCK_PANEL_BLANK_SCREEN_DELAY_12_MIN = 720,
+  CC_LOCK_PANEL_BLANK_SCREEN_DELAY_15_MIN = 900,
+  CC_LOCK_PANEL_BLANK_SCREEN_DELAY_NEVER  = 0,
+} CcLockPanelBlankScreenDelay;
+
+
 G_END_DECLS
diff --git a/panels/lock/cc-lock-panel.ui b/panels/lock/cc-lock-panel.ui
index cf168ac5d..7581efd3f 100644
--- a/panels/lock/cc-lock-panel.ui
+++ b/panels/lock/cc-lock-panel.ui
@@ -9,21 +9,20 @@
 
             <!-- Blank Screen Delay row -->
             <child>
-              <object class="AdwActionRow">
+              <object class="AdwComboRow" id="blank_screen_row">
                 <property name="title" translatable="yes">Blank Screen Delay</property>
                 <property name="subtitle" translatable="yes">Period of inactivity after which the screen 
will go blank.</property>
                 <property name="subtitle-lines">2</property>
-                <property name="activatable-widget">blank_screen_combo</property>
-                <property name="sensitive" bind-source="blank_screen_combo" bind-property="sensitive"/>
                 <property name="use-underline">true</property>
-                <child>
-                  <object class="GtkComboBoxText" id="blank_screen_combo">
-                    <property name="valign">center</property>
-                    <property name="entry_text_column">0</property>
-                    <property name="model">blank_screen_model</property>
-                    <signal name="changed" handler="on_blank_screen_delay_changed_cb" object="CcLockPanel" 
swapped="no" />
+                <signal name="notify::selected-item" handler="on_blank_screen_delay_changed_cb"/>
+                <property name="model">
+                  <object class="AdwEnumListModel">
+                    <property name="enum-type">CcLockPanelBlankScreenDelay</property>
                   </object>
-                </child>
+                </property>
+                <property name="expression">
+                  <closure type="gchararray" function="screen_delay_name_cb"/>
+                </property>
               </object>
             </child>
 
@@ -99,55 +98,4 @@
       </object>
     </child>
   </template>
-
-  <object class="GtkListStore" id="blank_screen_model">
-    <columns>
-      <!-- column-name name -->
-      <column type="gchararray"/>
-      <!-- column-name value -->
-      <column type="gint"/>
-    </columns>
-    <data>
-      <row>
-        <col id="0" translatable="yes" context="blank_screen" comments="Translators: Option for &quot;Blank 
screen&quot; in &quot;Power&quot; panel.">1 minute</col>
-        <col id="1">60</col>
-      </row>
-      <row>
-        <col id="0" translatable="yes" context="blank_screen" comments="Translators: Option for &quot;Blank 
screen&quot; in &quot;Power&quot; panel.">2 minutes</col>
-        <col id="1">120</col>
-      </row>
-      <row>
-        <col id="0" translatable="yes" context="blank_screen" comments="Translators: Option for &quot;Blank 
screen&quot; in &quot;Power&quot; panel.">3 minutes</col>
-        <col id="1">180</col>
-      </row>
-      <row>
-        <col id="0" translatable="yes" context="blank_screen" comments="Translators: Option for &quot;Blank 
screen&quot; in &quot;Power&quot; panel.">4 minutes</col>
-        <col id="1">240</col>
-      </row>
-      <row>
-        <col id="0" translatable="yes" context="blank_screen" comments="Translators: Option for &quot;Blank 
screen&quot; in &quot;Power&quot; panel.">5 minutes</col>
-        <col id="1">300</col>
-      </row>
-      <row>
-        <col id="0" translatable="yes" context="blank_screen" comments="Translators: Option for &quot;Blank 
screen&quot; in &quot;Power&quot; panel.">8 minutes</col>
-        <col id="1">480</col>
-      </row>
-      <row>
-        <col id="0" translatable="yes" context="blank_screen" comments="Translators: Option for &quot;Blank 
screen&quot; in &quot;Power&quot; panel.">10 minutes</col>
-        <col id="1">600</col>
-      </row>
-      <row>
-        <col id="0" translatable="yes" context="blank_screen" comments="Translators: Option for &quot;Blank 
screen&quot; in &quot;Power&quot; panel.">12 minutes</col>
-        <col id="1">720</col>
-      </row>
-      <row>
-        <col id="0" translatable="yes" context="blank_screen" comments="Translators: Option for &quot;Blank 
screen&quot; in &quot;Power&quot; panel.">15 minutes</col>
-        <col id="1">900</col>
-      </row>
-      <row>
-        <col id="0" translatable="yes" context="blank_screen" comments="Translators: Option for &quot;Blank 
screen&quot; in &quot;Power&quot; panel.">Never</col>
-        <col id="1">0</col>
-      </row>
-    </data>
-  </object>
 </interface>


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