[Libguestfs] [PATCH v2 2/2] p2v: add a Shutdown action (RHBZ#1642044)

Pino Toscano ptoscano at redhat.com
Tue Nov 6 11:51:30 UTC 2018


Add a "Shutdown" action to the Shutdown button in the conversion dialog,
before the Reboot action: this way it is possible to shutdown the
physical server directly from the GUI after the conversion.
---
 p2v/gui.c | 24 +++++++++++++++++++++++-
 1 file changed, 23 insertions(+), 1 deletion(-)

diff --git a/p2v/gui.c b/p2v/gui.c
index 10fb2939a..e78f1186c 100644
--- a/p2v/gui.c
+++ b/p2v/gui.c
@@ -1615,11 +1615,13 @@ static void activate_action (GSimpleAction *action, GVariant *parameter, gpointe
 #else
 static void shutdown_button_clicked (GtkToolButton *w, gpointer data);
 #endif
+static void shutdown_clicked (GtkWidget *w, gpointer data);
 static void reboot_clicked (GtkWidget *w, gpointer data);
 static gboolean close_running_dialog (GtkWidget *w, GdkEvent *event, gpointer data);
 
 #ifdef USE_POPOVERS
 static const GActionEntry shutdown_actions[] = {
+  { "shutdown", activate_action, NULL, NULL, NULL },
   { "reboot", activate_action, NULL, NULL, NULL },
 };
 #endif
@@ -1643,6 +1645,7 @@ create_running_dialog (void)
   GSimpleActionGroup *shutdown_group;
 #else
   GtkWidget *shutdown_menu;
+  GtkWidget *shutdown_menu_item;
   GtkWidget *reboot_menu_item;
 #endif
 
@@ -1711,6 +1714,7 @@ create_running_dialog (void)
   /* Shutdown popup menu. */
 #ifdef USE_POPOVERS
   shutdown_menu = g_menu_new ();
+  g_menu_append (shutdown_menu, _("_Shutdown"), "shutdown.shutdown");
   g_menu_append (shutdown_menu, _("_Reboot"), "shutdown.reboot");
 
   shutdown_group = g_simple_action_group_new ();
@@ -1719,6 +1723,9 @@ create_running_dialog (void)
                                    G_N_ELEMENTS (shutdown_actions), NULL);
 #else
   shutdown_menu = gtk_menu_new ();
+  shutdown_menu_item = gtk_menu_item_new_with_mnemonic (_("_Shutdown"));
+  gtk_menu_shell_append (GTK_MENU_SHELL (shutdown_menu), shutdown_menu_item);
+  gtk_widget_show (shutdown_menu_item);
   reboot_menu_item = gtk_menu_item_new_with_mnemonic (_("_Reboot"));
   gtk_menu_shell_append (GTK_MENU_SHELL (shutdown_menu), reboot_menu_item);
   gtk_widget_show (reboot_menu_item);
@@ -1760,6 +1767,8 @@ create_running_dialog (void)
 #ifndef USE_POPOVERS
   g_signal_connect (G_OBJECT (shutdown_button), "clicked",
                     G_CALLBACK (shutdown_button_clicked), shutdown_menu);
+  g_signal_connect (G_OBJECT (shutdown_menu_item), "activate",
+                    G_CALLBACK (shutdown_clicked), NULL);
   g_signal_connect (G_OBJECT (reboot_menu_item), "activate",
                     G_CALLBACK (reboot_clicked), NULL);
 #endif
@@ -2255,7 +2264,9 @@ static void
 activate_action (GSimpleAction *action, GVariant *parameter, gpointer user_data)
 {
   const char *action_name = g_action_get_name (G_ACTION (action));
-  if (STREQ (action_name, "reboot"))
+  if (STREQ (action_name, "shutdown"))
+    shutdown_clicked (NULL, user_data);
+  else if (STREQ (action_name, "reboot"))
     reboot_clicked (NULL, user_data);
 }
 #else
@@ -2269,6 +2280,17 @@ shutdown_button_clicked (GtkToolButton *w, gpointer data)
 }
 #endif
 
+static void
+shutdown_clicked (GtkWidget *w, gpointer data)
+{
+  if (!is_iso_environment)
+    return;
+
+  sync ();
+  sleep (2);
+  ignore_value (system ("/sbin/shutdown now"));
+}
+
 static void
 reboot_clicked (GtkWidget *w, gpointer data)
 {
-- 
2.17.2




More information about the Libguestfs mailing list