mrc0mmand / rpms / libguestfs

Forked from rpms/libguestfs 3 years ago
Clone
Blob Blame History Raw
From 4e28a0b054a80fe6f4ad09b584eac253b2b10c8b Mon Sep 17 00:00:00 2001
From: "Richard W.M. Jones" <rjones@redhat.com>
Date: Wed, 6 May 2015 10:50:21 +0100
Subject: [PATCH] p2v: Add Configure Network button (RHBZ#1167921).

The old version of virt-p2v had a whole custom-written dialog which
interacted with NetworkManager over dbus.  After trying that approach,
it's really complex to get right.

Instead this button simply opens NetworkManager's connection editor.

This also adds nm-applet to the disk and starts it.  However nm-applet
does not display any visible indication -- probably because we are
lacking a system tray.

(cherry picked from commit e464774a79ff9eeedcdb3fd53efd5a7898ca036e)
---
 p2v/gui.c                 | 14 +++++++++++++-
 p2v/launch-virt-p2v.in    |  1 +
 p2v/p2v.ks.in             |  2 ++
 p2v/virt-p2v-make-disk.in | 11 +++++++----
 4 files changed, 23 insertions(+), 5 deletions(-)

diff --git a/p2v/gui.c b/p2v/gui.c
index bba0c1c..43d6165 100644
--- a/p2v/gui.c
+++ b/p2v/gui.c
@@ -94,6 +94,7 @@ gui_application (struct config *config)
 
 static void test_connection_clicked (GtkWidget *w, gpointer data);
 static void *test_connection_thread (void *data);
+static void configure_network_button_clicked (GtkWidget *w, gpointer data);
 static void about_button_clicked (GtkWidget *w, gpointer data);
 static void connection_next_clicked (GtkWidget *w, gpointer data);
 static void repopulate_output_combo (struct config *config);
@@ -108,6 +109,7 @@ create_connection_dialog (struct config *config)
   GtkWidget *password_label;
   GtkWidget *test_hbox, *test;
   GtkWidget *about;
+  GtkWidget *configure_network;
   char port_str[64];
 
   conn_dlg = gtk_dialog_new ();
@@ -198,7 +200,7 @@ create_connection_dialog (struct config *config)
 
   /* Buttons. */
   gtk_dialog_add_buttons (GTK_DIALOG (conn_dlg),
-                          /* _("Configure network ..."), 1, */
+                          _("Configure network ..."), 1,
                           _("About virt-p2v " PACKAGE_VERSION " ..."), 2,
                           _("Next"), 3,
                           NULL);
@@ -206,6 +208,8 @@ create_connection_dialog (struct config *config)
   next_button = gtk_dialog_get_widget_for_response (GTK_DIALOG (conn_dlg), 3);
   gtk_widget_set_sensitive (next_button, FALSE);
 
+  configure_network =
+    gtk_dialog_get_widget_for_response (GTK_DIALOG (conn_dlg), 1);
   about = gtk_dialog_get_widget_for_response (GTK_DIALOG (conn_dlg), 2);
 
   /* Signals. */
@@ -213,6 +217,8 @@ create_connection_dialog (struct config *config)
                             G_CALLBACK (gtk_main_quit), NULL);
   g_signal_connect (G_OBJECT (test), "clicked",
                     G_CALLBACK (test_connection_clicked), config);
+  g_signal_connect (G_OBJECT (configure_network), "clicked",
+                    G_CALLBACK (configure_network_button_clicked), NULL);
   g_signal_connect (G_OBJECT (about), "clicked",
                     G_CALLBACK (about_button_clicked), NULL);
   g_signal_connect (G_OBJECT (next_button), "clicked",
@@ -342,6 +348,12 @@ test_connection_thread (void *data)
 }
 
 static void
+configure_network_button_clicked (GtkWidget *w, gpointer data)
+{
+  ignore_value (system ("nm-connection-editor &"));
+}
+
+static void
 about_button_clicked (GtkWidget *w, gpointer data)
 {
   gtk_show_about_dialog (GTK_WINDOW (conn_dlg),
diff --git a/p2v/launch-virt-p2v.in b/p2v/launch-virt-p2v.in
index d2bafe3..e4a5a80 100755
--- a/p2v/launch-virt-p2v.in
+++ b/p2v/launch-virt-p2v.in
@@ -23,6 +23,7 @@
 if [ "$1" = "run" ]; then
     cd /
     metacity &
+    nm-applet &
     exec @libexecdir@/virt-p2v
 else
     xinit "$0" run
diff --git a/p2v/p2v.ks.in b/p2v/p2v.ks.in
index 6a3b24b..66ca025 100644
--- a/p2v/p2v.ks.in
+++ b/p2v/p2v.ks.in
@@ -69,6 +69,8 @@ metacity
 pcre
 libxml2
 gtk2
+network-manager-applet
+dbus-x11
 @hardware-support --optional
 
 %end
diff --git a/p2v/virt-p2v-make-disk.in b/p2v/virt-p2v-make-disk.in
index 2bb364b..e2ea7f5 100644
--- a/p2v/virt-p2v-make-disk.in
+++ b/p2v/virt-p2v-make-disk.in
@@ -95,11 +95,14 @@ trap cleanup INT QUIT TERM EXIT ERR
 #   - some fonts
 #   - hardware support (firmware etc, RHBZ#1157679)
 #   - metacity (window manager, another could be used)
+#   - NetworkManager
+#   - nm-applet
+#   - dbus-x11 (required by nm-applet, but not specified as a dep in Fedora)
 #
 # Note that libguestfs is NOT a dependency.
 case "$osversion" in
     centos-*|fedora-*|rhel-*|scientificlinux-*)
-        deps=pcre,libxml2,gtk2,/usr/bin/xinit,/usr/bin/ssh,/usr/bin/qemu-nbd,/usr/bin/Xorg,xorg-x11-drivers,xorg-x11-fonts-Type1,metacity,@hardware-support
+        deps=pcre,libxml2,gtk2,/usr/bin/xinit,/usr/bin/ssh,/usr/bin/qemu-nbd,/usr/bin/Xorg,xorg-x11-drivers,xorg-x11-fonts-Type1,metacity,NetworkManager,network-manager-applet,dbus-x11,@hardware-support
         cat > $tmpdir/p2v.conf <<'EOF'
 add_drivers+=" usb-storage "
 EOF
@@ -117,13 +120,13 @@ EOF
         "
         ;;
     debian-*|ubuntu-*)
-        deps=libpcre3,libxml2,libgtk2.0-0,openssh-client,qemu-utils,xorg,xserver-xorg-video-all,metacity
+        deps=libpcre3,libxml2,libgtk2.0-0,openssh-client,qemu-utils,xorg,xserver-xorg-video-all,metacity,network-manager,network-manager-applet,dbus-x11
         ;;
     archlinux-*)
-        deps=pcre,libxml2,gtk2,openssh,qemu,xorg-xinit,xorg-server,xf86-video-*,metacity
+        deps=pcre,libxml2,gtk2,openssh,qemu,xorg-xinit,xorg-server,xf86-video-*,metacity,NetworkManager,network-manager-applet,dbus-x11
         ;;
     opensuse-*|suse-*)
-        deps=pcre,libxml2,gtk2,/usr/bin/ssh,/usr/bin/qemu-nbd,/usr/bin/xinit,/usr/bin/Xorg,xf86-video-*,metacity
+        deps=pcre,libxml2,gtk2,/usr/bin/ssh,/usr/bin/qemu-nbd,/usr/bin/xinit,/usr/bin/Xorg,xf86-video-*,metacity,NetworkManager,network-manager-applet,dbus-x11
         ;;
     *)
         echo "$program: internal error: could not work out the Linux distro from '$osversion'"
-- 
1.8.3.1