diff options
| author | Bastien Nocera <hadess@hadess.net> | 2015-11-04 12:39:09 (GMT) |
|---|---|---|
| committer | Bastien Nocera <hadess@hadess.net> | 2015-11-10 12:07:09 (GMT) |
| commit | 69d9d8b1eda2d50acca5b4da58003afb8b82a7f1 (patch) | |
| tree | 5dde54afc3d9edea8dbbc21ea3d5e4f4ae5a0939 | |
| parent | e5d48da0f10b3eba0e7f7315832ca72c0bf7d13e (diff) | |
| download | gnome-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.h | 7 | ||||
| -rw-r--r-- | data/org.gnome.settings-daemon.plugins.power.gschema.xml.in.in | 5 | ||||
| -rw-r--r-- | plugins/media-keys/gsd-media-keys-manager.c | 22 |
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); |