[gnome-control-center] power: Make insensitive any sleep actions the hardware cannot do



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]