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

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