---
src/virt-viewer-app.c | 1 -
src/virt-viewer-session-spice.c | 20 ++++++++++++++++++++
2 files changed, 20 insertions(+), 1 deletion(-)
diff --git a/src/virt-viewer-app.c b/src/virt-viewer-app.c
index db44359..c473728 100644
--- a/src/virt-viewer-app.c
+++ b/src/virt-viewer-app.c
@@ -1104,7 +1104,6 @@ virt_viewer_app_set_actions_sensitive(VirtViewerApp *self)
action = g_action_map_lookup_action(map, "machine-powerdown");
g_simple_action_set_enabled(G_SIMPLE_ACTION(action),
priv->connected &&
- priv->vm_ui &&
virt_viewer_session_has_vm_action(priv->session,
VIRT_VIEWER_SESSION_VM_ACTION_POWER_DOWN));
diff --git a/src/virt-viewer-session-spice.c b/src/virt-viewer-session-spice.c
index 734720d..381855a 100644
--- a/src/virt-viewer-session-spice.c
+++ b/src/virt-viewer-session-spice.c
@@ -1072,6 +1072,25 @@ virt_viewer_session_spice_vm_action(VirtViewerSession
*sess G_GNUC_UNUSED,
g_list_free(channels);
return;
}
+ case VIRT_VIEWER_SESSION_VM_ACTION_POWER_DOWN: {
+ g_debug("virt_viewer_session_spice_vm_action poweroff");
+ SpiceSession *session = self->session;
+ GList *l, *channels;
+
+ channels = spice_session_get_channels(session);
+ for (l = channels; l != NULL; l = l->next) {
+ SpiceChannel *channel = l->data;
+
+ if (!SPICE_IS_POWER_CHANNEL(channel)) {
+ continue;
+ }
+
+
spice_power_channel_send_poweroff(SPICE_POWER_CHANNEL(channel));
+ }
+
+ g_list_free(channels);
+ return;
+ }
}
}
@@ -1109,6 +1128,7 @@ virt_viewer_session_spice_has_vm_action(VirtViewerSession
*sess G_GNUC_UNUSED,
if (spice_session_has_channel_type(self->session, SPICE_CHANNEL_POWER)) {
switch (action) {
case VIRT_VIEWER_SESSION_VM_ACTION_RESET:
+ case VIRT_VIEWER_SESSION_VM_ACTION_POWER_DOWN:
return TRUE;
}
}
--
2.52.0