[gnome-control-center] power: Use HdyComboRow for the Power Button Behavior row
- From: Robert Ancell <rancell src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnome-control-center] power: Use HdyComboRow for the Power Button Behavior row
- Date: Fri, 7 May 2021 02:53:33 +0000 (UTC)
commit 4cc4b91b4e80dc7420e94025362878361a5ed391
Author: Adrien Plazas <kekun plazas laposte net>
Date: Fri Jan 8 16:17:42 2021 +0100
power: Use HdyComboRow for the Power Button Behavior row
This simplifies the code a bit and modernizes the UI.
panels/power/cc-power-panel.c | 71 ++++++++++++++++++++++--------------------
panels/power/cc-power-panel.ui | 46 +++------------------------
2 files changed, 42 insertions(+), 75 deletions(-)
---
diff --git a/panels/power/cc-power-panel.c b/panels/power/cc-power-panel.c
index b046b2589..ea979cfc7 100644
--- a/panels/power/cc-power-panel.c
+++ b/panels/power/cc-power-panel.c
@@ -92,9 +92,7 @@ struct _CcPowerPanel
GtkSizeGroup *level_sizegroup;
GtkListBoxRow *mobile_row;
GtkSwitch *mobile_switch;
- GtkComboBox *power_button_combo;
- GtkListStore *power_button_liststore;
- GtkListBoxRow *power_button_row;
+ HdyComboRow *power_button_row;
GtkLabel *power_profile_heading;
GtkListBox *power_profile_listbox;
GtkBox *power_profile_section;
@@ -927,25 +925,18 @@ blank_screen_row_changed_cb (CcPowerPanel *self)
}
static void
-power_button_combo_changed_cb (CcPowerPanel *self)
+power_button_row_changed_cb (CcPowerPanel *self)
{
- GtkTreeIter iter;
- GtkTreeModel *model;
+ GListModel *model;
+ gint selected_index;
+ HdyValueObject *value_object;
gint value;
- gboolean ret;
- /* no selection */
- ret = gtk_combo_box_get_active_iter (GTK_COMBO_BOX (self->power_button_combo), &iter);
- if (!ret)
- return;
-
- /* get entry */
- model = gtk_combo_box_get_model (GTK_COMBO_BOX (self->power_button_combo));
- gtk_tree_model_get (model, &iter,
- 1, &value,
- -1);
+ model = hdy_combo_row_get_model (self->power_button_row);
+ selected_index = hdy_combo_row_get_selected_index (self->power_button_row);
+ value_object = g_list_model_get_item (model, selected_index);
+ value = GPOINTER_TO_UINT (g_object_get_data (G_OBJECT (value_object), "value"));
- /* set both keys */
g_settings_set_enum (self->gsd_settings, "power-button-action", value);
}
@@ -1048,10 +1039,11 @@ set_sleep_type (const GValue *value,
}
static void
-populate_power_button_model (GtkTreeModel *model,
- gboolean can_suspend,
- gboolean can_hibernate)
+populate_power_button_row (HdyComboRow *combo_row,
+ gboolean can_suspend,
+ gboolean can_hibernate)
{
+ g_autoptr (GListStore) list_store = NULL;
struct {
char *name;
GsdPowerButtonActionType value;
@@ -1063,20 +1055,28 @@ populate_power_button_model (GtkTreeModel *model,
};
guint i;
+ list_store = g_list_store_new (HDY_TYPE_VALUE_OBJECT);
for (i = 0; i < G_N_ELEMENTS (actions); i++)
{
+ g_autoptr (HdyValueObject) value_object = NULL;
+
if (!can_suspend && actions[i].value == GSD_POWER_BUTTON_ACTION_SUSPEND)
continue;
if (!can_hibernate && actions[i].value == GSD_POWER_BUTTON_ACTION_HIBERNATE)
continue;
- gtk_list_store_insert_with_values (GTK_LIST_STORE (model),
- NULL, -1,
- 0, _(actions[i].name),
- 1, actions[i].value,
- -1);
+ value_object = hdy_value_object_new_string (actions[i].name);
+ g_object_set_data (G_OBJECT (value_object),
+ "value",
+ GUINT_TO_POINTER (actions[i].value));
+ g_list_store_append (list_store, value_object);
}
+
+ hdy_combo_row_bind_name_model (combo_row,
+ G_LIST_MODEL (list_store),
+ (HdyComboRowGetNameFunc) hdy_value_object_dup_string,
+ NULL, NULL);
}
#define NEVER 0
@@ -1635,10 +1635,17 @@ setup_general_section (CcPowerPanel *self)
{
gtk_widget_show (GTK_WIDGET (self->power_button_row));
- populate_power_button_model (GTK_TREE_MODEL (self->power_button_liststore), can_suspend,
can_hibernate);
- g_signal_handlers_block_by_func (self->power_button_combo, power_button_combo_changed_cb, self);
- set_value_for_combo (self->power_button_combo, g_settings_get_enum (self->gsd_settings,
"power-button-action"));
- g_signal_handlers_unblock_by_func (self->power_button_combo, power_button_combo_changed_cb, self);
+ g_signal_handlers_block_by_func (self->power_button_row,
+ power_button_row_changed_cb,
+ self);
+ populate_power_button_row (self->power_button_row,
+ can_suspend,
+ can_hibernate);
+ set_value_for_combo_row (self->power_button_row,
+ g_settings_get_enum (self->gsd_settings, "power-button-action"));
+ g_signal_handlers_unblock_by_func (self->power_button_row,
+ power_button_row_changed_cb,
+ self);
show_section = TRUE;
}
@@ -1725,8 +1732,6 @@ cc_power_panel_class_init (CcPowerPanelClass *klass)
gtk_widget_class_bind_template_child (widget_class, CcPowerPanel, level_sizegroup);
gtk_widget_class_bind_template_child (widget_class, CcPowerPanel, mobile_row);
gtk_widget_class_bind_template_child (widget_class, CcPowerPanel, mobile_switch);
- gtk_widget_class_bind_template_child (widget_class, CcPowerPanel, power_button_combo);
- gtk_widget_class_bind_template_child (widget_class, CcPowerPanel, power_button_liststore);
gtk_widget_class_bind_template_child (widget_class, CcPowerPanel, power_button_row);
gtk_widget_class_bind_template_child (widget_class, CcPowerPanel, power_profile_heading);
gtk_widget_class_bind_template_child (widget_class, CcPowerPanel, power_profile_listbox);
@@ -1752,7 +1757,7 @@ cc_power_panel_class_init (CcPowerPanelClass *klass)
gtk_widget_class_bind_template_callback (widget_class, blank_screen_row_changed_cb);
gtk_widget_class_bind_template_callback (widget_class, keynav_failed_cb);
gtk_widget_class_bind_template_callback (widget_class, mobile_switch_changed_cb);
- gtk_widget_class_bind_template_callback (widget_class, power_button_combo_changed_cb);
+ gtk_widget_class_bind_template_callback (widget_class, power_button_row_changed_cb);
gtk_widget_class_bind_template_callback (widget_class, power_profiles_row_activated_cb);
gtk_widget_class_bind_template_callback (widget_class, power_saving_listbox_row_activated_cb);
gtk_widget_class_bind_template_callback (widget_class, wifi_switch_changed_cb);
diff --git a/panels/power/cc-power-panel.ui b/panels/power/cc-power-panel.ui
index a9bb39b77..18fc0a8ac 100644
--- a/panels/power/cc-power-panel.ui
+++ b/panels/power/cc-power-panel.ui
@@ -51,14 +51,6 @@
</row>
</data>
</object>
- <object class="GtkListStore" id="power_button_liststore">
- <columns>
- <!-- column-name name -->
- <column type="gchararray"/>
- <!-- column-name value -->
- <column type="gint"/>
- </columns>
- </object>
<template class="CcPowerPanel" parent="CcPanel">
<property name="visible">True</property>
<property name="can_focus">False</property>
@@ -660,41 +652,11 @@
<relation target="general_heading" type="labelled-by"/>
</accessibility>
<child>
- <object class="GtkListBoxRow" id="power_button_row">
+ <object class="HdyComboRow" id="power_button_row">
<property name="visible">False</property>
- <property name="selectable">False</property>
- <property name="activatable">False</property>
- <child>
- <object class="GtkBox">
- <property name="visible">True</property>
- <property name="margin-start">12</property>
- <property name="margin-end">12</property>
- <property name="spacing">12</property>
- <child>
- <object class="GtkLabel">
- <property name="visible">True</property>
- <property name="use-markup">True</property>
- <property name="use-underline">True</property>
- <property name="ellipsize">end</property>
- <property name="label" translatable="yes">Po_wer Button
Behavior</property>
- <property name="margin-top">6</property>
- <property name="margin-bottom">6</property>
- <property name="expand">True</property>
- <property name="xalign">0</property>
- <property name="mnemonic_widget">power_button_combo</property>
- </object>
- </child>
- <child>
- <object class="GtkComboBoxText" id="power_button_combo">
- <property name="visible">True</property>
- <property name="valign">center</property>
- <property name="entry-text-column">0</property>
- <property name="model">power_button_liststore</property>
- <signal name="changed" handler="power_button_combo_changed_cb"
object="CcPowerPanel" swapped="yes"/>
- </object>
- </child>
- </object>
- </child>
+ <property name="title" translatable="yes">Po_wer Button Behavior</property>
+ <property name="use_underline">True</property>
+ <signal name="notify::selected-index" handler="power_button_row_changed_cb"
object="CcPowerPanel" swapped="yes"/>
</object>
</child>
<child>
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]