[gnome-control-center] power: Make insensitive any sleep actions the hardware cannot do
- From: Richard Hughes <rhughes src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnome-control-center] power: Make insensitive any sleep actions the hardware cannot do
- Date: Tue, 19 Jul 2011 13:32:15 +0000 (UTC)
commit 4f08a32570490f837e7c6909b095d2b44f4c05ee
Author: Richard Hughes <richard hughsie com>
Date: Tue Jul 19 14:31:23 2011 +0100
power: Make insensitive any sleep actions the hardware cannot do
configure.ac | 3 +-
panels/power/cc-power-panel.c | 57 +++++++++++++++++++++++++++++++++++++++++
panels/power/power.ui | 23 +++++++++++++---
3 files changed, 78 insertions(+), 5 deletions(-)
---
diff --git a/configure.ac b/configure.ac
index 81f110c..b5afc58 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 dddfb16..ec15a52 100644
--- a/panels/power/cc-power-panel.c
+++ b/panels/power/cc-power-panel.c
@@ -24,6 +24,7 @@
#include <libupower-glib/upower.h>
#include <glib/gi18n.h>
+#include <gnome-settings-daemon/gsd-enums.h>
#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,
@@ -417,6 +424,53 @@ combo_enum_changed_cb (GtkWidget *widget, CcPowerPanel *self)
}
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)
{
GtkTreeIter iter;
@@ -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 863be73..d2d37ee 100644
--- a/panels/power/power.ui
+++ b/panels/power/power.ui
@@ -8,15 +8,19 @@
<column type="gchararray"/>
<!-- column-name value -->
<column type="gint"/>
+ <!-- column-name sensitive -->
+ <column type="gboolean"/>
</columns>
<data>
<row>
<col id="0" translatable="yes">Suspend</col>
<col id="1">1</col>
+ <col id="2">True</col>
</row>
<row>
<col id="0" translatable="yes">Hibernate</col>
<col id="1">3</col>
+ <col id="2">True</col>
</row>
</data>
</object>
@@ -26,27 +30,34 @@
<column type="gchararray"/>
<!-- column-name value -->
<column type="gint"/>
+ <!-- column-name sensitive -->
+ <column type="gboolean"/>
</columns>
<data>
<row>
<col id="0" translatable="yes">Suspend</col>
<col id="1">1</col>
+ <col id="2">True</col>
</row>
<row>
<col id="0" translatable="yes">Hibernate</col>
<col id="1">3</col>
+ <col id="2">True</col>
</row>
<row>
<col id="0" translatable="yes">Do nothing</col>
<col id="1">5</col>
+ <col id="2">True</col>
</row>
<row>
<col id="0" translatable="yes">Ask me</col>
<col id="1">4</col>
+ <col id="2">True</col>
</row>
<row>
<col id="0" translatable="yes">Shutdown</col>
<col id="1">2</col>
+ <col id="2">True</col>
</row>
</data>
</object>
@@ -54,17 +65,21 @@
<columns>
<!-- column-name name -->
<column type="gchararray"/>
- <!-- column-name gint1 -->
+ <!-- column-name value -->
<column type="gint"/>
+ <!-- column-name sensitive -->
+ <column type="gboolean"/>
</columns>
<data>
<row>
<col id="0" translatable="yes">Hibernate</col>
<col id="1">3</col>
+ <col id="2">True</col>
</row>
<row>
<col id="0" translatable="yes">Shutdown</col>
<col id="1">2</col>
+ <col id="2">True</col>
</row>
</data>
</object>
@@ -304,7 +319,7 @@
</packing>
</child>
<child>
- <object class="GtkComboBoxText" id="combobox_critical">
+ <object class="GtkComboBox" id="combobox_critical">
<property name="visible">True</property>
<property name="model">liststore_critical</property>
</object>
@@ -359,7 +374,7 @@
</packing>
</child>
<child>
- <object class="GtkComboBoxText" id="combobox_button_power">
+ <object class="GtkComboBox" id="combobox_button_power">
<property name="visible">True</property>
<property name="model">liststore_power</property>
</object>
@@ -404,7 +419,7 @@
</packing>
</child>
<child>
- <object class="GtkComboBoxText" id="combobox_button_sleep">
+ <object class="GtkComboBox" id="combobox_button_sleep">
<property name="visible">True</property>
<property name="model">liststore_sleep</property>
</object>
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]