power: Add UI for "power-saver profile when battery is low"

See https://gitlab.gnome.org/GNOME/gnome-settings-daemon/-/merge_requests/247
This commit is contained in:
Bastien Nocera 2021-07-21 12:29:55 +02:00
parent c3c58aae38
commit 1144db552e
2 changed files with 38 additions and 0 deletions

View file

@ -92,6 +92,8 @@ struct _CcPowerPanel
GtkListBox *power_profile_listbox;
GtkListBox *power_profile_info_listbox;
HdyPreferencesGroup *power_profile_section;
HdyActionRow *power_saver_low_battery_row;
GtkSwitch *power_saver_low_battery_switch;
GtkSizeGroup *row_sizegroup;
GtkComboBox *suspend_on_battery_delay_combo;
GtkLabel *suspend_on_battery_delay_label;
@ -257,6 +259,18 @@ empty_listbox (GtkListBox *listbox)
gtk_container_remove (GTK_CONTAINER (listbox), l->data);
}
static void
update_power_saver_low_battery_row_visibility (CcPowerPanel *self)
{
g_autoptr(UpDevice) composite = NULL;
UpDeviceKind kind;
composite = up_client_get_display_device (self->up_client);
g_object_get (composite, "kind", &kind, NULL);
gtk_widget_set_visible (GTK_WIDGET (self->power_saver_low_battery_row),
self->power_profiles_proxy && kind == UP_DEVICE_KIND_BATTERY);
}
static void
up_client_changed (CcPowerPanel *self)
{
@ -427,6 +441,8 @@ up_client_changed (CcPowerPanel *self)
add_device (self, device);
}
}
update_power_saver_low_battery_row_visibility (self);
}
static void
@ -1727,6 +1743,8 @@ setup_power_profiles (CcPowerPanel *self)
if (self->has_performance_degraded)
power_profile_update_info_boxes (self);
update_power_saver_low_battery_row_visibility (self);
}
static void
@ -1839,6 +1857,8 @@ cc_power_panel_class_init (CcPowerPanelClass *klass)
gtk_widget_class_bind_template_child (widget_class, CcPowerPanel, power_profile_listbox);
gtk_widget_class_bind_template_child (widget_class, CcPowerPanel, power_profile_info_listbox);
gtk_widget_class_bind_template_child (widget_class, CcPowerPanel, power_profile_section);
gtk_widget_class_bind_template_child (widget_class, CcPowerPanel, power_saver_low_battery_row);
gtk_widget_class_bind_template_child (widget_class, CcPowerPanel, power_saver_low_battery_switch);
gtk_widget_class_bind_template_child (widget_class, CcPowerPanel, row_sizegroup);
gtk_widget_class_bind_template_child (widget_class, CcPowerPanel, suspend_on_battery_delay_combo);
gtk_widget_class_bind_template_child (widget_class, CcPowerPanel, suspend_on_battery_delay_label);
@ -1895,6 +1915,9 @@ cc_power_panel_init (CcPowerPanel *self)
setup_power_profiles (self);
setup_power_saving (self);
g_settings_bind (self->gsd_settings, "power-saver-profile-on-low-battery",
self->power_saver_low_battery_switch, "active",
G_SETTINGS_BIND_DEFAULT);
setup_general_section (self);

View file

@ -206,6 +206,21 @@
<signal name="notify::selected-index" handler="blank_screen_row_changed_cb" object="CcPowerPanel" swapped="yes"/>
</object>
</child>
<child>
<object class="HdyActionRow" id="power_saver_low_battery_row">
<property name="visible">False</property>
<property name="title" translatable="yes">Automatic Power Saver</property>
<property name="subtitle" translatable="yes">Enables power saver mode when battery is low.</property>
<property name="use_underline">True</property>
<property name="activatable_widget">power_saver_low_battery_switch</property>
<child>
<object class="GtkSwitch" id="power_saver_low_battery_switch">
<property name="visible">True</property>
<property name="valign">center</property>
</object>
</child>
</object>
</child>
<child>
<object class="HdyActionRow" id="automatic_suspend_row">
<property name="visible">False</property>