diff --git a/configure.ac b/configure.ac index 81f110c89..b5afc5851 100644 --- a/configure.ac +++ b/configure.ac @@ -102,7 +102,8 @@ PKG_CHECK_MODULES(MOUSE_PANEL, $COMMON_MODULES xi >= 1.2 gnome-settings-daemon >= $GSD_REQUIRED_VERSION x11) PKG_CHECK_MODULES(NETWORK_PANEL, $COMMON_MODULES) PKG_CHECK_MODULES(ONLINE_ACCOUNTS_PANEL, $COMMON_MODULES goa-1.0 goa-backend-1.0) -PKG_CHECK_MODULES(POWER_PANEL, $COMMON_MODULES upower-glib >= 0.9.1) +PKG_CHECK_MODULES(POWER_PANEL, $COMMON_MODULES upower-glib >= 0.9.1 + gnome-settings-daemon >= $GSD_REQUIRED_VERSION) PKG_CHECK_MODULES(COLOR_PANEL, $COMMON_MODULES colord >= 0.1.8) PKG_CHECK_MODULES(PRINTERS_PANEL, $COMMON_MODULES dbus-glib-1 polkit-gobject-1 >= $POLKIT_REQUIRED_VERSION) diff --git a/panels/power/cc-power-panel.c b/panels/power/cc-power-panel.c index dddfb161f..ec15a5250 100644 --- a/panels/power/cc-power-panel.c +++ b/panels/power/cc-power-panel.c @@ -24,6 +24,7 @@ #include #include +#include #include "cc-power-panel.h" @@ -44,6 +45,12 @@ struct _CcPowerPanelPrivate UpClient *up_client; }; +enum +{ + ACTION_MODEL_TEXT, + ACTION_MODEL_VALUE, + ACTION_MODEL_SENSITIVE +}; static void cc_power_panel_get_property (GObject *object, @@ -416,6 +423,53 @@ combo_enum_changed_cb (GtkWidget *widget, CcPowerPanel *self) g_settings_set_enum (self->priv->gsd_settings, key, value); } +static void +disable_unavailable_combo_items (CcPowerPanel *self, + GtkComboBox *combo_box) +{ + gboolean enabled; + gboolean ret; + gint value_tmp; + GtkCellRenderer *renderer; + GtkTreeIter iter; + GtkTreeModel *model; + + /* setup the renderer */ + renderer = gtk_cell_renderer_text_new (); + gtk_cell_layout_pack_start (GTK_CELL_LAYOUT (combo_box), renderer, TRUE); + gtk_cell_layout_set_attributes (GTK_CELL_LAYOUT (combo_box), renderer, + "text", ACTION_MODEL_TEXT, + "sensitive", ACTION_MODEL_SENSITIVE, + NULL); + + /* get entry */ + model = gtk_combo_box_get_model (combo_box); + ret = gtk_tree_model_get_iter_first (model, &iter); + if (!ret) + return; + + /* disable any actions we cannot do */ + do + { + gtk_tree_model_get (model, &iter, + ACTION_MODEL_VALUE, &value_tmp, + -1); + switch (value_tmp) { + case GSD_POWER_ACTION_SUSPEND: + enabled = up_client_get_can_suspend (self->priv->up_client); + break; + case GSD_POWER_ACTION_HIBERNATE: + enabled = up_client_get_can_hibernate (self->priv->up_client); + break; + default: + enabled = TRUE; + } + gtk_list_store_set (GTK_LIST_STORE (model), &iter, + ACTION_MODEL_SENSITIVE, enabled, + -1); + } while (gtk_tree_model_iter_next (model, &iter)); +} + static void set_value_for_combo (GtkComboBox *combo_box, gint value) { @@ -613,6 +667,7 @@ cc_power_panel_init (CcPowerPanel *self) value = g_settings_get_enum (self->priv->gsd_settings, "critical-battery-action"); widget = GTK_WIDGET (gtk_builder_get_object (self->priv->builder, "combobox_critical")); + disable_unavailable_combo_items (self, GTK_COMBO_BOX (widget)); set_value_for_combo (GTK_COMBO_BOX (widget), value); g_object_set_data (G_OBJECT(widget), "_gsettings_key", "critical-battery-action"); g_signal_connect (widget, "changed", @@ -622,6 +677,7 @@ cc_power_panel_init (CcPowerPanel *self) value = g_settings_get_enum (self->priv->gsd_settings, "button-power"); widget = GTK_WIDGET (gtk_builder_get_object (self->priv->builder, "combobox_button_power")); + disable_unavailable_combo_items (self, GTK_COMBO_BOX (widget)); set_value_for_combo (GTK_COMBO_BOX (widget), value); g_object_set_data (G_OBJECT(widget), "_gsettings_key", "button-power"); g_signal_connect (widget, "changed", @@ -631,6 +687,7 @@ cc_power_panel_init (CcPowerPanel *self) value = g_settings_get_enum (self->priv->gsd_settings, "button-sleep"); widget = GTK_WIDGET (gtk_builder_get_object (self->priv->builder, "combobox_button_sleep")); + disable_unavailable_combo_items (self, GTK_COMBO_BOX (widget)); set_value_for_combo (GTK_COMBO_BOX (widget), value); g_object_set_data (G_OBJECT(widget), "_gsettings_key", "button-sleep"); g_signal_connect (widget, "changed", diff --git a/panels/power/power.ui b/panels/power/power.ui index 863be7390..d2d37ee9f 100644 --- a/panels/power/power.ui +++ b/panels/power/power.ui @@ -8,15 +8,19 @@ + + Suspend 1 + True Hibernate 3 + True @@ -26,27 +30,34 @@ + + Suspend 1 + True Hibernate 3 + True Do nothing 5 + True Ask me 4 + True Shutdown 2 + True @@ -54,17 +65,21 @@ - + + + Hibernate 3 + True Shutdown 2 + True @@ -304,7 +319,7 @@ - + True liststore_critical @@ -359,7 +374,7 @@ - + True liststore_power @@ -404,7 +419,7 @@ - + True liststore_sleep