Blame SOURCES/0001-power-Respect-the-nothing-power-button-action-for-VM.patch

50ba9f
From 0e2c4aec104b65d2f8ea7167269e91c303908a6f Mon Sep 17 00:00:00 2001
50ba9f
From: Felipe Borges <felipeborges@gnome.org>
50ba9f
Date: Wed, 4 Jan 2023 15:30:15 +0100
50ba9f
Subject: [PATCH] power: Respect the "nothing" power-button-action for VMs
50ba9f
50ba9f
There are use-cases when one wants to forcefully make the guest ignore
50ba9f
poweroff requests from the hypervisor.
50ba9f
50ba9f
See https://bugzilla.redhat.com/2062051
50ba9f
50ba9f
See also https://gitlab.gnome.org/GNOME/gnome-settings-daemon/-/issues/46
50ba9f
---
50ba9f
 ...org.gnome.settings-daemon.plugins.power.gschema.xml.in | 2 +-
50ba9f
 plugins/media-keys/gsd-media-keys-manager.c               | 8 +++++---
50ba9f
 2 files changed, 6 insertions(+), 4 deletions(-)
50ba9f
50ba9f
diff --git a/data/org.gnome.settings-daemon.plugins.power.gschema.xml.in b/data/org.gnome.settings-daemon.plugins.power.gschema.xml.in
50ba9f
index 93c704e9..fc61d133 100644
50ba9f
--- a/data/org.gnome.settings-daemon.plugins.power.gschema.xml.in
50ba9f
+++ b/data/org.gnome.settings-daemon.plugins.power.gschema.xml.in
50ba9f
@@ -39,7 +39,7 @@
50ba9f
     <key name="power-button-action" enum="org.gnome.settings-daemon.GsdPowerButtonActionType">
50ba9f
       <default>'suspend'</default>
50ba9f
       <summary>Power button action</summary>
50ba9f
-      <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>
50ba9f
+      <description>The action to take when the system power button is pressed. Virtual machines only honor the 'nothing' action, and will shutdown otherwise. Tablets always suspend, ignoring all the other action options.</description>
50ba9f
     </key>
50ba9f
   </schema>
50ba9f
 </schemalist>
50ba9f
diff --git a/plugins/media-keys/gsd-media-keys-manager.c b/plugins/media-keys/gsd-media-keys-manager.c
50ba9f
index a526d5cf..ac6f7ab4 100644
50ba9f
--- a/plugins/media-keys/gsd-media-keys-manager.c
50ba9f
+++ b/plugins/media-keys/gsd-media-keys-manager.c
50ba9f
@@ -2083,9 +2083,12 @@ do_config_power_button_action (GsdMediaKeysManager *manager,
50ba9f
         if (manager->priv->power_button_disabled)
50ba9f
                 return;
50ba9f
 
50ba9f
-        /* Always power off VMs when power off is pressed in the menus */
50ba9f
+        action_type = g_settings_get_enum (manager->priv->power_settings, "power-button-action");
50ba9f
+        /* Always power off VMs, except when power-button-action is "nothing" */
50ba9f
         if (g_strcmp0 (manager->priv->chassis_type, "vm") == 0) {
50ba9f
-                power_action (manager, "PowerOff", !in_lock_screen);
50ba9f
+                if (action_type != GSD_POWER_BUTTON_ACTION_NOTHING)
50ba9f
+                        power_action (manager, "PowerOff", !in_lock_screen);
50ba9f
+
50ba9f
                 return;
50ba9f
         }
50ba9f
 
50ba9f
@@ -2095,7 +2098,6 @@ do_config_power_button_action (GsdMediaKeysManager *manager,
50ba9f
                 return;
50ba9f
         }
50ba9f
 
50ba9f
-        action_type = g_settings_get_enum (manager->priv->power_settings, "power-button-action");
50ba9f
         switch (action_type) {
50ba9f
         case GSD_POWER_BUTTON_ACTION_SUSPEND:
50ba9f
                 action = GSD_POWER_ACTION_SUSPEND;
50ba9f
-- 
50ba9f
2.37.1
50ba9f