power: Make insensitive any sleep actions the hardware cannot do

This commit is contained in:
Richard Hughes 2011-07-19 14:31:23 +01:00
parent 90ec42cdef
commit 4f08a32570
3 changed files with 78 additions and 5 deletions

View file

@ -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)

View file

@ -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,
@ -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",

View file

@ -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>