[gnome-control-center/wip/power: 1/9] Power: Move screen-related settings here
- From: Matthias Clasen <matthiasc src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnome-control-center/wip/power: 1/9] Power: Move screen-related settings here
- Date: Sun, 2 Dec 2012 21:30:03 +0000 (UTC)
commit aecdc4dc5a4e7bbd49e52ce58d6e2306b3af7077
Author: Matthias Clasen <mclasen redhat com>
Date: Mon Nov 26 00:51:26 2012 -0500
Power: Move screen-related settings here
This is a partial implementation of the new power panel design:
https://live.gnome.org/Design/SystemSettings/Power
https://bugzilla.gnome.org/show_bug.cgi?id=689063
configure.ac | 3 +-
panels/power/cc-power-panel.c | 409 ++++++++++++++++++++++++++++++++++++++++-
panels/power/power.ui | 162 ++++++++++++++++
3 files changed, 569 insertions(+), 5 deletions(-)
---
diff --git a/configure.ac b/configure.ac
index b93859c..8f62f4a 100644
--- a/configure.ac
+++ b/configure.ac
@@ -139,7 +139,8 @@ PKG_CHECK_MODULES(MOUSE_PANEL, $COMMON_MODULES xi >= 1.2
PKG_CHECK_MODULES(NETWORK_PANEL, $COMMON_MODULES)
PKG_CHECK_MODULES(ONLINE_ACCOUNTS_PANEL, $COMMON_MODULES goa-1.0 goa-backend-1.0 >= $GOA_REQUIRED_VERSION)
PKG_CHECK_MODULES(POWER_PANEL, $COMMON_MODULES upower-glib >= 0.9.1
- gnome-settings-daemon >= $GSD_REQUIRED_VERSION)
+ gnome-settings-daemon >= $GSD_REQUIRED_VERSION
+ egg-list-box)
PKG_CHECK_MODULES(COLOR_PANEL, $COMMON_MODULES colord >= 0.1.8)
PKG_CHECK_MODULES(PRINTERS_PANEL, $COMMON_MODULES
polkit-gobject-1 >= $POLKIT_REQUIRED_VERSION)
diff --git a/panels/power/cc-power-panel.c b/panels/power/cc-power-panel.c
index ae81c98..2d13b8e 100644
--- a/panels/power/cc-power-panel.c
+++ b/panels/power/cc-power-panel.c
@@ -25,6 +25,7 @@
#include <libupower-glib/upower.h>
#include <glib/gi18n.h>
#include <gnome-settings-daemon/gsd-enums.h>
+#include "egg-list-box.h"
#include "cc-power-panel.h"
@@ -44,6 +45,11 @@ struct _CcPowerPanelPrivate
GDBusProxy *proxy;
UpClient *up_client;
GtkWidget *levelbar_primary;
+ GDBusProxy *screen_proxy;
+ GSettings *session_settings;
+ GtkWidget *screen_power_saving;
+ GtkWidget *brightness_scale;
+ gboolean setting_brightness;
};
enum
@@ -89,6 +95,11 @@ cc_power_panel_dispose (GObject *object)
g_object_unref (priv->gsd_settings);
priv->gsd_settings = NULL;
}
+ if (priv->session_settings)
+ {
+ g_object_unref (priv->session_settings);
+ priv->session_settings = NULL;
+ }
if (priv->cancellable != NULL)
{
g_cancellable_cancel (priv->cancellable);
@@ -105,6 +116,11 @@ cc_power_panel_dispose (GObject *object)
g_object_unref (priv->proxy);
priv->proxy = NULL;
}
+ if (priv->screen_proxy != NULL)
+ {
+ g_object_unref (priv->screen_proxy);
+ priv->screen_proxy = NULL;
+ }
if (priv->up_client != NULL)
{
g_object_unref (priv->up_client);
@@ -769,6 +785,117 @@ on_properties_changed (GDBusProxy *proxy,
}
static void
+set_brightness_cb (GObject *source_object, GAsyncResult *res, gpointer user_data)
+{
+ GError *error = NULL;
+ GVariant *result;
+ CcPowerPanelPrivate *priv = CC_POWER_PANEL (user_data)->priv;
+
+ /* not setting, so pay attention to changed signals */
+ priv->setting_brightness = FALSE;
+ result = g_dbus_proxy_call_finish (G_DBUS_PROXY (source_object), res, &error);
+ if (result == NULL)
+ {
+ g_printerr ("Error setting brightness: %s\n", error->message);
+ g_error_free (error);
+ return;
+ }
+}
+
+static void
+brightness_slider_value_changed_cb (GtkRange *range, gpointer user_data)
+{
+ guint percentage;
+ CcPowerPanelPrivate *priv = CC_POWER_PANEL (user_data)->priv;
+
+ /* do not loop */
+ if (priv->setting_brightness)
+ return;
+
+ priv->setting_brightness = TRUE;
+
+ /* push this to g-p-m */
+ percentage = (guint) gtk_range_get_value (range);
+ g_dbus_proxy_call (priv->screen_proxy,
+ "SetPercentage",
+ g_variant_new ("(u)",
+ percentage),
+ G_DBUS_CALL_FLAGS_NONE,
+ -1,
+ priv->cancellable,
+ set_brightness_cb,
+ user_data);
+}
+
+static void
+get_brightness_cb (GObject *source_object, GAsyncResult *res, gpointer user_data)
+{
+ GError *error = NULL;
+ GVariant *result;
+ guint brightness;
+ GtkRange *range;
+ CcPowerPanel *self = CC_POWER_PANEL (user_data);
+
+ result = g_dbus_proxy_call_finish (G_DBUS_PROXY (source_object), res, &error);
+ if (result == NULL)
+ {
+ /* We got cancelled, so we're probably exiting */
+ if (g_error_matches (error, G_IO_ERROR, G_IO_ERROR_CANCELLED))
+ {
+ g_error_free (error);
+ return;
+ }
+
+ gtk_widget_hide (self->priv->screen_power_saving);
+
+ if (error->message &&
+ strstr (error->message, "No backlight devices present") == NULL)
+ {
+ g_warning ("Error getting brightness: %s", error->message);
+ }
+ g_error_free (error);
+ return;
+ }
+
+ /* set the slider */
+ g_variant_get (result, "(u)", &brightness);
+ range = GTK_RANGE (self->priv->brightness_scale);
+ gtk_range_set_range (range, 0, 100);
+ gtk_range_set_increments (range, 1, 10);
+ gtk_range_set_value (range, brightness);
+ g_signal_connect (range, "value-changed",
+ G_CALLBACK (brightness_slider_value_changed_cb), user_data);
+ g_variant_unref (result);
+}
+
+static void
+on_signal (GDBusProxy *proxy,
+ gchar *sender_name,
+ gchar *signal_name,
+ GVariant *parameters,
+ gpointer user_data)
+{
+ CcPowerPanel *self = CC_POWER_PANEL (user_data);
+
+ if (g_strcmp0 (signal_name, "Changed") == 0)
+ {
+ /* changed, but ignoring */
+ if (self->priv->setting_brightness)
+ return;
+
+ /* retrieve the value again from g-s-d */
+ g_dbus_proxy_call (self->priv->screen_proxy,
+ "GetPercentage",
+ NULL,
+ G_DBUS_CALL_FLAGS_NONE,
+ 200, /* we don't want to randomly move the bar */
+ self->priv->cancellable,
+ get_brightness_cb,
+ user_data);
+ }
+}
+
+static void
got_power_proxy_cb (GObject *source_object, GAsyncResult *res, gpointer user_data)
{
GError *error = NULL;
@@ -806,6 +933,35 @@ got_power_proxy_cb (GObject *source_object, GAsyncResult *res, gpointer user_dat
}
static void
+got_screen_proxy_cb (GObject *source_object, GAsyncResult *res, gpointer user_data)
+{
+ GError *error = NULL;
+ CcPowerPanelPrivate *priv = CC_POWER_PANEL (user_data)->priv;
+
+ priv->screen_proxy = g_dbus_proxy_new_for_bus_finish (res, &error);
+ if (priv->screen_proxy == NULL)
+ {
+ g_printerr ("Error creating proxy: %s\n", error->message);
+ g_error_free (error);
+ return;
+ }
+
+ /* we want to change the bar if the user presses brightness buttons */
+ g_signal_connect (priv->screen_proxy, "g-signal",
+ G_CALLBACK (on_signal), user_data);
+
+ /* get the initial state */
+ g_dbus_proxy_call (priv->screen_proxy,
+ "GetPercentage",
+ NULL,
+ G_DBUS_CALL_FLAGS_NONE,
+ 200, /* we don't want to randomly move the bar */
+ priv->cancellable,
+ get_brightness_cb,
+ user_data);
+}
+
+static void
combo_time_changed_cb (GtkWidget *widget, CcPowerPanel *self)
{
GtkTreeIter iter;
@@ -988,6 +1144,240 @@ activate_link_cb (GtkLabel *label, gchar *uri, CcPowerPanel *self)
}
static void
+update_separator_func (GtkWidget **separator,
+ GtkWidget *child,
+ GtkWidget *before,
+ gpointer user_data)
+{
+ if (*separator == NULL)
+ {
+ *separator = gtk_separator_new (GTK_ORIENTATION_HORIZONTAL);
+ gtk_widget_show (*separator);
+ }
+}
+
+static void
+activate_child (CcPowerPanel *self,
+ GtkWidget *child)
+{
+ GtkWidget *w;
+ GtkWidget *toplevel;
+
+ if (child != self->priv->screen_power_saving)
+ return;
+
+ w = WID (self->priv->builder, "screen_power_saving_dialog");
+
+ toplevel = gtk_widget_get_toplevel (GTK_WIDGET (self));
+ gtk_window_set_transient_for (GTK_WINDOW (w), GTK_WINDOW (toplevel));
+ gtk_window_set_modal (GTK_WINDOW (w), TRUE);
+ gtk_window_present (GTK_WINDOW (w));
+}
+
+static gboolean
+on_off_label_mapping_get (GValue *value,
+ GVariant *variant,
+ gpointer user_data)
+{
+ g_value_set_string (value, g_variant_get_boolean (variant) ? _("On") : _("Off"));
+
+ return TRUE;
+}
+
+static GtkWidget *
+get_on_off_label (GSettings *settings,
+ const gchar *key)
+{
+ GtkWidget *w;
+
+ w = gtk_label_new ("");
+ g_settings_bind_with_mapping (settings, key,
+ w, "label",
+ G_SETTINGS_BIND_GET,
+ on_off_label_mapping_get,
+ NULL,
+ NULL,
+ NULL);
+ return w;
+}
+
+static void
+set_idle_delay_from_dpms (CcPowerPanel *self,
+ int value)
+{
+ guint off_delay;
+
+ off_delay = 0;
+
+ if (value > 0)
+ off_delay = (guint) value;
+
+ g_settings_set (self->priv->session_settings, "idle-delay", "u", off_delay);
+}
+
+static void
+dpms_combo_changed_cb (GtkWidget *widget, CcPowerPanel *self)
+{
+ GtkTreeIter iter;
+ GtkTreeModel *model;
+ gint value;
+ gboolean ret;
+
+ /* no selection */
+ ret = gtk_combo_box_get_active_iter (GTK_COMBO_BOX (widget), &iter);
+ if (!ret)
+ return;
+
+ /* get entry */
+ model = gtk_combo_box_get_model (GTK_COMBO_BOX (widget));
+ gtk_tree_model_get (model, &iter,
+ 1, &value,
+ -1);
+
+ /* set both battery and ac keys */
+ g_settings_set_int (self->priv->gsd_settings, "sleep-display-ac", value);
+ g_settings_set_int (self->priv->gsd_settings, "sleep-display-battery", value);
+
+ set_idle_delay_from_dpms (self, value);
+}
+
+static void
+set_dpms_value_for_combo (GtkComboBox *combo_box, CcPowerPanel *self)
+{
+ GtkTreeIter iter;
+ GtkTreeModel *model;
+ gint value;
+ gint value_tmp, value_prev;
+ gboolean ret;
+ guint i;
+
+ /* get entry */
+ model = gtk_combo_box_get_model (combo_box);
+ ret = gtk_tree_model_get_iter_first (model, &iter);
+ if (!ret)
+ return;
+
+ value_prev = 0;
+ i = 0;
+
+ /* try to make the UI match the AC setting */
+ value = g_settings_get_int (self->priv->gsd_settings, "sleep-display-ac");
+ do
+ {
+ gtk_tree_model_get (model, &iter,
+ 1, &value_tmp,
+ -1);
+ if (value == value_tmp ||
+ (value_tmp > value_prev && value < value_tmp))
+ {
+ gtk_combo_box_set_active_iter (combo_box, &iter);
+ return;
+ }
+ value_prev = value_tmp;
+ i++;
+ } while (gtk_tree_model_iter_next (model, &iter));
+
+ /* If we didn't find the setting in the list */
+ gtk_combo_box_set_active (combo_box, i - 1);
+}
+
+static void
+add_power_saving_section (CcPowerPanel *self)
+{
+ GtkWidget *vbox;
+ GtkWidget *widget, *box, *label, *scale;
+ GtkWidget *dialog;
+ gchar *s;
+
+ vbox = WID (self->priv->builder, "vbox_power");
+
+ s = g_strdup_printf ("<b>%s</b>", _("Power Saving"));
+ widget = gtk_label_new (s);
+ g_free (s);
+ gtk_label_set_use_markup (GTK_LABEL (widget), TRUE);
+ gtk_misc_set_alignment (GTK_MISC (widget), 0, 0.5);
+ gtk_widget_set_margin_left (widget, 50);
+ gtk_widget_set_margin_right (widget, 50);
+ gtk_widget_set_margin_top (widget, 24);
+ gtk_widget_set_margin_bottom (widget, 6);
+ gtk_box_pack_start (GTK_BOX (vbox), widget, FALSE, TRUE, 0);
+ gtk_widget_show (widget);
+
+ widget = GTK_WIDGET (egg_list_box_new ());
+ egg_list_box_set_separator_funcs (EGG_LIST_BOX (widget),
+ update_separator_func,
+ NULL, NULL);
+ g_signal_connect_swapped (widget, "child-activated",
+ G_CALLBACK (activate_child), self);
+
+
+ box = gtk_scrolled_window_new (NULL, NULL);
+ gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (box),
+ GTK_POLICY_NEVER, GTK_POLICY_NEVER);
+ gtk_widget_set_margin_left (box, 50);
+ gtk_widget_set_margin_right (box, 50);
+ gtk_widget_show (box);
+ egg_list_box_add_to_scrolled (EGG_LIST_BOX (widget), GTK_SCROLLED_WINDOW (box));
+ gtk_box_pack_start (GTK_BOX (vbox), box, FALSE, TRUE, 0);
+
+ box = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 6);
+ label = gtk_label_new (_("Screen _Brightness"));
+ gtk_misc_set_alignment (GTK_MISC (label), 0, 0.5);
+ gtk_label_set_use_underline (GTK_LABEL (label), TRUE);
+ gtk_widget_set_margin_left (label, 12);
+ gtk_widget_set_margin_right (label, 50);
+ gtk_widget_set_margin_top (label, 6);
+ gtk_widget_set_margin_bottom (label, 6);
+ gtk_box_pack_start (GTK_BOX (box), label, FALSE, TRUE, 0);
+
+ scale = gtk_scale_new_with_range (GTK_ORIENTATION_HORIZONTAL, 0, 100, 1);
+ gtk_scale_set_draw_value (GTK_SCALE (scale), FALSE);
+ gtk_widget_set_margin_left (scale, 12);
+ gtk_widget_set_margin_right (scale, 12);
+ gtk_box_pack_start (GTK_BOX (box), scale, TRUE, TRUE, 0);
+ self->priv->brightness_scale = scale;
+
+ gtk_container_add (GTK_CONTAINER (widget), box);
+
+ box = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 6);
+ label = gtk_label_new (_("Screen Power _Saving"));
+ gtk_misc_set_alignment (GTK_MISC (label), 0, 0.5);
+ gtk_label_set_use_underline (GTK_LABEL (label), TRUE);
+ gtk_widget_set_margin_left (label, 12);
+ gtk_widget_set_margin_right (label, 12);
+ gtk_widget_set_margin_top (label, 6);
+ gtk_widget_set_margin_bottom (label, 6);
+ gtk_box_pack_start (GTK_BOX (box), label, TRUE, TRUE, 0);
+
+ label = get_on_off_label (self->priv->gsd_settings, "idle-dim-battery");
+ gtk_misc_set_alignment (GTK_MISC (label), 1, 0.5);
+ gtk_widget_set_margin_left (label, 12);
+ gtk_widget_set_margin_right (label, 12);
+ gtk_box_pack_start (GTK_BOX (box), label, FALSE, TRUE, 0);
+
+ gtk_container_add (GTK_CONTAINER (widget), box);
+ self->priv->screen_power_saving = box;
+
+ gtk_widget_show_all (widget);
+
+ dialog = WID (self->priv->builder, "screen_power_saving_dialog");
+ widget = WID (self->priv->builder, "power_saving_done");
+ g_signal_connect_swapped (widget, "clicked",
+ G_CALLBACK (gtk_widget_hide), dialog);
+
+ widget = WID (self->priv->builder, "dim_screen_check");
+ g_settings_bind (self->priv->gsd_settings, "idle-dim-battery",
+ widget, "active",
+ G_SETTINGS_BIND_DEFAULT);
+
+ widget = WID (self->priv->builder, "turn_off_combo");
+ set_dpms_value_for_combo (GTK_COMBO_BOX (widget), self);
+ g_signal_connect (widget, "changed",
+ G_CALLBACK (dpms_combo_changed_cb),
+ self);
+}
+
+static void
cc_power_panel_init (CcPowerPanel *self)
{
GError *error;
@@ -1027,16 +1417,25 @@ cc_power_panel_init (CcPowerPanel *self)
got_power_proxy_cb,
self);
+ g_dbus_proxy_new_for_bus (G_BUS_TYPE_SESSION,
+ G_DBUS_PROXY_FLAGS_NONE,
+ NULL,
+ "org.gnome.SettingsDaemon",
+ "/org/gnome/SettingsDaemon/Power",
+ "org.gnome.SettingsDaemon.Power.Screen",
+ self->priv->cancellable,
+ got_screen_proxy_cb,
+ self);
+
/* find out if there are any battery or UPS devices attached
* and setup UI accordingly */
self->priv->up_client = up_client_new ();
set_ac_battery_ui_mode (self);
self->priv->gsd_settings = g_settings_new ("org.gnome.settings-daemon.plugins.power");
- g_signal_connect (self->priv->gsd_settings,
- "changed",
- G_CALLBACK (on_lock_settings_changed),
- self);
+ g_signal_connect (self->priv->gsd_settings, "changed",
+ G_CALLBACK (on_lock_settings_changed), self);
+ self->priv->session_settings = g_settings_new ("org.gnome.desktop.session");
/* auto-sleep time */
value = g_settings_get_int (self->priv->gsd_settings, "sleep-inactive-ac-timeout");
@@ -1080,6 +1479,8 @@ cc_power_panel_init (CcPowerPanel *self)
G_CALLBACK (activate_link_cb),
self);
+ add_power_saving_section (self);
+
widget = WID (self->priv->builder, "vbox_power");
gtk_widget_reparent (widget, (GtkWidget *) self);
}
diff --git a/panels/power/power.ui b/panels/power/power.ui
index 3e7b269..1554cdb 100644
--- a/panels/power/power.ui
+++ b/panels/power/power.ui
@@ -357,4 +357,166 @@
<widget name="combobox_sleep_ac"/>
</widgets>
</object>
+ <object class="GtkListStore" id="screen_brightness_liststore">
+ <columns>
+ <!-- column-name name -->
+ <column type="gchararray"/>
+ <!-- column-name value -->
+ <column type="gint"/>
+ </columns>
+ <data>
+ <row>
+ <col id="0" translatable="yes">1 minute</col>
+ <col id="1">60</col>
+ </row>
+ <row>
+ <col id="0" translatable="yes">2 minutes</col>
+ <col id="1">120</col>
+ </row>
+ <row>
+ <col id="0" translatable="yes">3 minutes</col>
+ <col id="1">180</col>
+ </row>
+ <row>
+ <col id="0" translatable="yes">5 minutes</col>
+ <col id="1">300</col>
+ </row>
+ <row>
+ <col id="0" translatable="yes">10 minutes</col>
+ <col id="1">600</col>
+ </row>
+ <row>
+ <col id="0" translatable="yes">30 minutes</col>
+ <col id="1">1800</col>
+ </row>
+ <row>
+ <col id="0" translatable="yes">1 hour</col>
+ <col id="1">3600</col>
+ </row>
+ </data>
+ </object>
+ <object class="GtkDialog" id="screen_power_saving_dialog">
+ <property name="can_focus">False</property>
+ <property name="border_width">5</property>
+ <property name="type_hint">dialog</property>
+ <property name="title" translatable="yes">Screen Power Saving</property>
+ <child internal-child="vbox">
+ <object class="GtkBox" id="dialog-vbox1">
+ <property name="can_focus">False</property>
+ <property name="orientation">vertical</property>
+ <property name="spacing">2</property>
+ <child internal-child="action_area">
+ <object class="GtkButtonBox" id="dialog-action_area1">
+ <property name="can_focus">False</property>
+ <property name="layout_style">end</property>
+ <child>
+ <object class="GtkButton" id="power_saving_done">
+ <property name="label" translatable="yes">_Done</property>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="can_default">True</property>
+ <property name="has_default">True</property>
+ <property name="receives_default">True</property>
+ <property name="use_underline">True</property>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="pack_type">end</property>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkLabel" id="label22">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="margin_left">12</property>
+ <property name="margin_right">12</property>
+ <property name="margin_top">12</property>
+ <property name="margin_bottom">12</property>
+ <property name="xalign">0</property>
+ <property name="label" translatable="yes">Dimming the screen saves a lot of power.</property>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkGrid" id="grid1">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="margin_left">12</property>
+ <property name="margin_right">6</property>
+ <property name="margin_bottom">18</property>
+ <property name="row_spacing">12</property>
+ <property name="column_spacing">6</property>
+ <child>
+ <object class="GtkCheckButton" id="dim_screen_check">
+ <property name="label" translatable="yes">Dim screen to _save power</property>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="receives_default">False</property>
+ <property name="use_underline">True</property>
+ <property name="xalign">0</property>
+ <property name="draw_indicator">True</property>
+ </object>
+ <packing>
+ <property name="left_attach">0</property>
+ <property name="top_attach">0</property>
+ <property name="width">2</property>
+ <property name="height">1</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkLabel" id="turn_off_label">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="label" translatable="yes">_Turn screen off when inactive for</property>
+ <property name="use_underline">True</property>
+ <property name="mnemonic_widget">turn_off_combo</property>
+ </object>
+ <packing>
+ <property name="left_attach">0</property>
+ <property name="top_attach">1</property>
+ <property name="width">1</property>
+ <property name="height">1</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkComboBoxText" id="turn_off_combo">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="hexpand">True</property>
+ <property name="entry_text_column">0</property>
+ <property name="model">screen_brightness_liststore</property>
+ </object>
+ <packing>
+ <property name="left_attach">1</property>
+ <property name="top_attach">1</property>
+ <property name="width">1</property>
+ <property name="height">1</property>
+ </packing>
+ </child>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="position">2</property>
+ </packing>
+ </child>
+ </object>
+ </child>
+ <action-widgets>
+ <action-widget response="0">power_saving_done</action-widget>
+ </action-widgets>
+ </object>
</interface>
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]