[Xfce4-commits] [xfce/xfce4-power-manager] 01/01: Add support for XF86Battery button (Bug #14055)
noreply at xfce.org
noreply at xfce.org
Tue Dec 19 00:57:15 CET 2017
This is an automated email from the git hooks/post-receive script.
o c h o s i p u s h e d a c o m m i t t o b r a n c h m a s t e r
in repository xfce/xfce4-power-manager.
commit ebb984e33b6daf6ce320140ff4c31d533d6a3cee
Author: Viktor Odintsev <ninetls at xfce.org>
Date: Mon Dec 4 14:15:31 2017 +0300
Add support for XF86Battery button (Bug #14055)
---
common/xfpm-config.h | 1 +
common/xfpm-enum.h | 3 +-
data/interfaces/xfpm-settings.ui | 34 ++++++++++++++-
settings/xfpm-settings-app.c | 4 +-
settings/xfpm-settings.c | 91 +++++++++++++++++++++++++++++++++++++---
settings/xfpm-settings.h | 1 +
src/xfpm-button.c | 7 ++--
src/xfpm-button.h | 2 +-
src/xfpm-main.c | 4 ++
src/xfpm-manager.c | 12 +++++-
src/xfpm-xfconf.c | 13 ++++++
11 files changed, 158 insertions(+), 14 deletions(-)
diff --git a/common/xfpm-config.h b/common/xfpm-config.h
index da0ff89..35f646d 100644
--- a/common/xfpm-config.h
+++ b/common/xfpm-config.h
@@ -60,6 +60,7 @@ G_BEGIN_DECLS
#define POWER_SWITCH_CFG "power-button-action"
#define HIBERNATE_SWITCH_CFG "hibernate-button-action"
#define SLEEP_SWITCH_CFG "sleep-button-action"
+#define BATTERY_SWITCH_CFG "battery-button-action"
#define LID_SWITCH_ON_AC_CFG "lid-action-on-ac"
#define LID_SWITCH_ON_BATTERY_CFG "lid-action-on-battery"
diff --git a/common/xfpm-enum.h b/common/xfpm-enum.h
index 0146f6e..ce5d5f7 100644
--- a/common/xfpm-enum.h
+++ b/common/xfpm-enum.h
@@ -47,7 +47,8 @@ typedef enum
HIBERNATE_KEY = (1 << 4),
POWER_KEY = (1 << 5),
KBD_BRIGHTNESS_KEY_UP = (1 << 6),
- KBD_BRIGHTNESS_KEY_DOWN = (1 << 7)
+ KBD_BRIGHTNESS_KEY_DOWN = (1 << 7),
+ BATTERY_KEY = (1 << 8)
} XfpmKeys;
diff --git a/data/interfaces/xfpm-settings.ui b/data/interfaces/xfpm-settings.ui
index 143d1d2..bd09980 100644
--- a/data/interfaces/xfpm-settings.ui
+++ b/data/interfaces/xfpm-settings.ui
@@ -345,6 +345,18 @@
</packing>
</child>
<child>
+ <object class="GtkLabel" id="button-battery-label">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="xalign">0</property>
+ <property name="label" translatable="yes">When battery button is pressed:</property>
+ </object>
+ <packing>
+ <property name="left_attach">0</property>
+ <property name="top_attach">3</property>
+ </packing>
+ </child>
+ <child>
<object class="GtkComboBox" id="button-power-combo">
<property name="visible">True</property>
<property name="can_focus">False</property>
@@ -399,6 +411,24 @@
</packing>
</child>
<child>
+ <object class="GtkComboBox" id="button-battery-combo">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="hexpand">True</property>
+ <signal name="changed" handler="button_battery_changed_cb" swapped="no"/>
+ <child>
+ <object class="GtkCellRendererText" id="renderer5"/>
+ <attributes>
+ <attribute name="text">0</attribute>
+ </attributes>
+ </child>
+ </object>
+ <packing>
+ <property name="left_attach">1</property>
+ <property name="top_attach">3</property>
+ </packing>
+ </child>
+ <child>
<object class="GtkSwitch" id="handle-brightness-keys">
<property name="visible">True</property>
<property name="can_focus">True</property>
@@ -406,7 +436,7 @@
</object>
<packing>
<property name="left_attach">1</property>
- <property name="top_attach">3</property>
+ <property name="top_attach">4</property>
</packing>
</child>
<child>
@@ -420,7 +450,7 @@
</object>
<packing>
<property name="left_attach">0</property>
- <property name="top_attach">3</property>
+ <property name="top_attach">4</property>
</packing>
</child>
</object>
diff --git a/settings/xfpm-settings-app.c b/settings/xfpm-settings-app.c
index 790e22d..72c48a1 100644
--- a/settings/xfpm-settings-app.c
+++ b/settings/xfpm-settings-app.c
@@ -140,6 +140,7 @@ xfpm_settings_app_launch (GApplication *app)
gboolean has_sleep_button;
gboolean has_hibernate_button;
gboolean has_power_button;
+ gboolean has_battery_button;
gboolean has_lid;
gint start_xfpm_if_not_running;
@@ -250,6 +251,7 @@ xfpm_settings_app_launch (GApplication *app)
has_sleep_button = xfpm_string_to_bool (g_hash_table_lookup (hash, "sleep-button"));
has_power_button = xfpm_string_to_bool (g_hash_table_lookup (hash, "power-button"));
has_hibernate_button = xfpm_string_to_bool (g_hash_table_lookup (hash, "hibernate-button"));
+ has_battery_button = xfpm_string_to_bool (g_hash_table_lookup (hash, "battery-button"));
can_shutdown = xfpm_string_to_bool (g_hash_table_lookup (hash, "can-shutdown"));
DBG("socket_id %i", (int)priv->socket_id);
@@ -257,7 +259,7 @@ xfpm_settings_app_launch (GApplication *app)
dialog = xfpm_settings_dialog_new (channel, auth_suspend, auth_hibernate,
can_suspend, can_hibernate, can_shutdown, has_battery, has_lcd_brightness,
- has_lid, has_sleep_button, has_hibernate_button, has_power_button,
+ has_lid, has_sleep_button, has_hibernate_button, has_power_button, has_battery_button,
priv->socket_id, priv->device_id, GTK_APPLICATION (app));
g_hash_table_destroy (hash);
diff --git a/settings/xfpm-settings.c b/settings/xfpm-settings.c
index 4bdda9c..6d3a4f0 100644
--- a/settings/xfpm-settings.c
+++ b/settings/xfpm-settings.c
@@ -125,6 +125,9 @@ void button_power_changed_cb (GtkWidget *w,
void button_hibernate_changed_cb (GtkWidget *w,
XfconfChannel *channel);
+void button_battery_changed_cb (GtkWidget *w,
+ XfconfChannel *channel);
+
void on_sleep_mode_changed_cb (GtkWidget *w,
XfconfChannel *channel);
@@ -347,6 +350,30 @@ button_hibernate_changed_cb (GtkWidget *w, XfconfChannel *channel)
}
void
+button_battery_changed_cb (GtkWidget *w, XfconfChannel *channel)
+{
+ GtkTreeModel *model;
+ GtkTreeIter selected_row;
+ gint value = 0;
+
+ if (!gtk_combo_box_get_active_iter (GTK_COMBO_BOX (w), &selected_row))
+ return;
+
+ model = gtk_combo_box_get_model (GTK_COMBO_BOX(w));
+
+ gtk_tree_model_get(model,
+ &selected_row,
+ 1,
+ &value,
+ -1);
+
+ if (!xfconf_channel_set_uint (channel, PROPERTIES_PREFIX BATTERY_SWITCH_CFG, value ) )
+ {
+ g_critical ("Cannot set value for property %s\n", BATTERY_SWITCH_CFG);
+ }
+}
+
+void
on_ac_sleep_mode_changed_cb (GtkWidget *w, XfconfChannel *channel)
{
GtkTreeModel *model;
@@ -1224,7 +1251,7 @@ xfpm_settings_general (XfconfChannel *channel, gboolean auth_suspend,
gboolean auth_hibernate, gboolean can_suspend,
gboolean can_hibernate, gboolean can_shutdown,
gboolean has_sleep_button, gboolean has_hibernate_button,
- gboolean has_power_button)
+ gboolean has_power_button, gboolean has_battery_button)
{
GtkWidget *power;
GtkWidget *power_label;
@@ -1232,6 +1259,8 @@ xfpm_settings_general (XfconfChannel *channel, gboolean auth_suspend,
GtkWidget *hibernate_label;
GtkWidget *sleep_w;
GtkWidget *sleep_label;
+ GtkWidget *battery_w;
+ GtkWidget *battery_label;
GtkWidget *dpms;
guint value;
@@ -1409,6 +1438,57 @@ xfpm_settings_general (XfconfChannel *channel, gboolean auth_suspend,
gtk_widget_hide (sleep_w);
gtk_widget_hide (sleep_label);
}
+
+ /*
+ * Battery button
+ */
+ list_store = gtk_list_store_new (2, G_TYPE_STRING, G_TYPE_INT);
+ battery_w = GTK_WIDGET (gtk_builder_get_object (xml, "button-battery-combo"));
+ battery_label = GTK_WIDGET (gtk_builder_get_object (xml, "button-battery-label"));
+
+ if ( has_battery_button )
+ {
+ gtk_combo_box_set_model (GTK_COMBO_BOX(battery_w), GTK_TREE_MODEL(list_store));
+
+ gtk_list_store_append (list_store, &iter);
+ gtk_list_store_set (list_store, &iter, 0, _("Do nothing"), 1, XFPM_DO_NOTHING, -1);
+
+ if ( can_suspend && auth_suspend )
+ {
+ gtk_list_store_append (list_store, &iter);
+ gtk_list_store_set (list_store, &iter, 0, _("Suspend"), 1, XFPM_DO_SUSPEND, -1);
+ }
+
+ if ( can_hibernate && auth_hibernate)
+ {
+ gtk_list_store_append (list_store, &iter);
+ gtk_list_store_set (list_store, &iter, 0, _("Hibernate"), 1, XFPM_DO_HIBERNATE, -1);
+ }
+
+ gtk_list_store_append (list_store, &iter);
+ gtk_list_store_set (list_store, &iter, 0, _("Ask"), 1, XFPM_ASK, -1);
+
+ gtk_combo_box_set_active (GTK_COMBO_BOX (battery_w), 0);
+
+ value = xfconf_channel_get_uint (channel, PROPERTIES_PREFIX BATTERY_SWITCH_CFG, XFPM_DO_NOTHING);
+ for ( valid = gtk_tree_model_get_iter_first (GTK_TREE_MODEL (list_store), &iter);
+ valid;
+ valid = gtk_tree_model_iter_next (GTK_TREE_MODEL (list_store), &iter) )
+ {
+ gtk_tree_model_get (GTK_TREE_MODEL (list_store), &iter,
+ 1, &list_value, -1);
+ if ( value == list_value )
+ {
+ gtk_combo_box_set_active_iter (GTK_COMBO_BOX (battery_w), &iter);
+ break;
+ }
+ }
+ }
+ else
+ {
+ gtk_widget_hide (battery_w);
+ gtk_widget_hide (battery_label);
+ }
}
static void
@@ -2178,7 +2258,8 @@ xfpm_settings_dialog_new (XfconfChannel *channel, gboolean auth_suspend,
gboolean has_battery, gboolean has_lcd_brightness,
gboolean has_lid, gboolean has_sleep_button,
gboolean has_hibernate_button, gboolean has_power_button,
- Window id, gchar *device_id, GtkApplication *gtk_app)
+ gboolean has_battery_button, Window id, gchar *device_id,
+ GtkApplication *gtk_app)
{
GtkWidget *plug;
GtkWidget *parent;
@@ -2197,13 +2278,13 @@ xfpm_settings_dialog_new (XfconfChannel *channel, gboolean auth_suspend,
XFPM_DEBUG ("auth_hibernate=%s auth_suspend=%s can_shutdown=%s can_suspend=%s can_hibernate=%s " \
"has_battery=%s has_lcd_brightness=%s has_lid=%s has_sleep_button=%s " \
- "has_hibernate_button=%s has_power_button=%s",
+ "has_hibernate_button=%s has_power_button=%s has_battery_button=%s",
xfpm_bool_to_string (has_battery), xfpm_bool_to_string (auth_hibernate),
xfpm_bool_to_string (can_shutdown), xfpm_bool_to_string (auth_suspend),
xfpm_bool_to_string (can_suspend), xfpm_bool_to_string (can_hibernate),
xfpm_bool_to_string (has_lcd_brightness), xfpm_bool_to_string (has_lid),
xfpm_bool_to_string (has_sleep_button), xfpm_bool_to_string (has_hibernate_button),
- xfpm_bool_to_string (has_power_button));
+ xfpm_bool_to_string (has_power_button), xfpm_bool_to_string (has_battery_button));
xml = xfpm_builder_new_from_string (xfpm_settings_ui, &error);
@@ -2341,7 +2422,7 @@ xfpm_settings_dialog_new (XfconfChannel *channel, gboolean auth_suspend,
}
xfpm_settings_general (channel, auth_suspend, auth_hibernate, can_suspend, can_hibernate, can_shutdown,
- has_sleep_button, has_hibernate_button, has_power_button );
+ has_sleep_button, has_hibernate_button, has_power_button, has_battery_button);
xfpm_settings_advanced (channel, auth_suspend, auth_hibernate, can_suspend, can_hibernate, has_battery);
diff --git a/settings/xfpm-settings.h b/settings/xfpm-settings.h
index 25e5630..1588849 100644
--- a/settings/xfpm-settings.h
+++ b/settings/xfpm-settings.h
@@ -36,6 +36,7 @@ GtkWidget *xfpm_settings_dialog_new (XfconfChannel *channel,
gboolean has_sleep_button,
gboolean has_hibernate_button,
gboolean has_power_button,
+ gboolean has_battery_button,
Window id,
gchar *device_id,
GtkApplication *gtk_app);
diff --git a/src/xfpm-button.c b/src/xfpm-button.c
index 3f8f966..dcf639c 100644
--- a/src/xfpm-button.c
+++ b/src/xfpm-button.c
@@ -68,7 +68,7 @@ struct XfpmButtonPrivate
GdkScreen *screen;
GdkWindow *window;
- guint8 mapped_buttons;
+ guint16 mapped_buttons;
};
enum
@@ -216,7 +216,8 @@ xfpm_button_setup (XfpmButton *button)
if (xfpm_button_xevent_key (button, XF86XK_MonBrightnessDown, BUTTON_MON_BRIGHTNESS_DOWN) )
button->priv->mapped_buttons |= BRIGHTNESS_KEY_DOWN;
- xfpm_button_xevent_key (button, XF86XK_Battery, BUTTON_BATTERY);
+ if (xfpm_button_xevent_key (button, XF86XK_Battery, BUTTON_BATTERY))
+ button->priv->mapped_buttons |= BATTERY_KEY;
if ( xfpm_button_xevent_key (button, XF86XK_KbdBrightnessUp, BUTTON_KBD_BRIGHTNESS_UP) )
button->priv->mapped_buttons |= KBD_BRIGHTNESS_KEY_UP;
@@ -283,7 +284,7 @@ xfpm_button_new (void)
return XFPM_BUTTON (xfpm_button_object);
}
-guint8 xfpm_button_get_mapped (XfpmButton *button)
+guint16 xfpm_button_get_mapped (XfpmButton *button)
{
g_return_val_if_fail (XFPM_IS_BUTTON (button), 0);
diff --git a/src/xfpm-button.h b/src/xfpm-button.h
index fc9bd97..11ed187 100644
--- a/src/xfpm-button.h
+++ b/src/xfpm-button.h
@@ -53,7 +53,7 @@ GType xfpm_button_get_type (void) G_GNUC_CONST;
XfpmButton *xfpm_button_new (void);
-guint8 xfpm_button_get_mapped (XfpmButton *button) G_GNUC_PURE;
+guint16 xfpm_button_get_mapped (XfpmButton *button) G_GNUC_PURE;
G_END_DECLS
diff --git a/src/xfpm-main.c b/src/xfpm-main.c
index ab2e179..6e60d2f 100644
--- a/src/xfpm-main.c
+++ b/src/xfpm-main.c
@@ -90,6 +90,7 @@ xfpm_dump (GHashTable *hash)
gboolean has_sleep_button;
gboolean has_hibernate_button;
gboolean has_power_button;
+ gboolean has_battery_button;
gboolean has_lid;
has_battery = xfpm_string_to_bool (g_hash_table_lookup (hash, "has-battery"));
@@ -102,6 +103,7 @@ xfpm_dump (GHashTable *hash)
has_sleep_button = xfpm_string_to_bool (g_hash_table_lookup (hash, "sleep-button"));
has_power_button = xfpm_string_to_bool (g_hash_table_lookup (hash, "power-button"));
has_hibernate_button = xfpm_string_to_bool (g_hash_table_lookup (hash, "hibernate-button"));
+ has_battery_button = xfpm_string_to_bool (g_hash_table_lookup (hash, "battery-button"));
can_shutdown = xfpm_string_to_bool (g_hash_table_lookup (hash, "can-shutdown"));
g_print ("---------------------------------------------------\n");
@@ -148,6 +150,8 @@ xfpm_dump (GHashTable *hash)
xfpm_bool_to_local_string (has_hibernate_button),
_("Has sleep button"),
xfpm_bool_to_local_string (has_sleep_button),
+ _("Has battery button"),
+ xfpm_bool_to_local_string (has_battery_button),
_("Has LID"),
xfpm_bool_to_local_string (has_lid));
}
diff --git a/src/xfpm-manager.c b/src/xfpm-manager.c
index 2b52eb5..1890058 100644
--- a/src/xfpm-manager.c
+++ b/src/xfpm-manager.c
@@ -392,6 +392,12 @@ xfpm_manager_button_pressed_cb (XfpmButton *bt, XfpmButtonKey type, XfpmManager
HIBERNATE_SWITCH_CFG, &req,
NULL);
}
+ else if ( type == BUTTON_BATTERY )
+ {
+ g_object_get (G_OBJECT (manager->priv->conf),
+ BATTERY_SWITCH_CFG, &req,
+ NULL);
+ }
else
{
g_return_if_reached ();
@@ -945,7 +951,7 @@ GHashTable *xfpm_manager_get_config (XfpmManager *manager)
{
GHashTable *hash;
- guint8 mapped_buttons;
+ guint16 mapped_buttons;
gboolean auth_hibernate = FALSE;
gboolean auth_suspend = FALSE;
gboolean can_suspend = FALSE;
@@ -953,6 +959,7 @@ GHashTable *xfpm_manager_get_config (XfpmManager *manager)
gboolean has_sleep_button = FALSE;
gboolean has_hibernate_button = FALSE;
gboolean has_power_button = FALSE;
+ gboolean has_battery_button = FALSE;
gboolean has_battery = TRUE;
gboolean has_lcd_brightness = TRUE;
gboolean can_shutdown = TRUE;
@@ -992,10 +999,13 @@ GHashTable *xfpm_manager_get_config (XfpmManager *manager)
has_hibernate_button = TRUE;
if ( mapped_buttons & POWER_KEY )
has_power_button = TRUE;
+ if ( mapped_buttons & BATTERY_KEY )
+ has_battery_button = TRUE;
g_hash_table_insert (hash, g_strdup ("sleep-button"), g_strdup (xfpm_bool_to_string (has_sleep_button)));
g_hash_table_insert (hash, g_strdup ("power-button"), g_strdup (xfpm_bool_to_string (has_power_button)));
g_hash_table_insert (hash, g_strdup ("hibernate-button"), g_strdup (xfpm_bool_to_string (has_hibernate_button)));
+ g_hash_table_insert (hash, g_strdup ("battery-button"), g_strdup (xfpm_bool_to_string (has_battery_button)));
g_hash_table_insert (hash, g_strdup ("auth-suspend"), g_strdup (xfpm_bool_to_string (auth_suspend)));
g_hash_table_insert (hash, g_strdup ("auth-hibernate"), g_strdup (xfpm_bool_to_string (auth_hibernate)));
g_hash_table_insert (hash, g_strdup ("can-suspend"), g_strdup (xfpm_bool_to_string (can_suspend)));
diff --git a/src/xfpm-xfconf.c b/src/xfpm-xfconf.c
index 48ec992..1697266 100644
--- a/src/xfpm-xfconf.c
+++ b/src/xfpm-xfconf.c
@@ -65,6 +65,7 @@ enum
PROP_POWER_BUTTON,
PROP_HIBERNATE_BUTTON,
PROP_SLEEP_BUTTON,
+ PROP_BATTERY_BUTTON,
PROP_LID_ACTION_ON_AC,
PROP_LID_ACTION_ON_BATTERY,
PROP_BRIGHTNESS_LEVEL_ON_AC,
@@ -348,6 +349,18 @@ xfpm_xfconf_class_init (XfpmXfconfClass *klass)
XFPM_DO_SHUTDOWN,
XFPM_DO_NOTHING,
G_PARAM_READWRITE));
+
+ /**
+ * XfpmXfconf::battery-switch-action
+ **/
+ g_object_class_install_property (object_class,
+ PROP_BATTERY_BUTTON,
+ g_param_spec_uint (BATTERY_SWITCH_CFG,
+ NULL, NULL,
+ XFPM_DO_NOTHING,
+ XFPM_DO_SHUTDOWN,
+ XFPM_DO_NOTHING,
+ G_PARAM_READWRITE));
/**
* XfpmXfconf::lid-action-on-ac
--
To stop receiving notification emails like this one, please contact
the administrator of this repository.
More information about the Xfce4-commits
mailing list