[gnome-settings-daemon/gnome-3-18] media-keys: Re-add configuration for the power button



commit 69e38161eed40648fd8bafb50c00c24c48fc6f4b
Author: Bastien Nocera <hadess hadess net>
Date:   Wed Nov 4 13:39:09 2015 +0100

    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

 data/gsd-enums.h                                   |    7 ++++++
 ...settings-daemon.plugins.power.gschema.xml.in.in |    5 ++++
 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);


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]