summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBastien Nocera <hadess@hadess.net>2015-11-04 12:39:09 (GMT)
committerBastien Nocera <hadess@hadess.net>2015-11-10 12:07:09 (GMT)
commit69d9d8b1eda2d50acca5b4da58003afb8b82a7f1 (patch)
tree5dde54afc3d9edea8dbbc21ea3d5e4f4ae5a0939
parente5d48da0f10b3eba0e7f7315832ca72c0bf7d13e (diff)
downloadgnome-settings-daemon-69d9d8b.zip
gnome-settings-daemon-69d9d8b.tar.xz
media-keys: Re-add configuration for the power button
In commit 50564cde49ca2e17fb7e59f36a35d61c2cbef1af, we removed support for configuring the various "sleep state" buttons. However, the power button might need different behaviour based on the machine, which we cannot always detect. In later commits, we'll hard-code the actions for tablets and virtual machines. Note that "power off" is not an option as this would make the default action too destructive. It is recommended that you use a custom shortcut for this instead. https://bugzilla.gnome.org/show_bug.cgi?id=755953
-rw-r--r--data/gsd-enums.h7
-rw-r--r--data/org.gnome.settings-daemon.plugins.power.gschema.xml.in.in5
-rw-r--r--plugins/media-keys/gsd-media-keys-manager.c22
3 files changed, 33 insertions, 1 deletions
diff --git a/data/gsd-enums.h b/data/gsd-enums.h
index b0fabb0..4a0356a 100644
--- a/data/gsd-enums.h
+++ b/data/gsd-enums.h
@@ -112,6 +112,13 @@ typedef enum
typedef enum
{
+ GSD_POWER_BUTTON_ACTION_NOTHING,
+ GSD_POWER_BUTTON_ACTION_SUSPEND,
+ GSD_POWER_BUTTON_ACTION_HIBERNATE
+} GsdPowerButtonActionType;
+
+typedef enum
+{
GSD_UPDATE_TYPE_ALL,
GSD_UPDATE_TYPE_SECURITY,
GSD_UPDATE_TYPE_NONE
diff --git a/data/org.gnome.settings-daemon.plugins.power.gschema.xml.in.in b/data/org.gnome.settings-daemon.plugins.power.gschema.xml.in.in
index 3adff21..92ab9e9 100644
--- a/data/org.gnome.settings-daemon.plugins.power.gschema.xml.in.in
+++ b/data/org.gnome.settings-daemon.plugins.power.gschema.xml.in.in
@@ -45,5 +45,10 @@
<summary>Enable the ALS sensor</summary>
<description>If the ambient light sensor functionality is enabled.</description>
</key>
+ <key name="power-button-action" enum="org.gnome.settings-daemon.GsdPowerButtonActionType">
+ <default>'suspend'</default>
+ <summary>Power button action</summary>
+ <description>The action to take when the system power button is pressed. This action is hard-coded (and the setting ignored) on virtual machines (power off) and tablets (suspend).</description>
+ </key>
</schema>
</schemalist>
diff --git a/plugins/media-keys/gsd-media-keys-manager.c b/plugins/media-keys/gsd-media-keys-manager.c
index 073f5fb..f1335c0 100644
--- a/plugins/media-keys/gsd-media-keys-manager.c
+++ b/plugins/media-keys/gsd-media-keys-manager.c
@@ -1829,6 +1829,26 @@ do_config_power_action (GsdMediaKeysManager *manager,
}
static void
+do_config_power_button_action (GsdMediaKeysManager *manager,
+ gboolean in_lock_screen)
+{
+ GsdPowerButtonActionType action_type;
+
+ action_type = g_settings_get_enum (manager->priv->power_settings, "power-button-action");
+ switch (action_type) {
+ case GSD_POWER_BUTTON_ACTION_SUSPEND:
+ do_config_power_action (manager, GSD_POWER_ACTION_SUSPEND, in_lock_screen);
+ break;
+ case GSD_POWER_BUTTON_ACTION_HIBERNATE:
+ do_config_power_action (manager, GSD_POWER_ACTION_HIBERNATE, in_lock_screen);
+ break;
+ case GSD_POWER_BUTTON_ACTION_NOTHING:
+ /* do nothing */
+ break;
+ }
+}
+
+static void
update_brightness_cb (GObject *source_object,
GAsyncResult *res,
gpointer user_data)
@@ -2151,7 +2171,7 @@ do_action (GsdMediaKeysManager *manager,
do_toggle_contrast_action (manager);
break;
case POWER_KEY:
- do_config_power_action (manager, GSD_POWER_ACTION_SUSPEND, power_action_noninteractive);
+ do_config_power_button_action (manager, power_action_noninteractive);
break;
case SLEEP_KEY:
do_config_power_action (manager, GSD_POWER_ACTION_HIBERNATE, power_action_noninteractive);