diff --git a/panels/power/cc-power-panel.c b/panels/power/cc-power-panel.c index 21183f39c..3e1b323f4 100644 --- a/panels/power/cc-power-panel.c +++ b/panels/power/cc-power-panel.c @@ -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); diff --git a/panels/power/cc-power-panel.ui b/panels/power/cc-power-panel.ui index d8283c556..bc58e7462 100644 --- a/panels/power/cc-power-panel.ui +++ b/panels/power/cc-power-panel.ui @@ -206,6 +206,21 @@ + + + False + Automatic Power Saver + Enables power saver mode when battery is low. + True + power_saver_low_battery_switch + + + True + center + + + + False