Richard W.M. Jones
2016-May-30 21:34 UTC
[Libguestfs] [PATCH v3] p2v: Allow virt-p2v to be built with Gtk 2 or 3.
This version of the Gtk 2/3 patch gets alignment and padding mostly right. I still can't work out how to vertically align labels in the middle of a cell in a GtkGrid. The GtkTextView in the final dialog is still broken. Rich.
Richard W.M. Jones
2016-May-30 21:34 UTC
[Libguestfs] [PATCH v3] p2v: Allow virt-p2v to be built with Gtk 2 or 3.
Currently virt-p2v requires Gtk 2. This commit changes virt-p2v so it can be built with either Gtk 2 or 3. By careful use of macros, this code should compile on both recent Gtk 2 and Gtk 3. With no other options, ./configure will now prefer Gtk 3 if it finds it, or fall back to Gtk 2. But you can control this by setting './configure --with-gtk=2|3|check|no' where the options mean: * --with-gtk=2 - Only test for Gtk 2 * --with-gtk=3 - Only test for Gtk 3 * --with-gtk=check - Check for Gtk 3 then Gtk 2 (default) * --with-gtk=no - Don't build virt-p2v In the ./configure output you will see something like this: checking for --with-gtk option... 2 checking for GTK... yes checking if we can build virt-p2v... yes, with Gtk 2 --- docs/guestfs-building.pod | 10 +- m4/guestfs_misc_libraries.m4 | 43 +++++- p2v/Makefile.am | 6 +- p2v/dependencies.m4 | 8 +- p2v/gui.c | 330 ++++++++++++++++++++++++++++--------------- 5 files changed, 268 insertions(+), 129 deletions(-) diff --git a/docs/guestfs-building.pod b/docs/guestfs-building.pod index f42d25f..faaa626 100644 --- a/docs/guestfs-building.pod +++ b/docs/guestfs-building.pod @@ -272,9 +272,15 @@ Optional. Used by virt-builder for checking digital signatures. Optional. If available, virt-builder will use this library for fast, parallel uncompression of templates. -=item gtk2 E<ge> 2.24 +=item Gtk E<ge> 2.24, or 3 -Optional. Used by the virt-p2v user interface. +Optional. + +Used by the virt-p2v graphical user interface. + +Either Gtk 2 or Gtk 3 can be used. If you want to select a specific +version of Gtk, use S<C<./configure --with-gtk=2>> or +S<C<./configure --with-gtk=3>>. =item zip diff --git a/m4/guestfs_misc_libraries.m4 b/m4/guestfs_misc_libraries.m4 index 9b22670..4ae0576 100644 --- a/m4/guestfs_misc_libraries.m4 +++ b/m4/guestfs_misc_libraries.m4 @@ -74,12 +74,41 @@ PKG_CHECK_MODULES([LIBCONFIG], [libconfig],[ [AC_MSG_WARN([libconfig not found, some features will be disabled])]) AM_CONDITIONAL([HAVE_LIBCONFIG],[test "x$LIBCONFIG_LIBS" != "x"]) -dnl Check for gtk2 library, used by virt-p2v. -PKG_CHECK_MODULES([GTK2], [gtk+-2.0], [ - AC_SUBST([GTK2_CFLAGS]) - AC_SUBST([GTK2_LIBS]) -], - [AC_MSG_WARN([gtk2 not found, virt-p2v will be disabled])]) +dnl Check for Gtk 2 or 3 library, used by virt-p2v. +AC_MSG_CHECKING([for --with-gtk option]) +AC_ARG_WITH([gtk], + [AS_HELP_STRING([--with-gtk=2|3|check|no], + [prefer Gtk version 2 or 3. @<:@default=check@:>@])], + [with_gtk="$withval" + AC_MSG_RESULT([$withval])], + [with_gtk="check" + AC_MSG_RESULT([not set, will check for installed Gtk])] +) + +if test "x$GTK_LIBS" = "x" && \ + ( test "x$with_gtk" = "x3" || test "x$with_gtk" = "xcheck" ) ; then + PKG_CHECK_MODULES([GTK], [gtk+-3.0], [ + AC_SUBST([GTK_CFLAGS]) + AC_SUBST([GTK_LIBS]) + GTK_VERSION=3 + AC_SUBST([GTK_VERSION]) + ], []) +fi +if test "x$GTK_LIBS" = "x" && \ + ( test "x$with_gtk" = "x2" || test "x$with_gtk" = "xcheck" ) ; then + PKG_CHECK_MODULES([GTK], [gtk+-2.0], [ + AC_SUBST([GTK_CFLAGS]) + AC_SUBST([GTK_LIBS]) + GTK_VERSION=2 + AC_SUBST([GTK_VERSION]) + ], []) +fi dnl Can we build virt-p2v? -AM_CONDITIONAL([HAVE_P2V], [test "x$GTK2_LIBS" != "x"]) +AC_MSG_CHECKING([if we can build virt-p2v]) +if test "x$GTK_LIBS" != "x"; then + AC_MSG_RESULT([yes, with Gtk $GTK_VERSION]) +else + AC_MSG_RESULT([no]) +fi +AM_CONDITIONAL([HAVE_P2V], [test "x$GTK_LIBS" != "x"]) diff --git a/p2v/Makefile.am b/p2v/Makefile.am index 3342563..53d7198 100644 --- a/p2v/Makefile.am +++ b/p2v/Makefile.am @@ -84,13 +84,13 @@ virt_p2v_CFLAGS = \ $(WARN_CFLAGS) $(WERROR_CFLAGS) \ $(PCRE_CFLAGS) \ $(LIBXML2_CFLAGS) \ - $(GTK2_CFLAGS) + $(GTK_CFLAGS) virt_p2v_LDADD = \ $(top_builddir)/src/libutils.la \ $(PCRE_LIBS) \ $(LIBXML2_LIBS) \ - $(GTK2_LIBS) \ + $(GTK_LIBS) \ ../gnulib/lib/libgnu.la # Scripts to build the disk image, USB key, or kickstart. @@ -104,7 +104,7 @@ dependencies_files = \ $(dependencies_files): dependencies.m4 define=`echo $@ | $(SED) 's/dependencies.//;y/abcdefghijklmnopqrstuvwxyz/ABCDEFGHIJKLMNOPQRSTUVWXYZ/'`; \ - m4 -D$$define=1 $< > $@-t + m4 -D$$define=1 -DGTK_VERSION=$(GTK_VERSION) $< > $@-t mv $@-t $@ # Support files needed by the virt-p2v-make-* scripts. diff --git a/p2v/dependencies.m4 b/p2v/dependencies.m4 index ab25a49..b5d4d6e 100644 --- a/p2v/dependencies.m4 +++ b/p2v/dependencies.m4 @@ -23,7 +23,7 @@ ifelse(REDHAT,1, dnl Used by the virt-p2v binary. pcre libxml2 - gtk2 + gtk`'GTK_VERSION dnl Run as external programs by the p2v binary. /usr/bin/ssh @@ -55,7 +55,7 @@ ifelse(REDHAT,1, ifelse(DEBIAN,1, libpcre3 libxml2 - libgtk2.0-0 + libgtk`'GTK_VERSION`'.0-0 openssh-client qemu-utils curl @@ -73,7 +73,7 @@ ifelse(DEBIAN,1, ifelse(ARCHLINUX,1, pcre libxml2 - gtk2 + gtk`'GTK_VERSION openssh qemu curl @@ -92,7 +92,7 @@ ifelse(ARCHLINUX,1, ifelse(SUSE,1, pcre libxml2 - gtk2 + gtk`'GTK_VERSION /usr/bin/ssh /usr/bin/qemu-nbd curl diff --git a/p2v/gui.c b/p2v/gui.c index 633d3a3..f5e0175 100644 --- a/p2v/gui.c +++ b/p2v/gui.c @@ -80,6 +80,104 @@ #define MAX_SUPPORTED_VCPUS 160 #define MAX_SUPPORTED_MEMORY_MB (UINT64_C (4000 * 1024)) +/* Backwards compatibility for some deprecated functions in Gtk 3. */ +#if GTK_CHECK_VERSION(3,2,0) /* gtk >= 3.2 */ +#define hbox_new(box, homogeneous, spacing) \ + do { \ + (box) = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, spacing); \ + if (homogeneous) \ + gtk_box_set_homogeneous (GTK_BOX (box), TRUE); \ + } while (0) +#define vbox_new(box, homogeneous, spacing) \ + do { \ + (box) = gtk_box_new (GTK_ORIENTATION_VERTICAL, spacing); \ + if (homogeneous) \ + gtk_box_set_homogeneous (GTK_BOX (box), TRUE); \ + } while (0) +#else /* gtk < 3.2 */ +#define hbox_new(box, homogeneous, spacing) \ + (box) = gtk_hbox_new ((homogeneous), (spacing)) +#define vbox_new(box, homogeneous, spacing) \ + (box) = gtk_vbox_new ((homogeneous), (spacing)) +#endif + +#if GTK_CHECK_VERSION(3,4,0) /* gtk >= 3.4 */ +/* GtkGrid is sufficiently similar to GtkTable that we can just + * redefine these functions. + */ +#define table_new(grid, rows, columns) \ + (grid) = gtk_grid_new () +#define table_attach(grid, child, left, right, top, bottom, xoptions, yoptions, xpadding, ypadding) \ + do { \ + if ((xoptions) == GTK_FILL) { \ + gtk_widget_set_hexpand ((child), TRUE); \ + gtk_widget_set_halign ((child), GTK_ALIGN_FILL); \ + } \ + if ((yoptions) == GTK_FILL) { \ + gtk_widget_set_vexpand ((child), TRUE); \ + gtk_widget_set_valign ((child), GTK_ALIGN_FILL); \ + } \ + set_padding ((child), (xpadding), (ypadding)); \ + gtk_grid_attach (GTK_GRID (grid), (child), \ + (left), (top), (right)-(left), (bottom)-(top)); \ + } while (0) +#else +#define table_new(table, rows, columns) \ + (table) = gtk_table_new ((rows), (columns), FALSE) +#define table_attach(table, child, left, right,top, bottom, xoptions, yoptions, xpadding, ypadding) \ + gtk_table_attach (GTK_TABLE (table), (child), \ + (left), (right), (top), (bottom), \ + (xoptions), (yoptions), (xpadding), (ypadding)) +#endif + +#if GTK_CHECK_VERSION(3,8,0) /* gtk >= 3.8 */ +#define scrolled_window_add_with_viewport(container, child) \ + gtk_container_add (GTK_CONTAINER (container), child) +#else +#define scrolled_window_add_with_viewport(container, child) \ + gtk_scrolled_window_add_with_viewport (GTK_SCROLLED_WINDOW (container), child) +#endif + +#if GTK_CHECK_VERSION(3,10,0) /* gtk >= 3.10 */ +#undef GTK_STOCK_DIALOG_WARNING +#define GTK_STOCK_DIALOG_WARNING "dialog-warning" +#define gtk_image_new_from_stock gtk_image_new_from_icon_name +#endif + +#if GTK_CHECK_VERSION(3,14,0) /* gtk >= 3.14 */ +#define set_padding(widget, xpad, ypad) \ + do { \ + if ((xpad) != 0) { \ + gtk_widget_set_margin_start ((widget), (xpad)); \ + gtk_widget_set_margin_end ((widget), (xpad)); \ + } \ + if ((ypad) != 0) { \ + gtk_widget_set_margin_top ((widget), (ypad)); \ + gtk_widget_set_margin_bottom ((widget), (ypad)); \ + } \ + } while (0) +#define set_alignment(widget, xalign, yalign) \ + do { \ + if ((xalign) == 0.) \ + gtk_widget_set_halign ((widget), GTK_ALIGN_START); \ + else if ((xalign) == 1.) \ + gtk_widget_set_halign ((widget), GTK_ALIGN_END); \ + else \ + gtk_widget_set_halign ((widget), GTK_ALIGN_CENTER); \ + if ((yalign) == 0.) \ + gtk_widget_set_valign ((widget), GTK_ALIGN_START); \ + else if ((xalign) == 1.) \ + gtk_widget_set_valign ((widget), GTK_ALIGN_END); \ + else \ + gtk_widget_set_valign ((widget), GTK_ALIGN_CENTER); \ + } while (0) +#else /* gtk < 3.14 */ +#define set_padding(widget, xpad, ypad) \ + gtk_misc_set_padding(GTK_MISC(widget),(xpad),(ypad)) +#define set_alignment(widget, xalign, yalign) \ + gtk_misc_set_alignment(GTK_MISC(widget),(xalign),(yalign)) +#endif + static void create_connection_dialog (struct config *); static void create_conversion_dialog (struct config *); static void create_running_dialog (void); @@ -171,46 +269,46 @@ create_connection_dialog (struct config *config) /* The main dialog area. */ intro = gtk_label_new (_("Connect to a virt-v2v conversion server over SSH:")); gtk_label_set_line_wrap (GTK_LABEL (intro), TRUE); - gtk_misc_set_padding (GTK_MISC (intro), 10, 10); + set_padding (intro, 10, 10); - table = gtk_table_new (7, 2, FALSE); + table_new (table, 7, 2); server_label = gtk_label_new (_("Conversion server:")); - gtk_misc_set_alignment (GTK_MISC (server_label), 1., 0.5); - gtk_table_attach (GTK_TABLE (table), server_label, - 0, 1, 0, 1, GTK_FILL, GTK_FILL, 4, 4); + table_attach (table, server_label, + 0, 1, 0, 1, GTK_FILL, GTK_FILL, 4, 4); + set_alignment (server_label, 1., 0.5); server_entry = gtk_entry_new (); if (config->server != NULL) gtk_entry_set_text (GTK_ENTRY (server_entry), config->server); - gtk_table_attach (GTK_TABLE (table), server_entry, - 1, 2, 0, 1, GTK_FILL, GTK_FILL, 4, 4); + table_attach (table, server_entry, + 1, 2, 0, 1, GTK_FILL, GTK_FILL, 4, 4); port_label = gtk_label_new (_("SSH port:")); - gtk_misc_set_alignment (GTK_MISC (port_label), 1., 0.5); - gtk_table_attach (GTK_TABLE (table), port_label, - 0, 1, 1, 2, GTK_FILL, GTK_FILL, 4, 4); + table_attach (table, port_label, + 0, 1, 1, 2, GTK_FILL, GTK_FILL, 4, 4); + set_alignment (port_label, 1., 0.5); port_entry = gtk_entry_new (); gtk_entry_set_width_chars (GTK_ENTRY (port_entry), 6); snprintf (port_str, sizeof port_str, "%d", config->port); gtk_entry_set_text (GTK_ENTRY (port_entry), port_str); - gtk_table_attach (GTK_TABLE (table), port_entry, - 1, 2, 1, 2, GTK_FILL, GTK_FILL, 4, 4); + table_attach (table, port_entry, + 1, 2, 1, 2, GTK_FILL, GTK_FILL, 4, 4); username_label = gtk_label_new (_("User name:")); - gtk_misc_set_alignment (GTK_MISC (username_label), 1., 0.5); - gtk_table_attach (GTK_TABLE (table), username_label, - 0, 1, 2, 3, GTK_FILL, GTK_FILL, 4, 4); + table_attach (table, username_label, + 0, 1, 2, 3, GTK_FILL, GTK_FILL, 4, 4); + set_alignment (username_label, 1., 0.5); username_entry = gtk_entry_new (); if (config->username != NULL) gtk_entry_set_text (GTK_ENTRY (username_entry), config->username); else gtk_entry_set_text (GTK_ENTRY (username_entry), "root"); - gtk_table_attach (GTK_TABLE (table), username_entry, - 1, 2, 2, 3, GTK_FILL, GTK_FILL, 4, 4); + table_attach (table, username_entry, + 1, 2, 2, 3, GTK_FILL, GTK_FILL, 4, 4); password_label = gtk_label_new (_("Password:")); - gtk_misc_set_alignment (GTK_MISC (password_label), 1., 0.5); - gtk_table_attach (GTK_TABLE (table), password_label, - 0, 1, 3, 4, GTK_FILL, GTK_FILL, 4, 4); + table_attach (table, password_label, + 0, 1, 3, 4, GTK_FILL, GTK_FILL, 4, 4); + set_alignment (password_label, 1., 0.5); password_entry = gtk_entry_new (); gtk_entry_set_visibility (GTK_ENTRY (password_entry), FALSE); #ifdef GTK_INPUT_PURPOSE_PASSWORD @@ -219,53 +317,57 @@ create_connection_dialog (struct config *config) #endif if (config->password != NULL) gtk_entry_set_text (GTK_ENTRY (password_entry), config->password); - gtk_table_attach (GTK_TABLE (table), password_entry, - 1, 2, 3, 4, GTK_FILL, GTK_FILL, 4, 4); + table_attach (table, password_entry, + 1, 2, 3, 4, GTK_FILL, GTK_FILL, 4, 4); identity_label = gtk_label_new (_("SSH Identity URL:")); - gtk_misc_set_alignment (GTK_MISC (identity_label), 1., 0.5); - gtk_table_attach (GTK_TABLE (table), identity_label, - 0, 1, 4, 5, GTK_FILL, GTK_FILL, 4, 4); + table_attach (table, identity_label, + 0, 1, 4, 5, GTK_FILL, GTK_FILL, 4, 4); + set_alignment (identity_label, 1., 0.5); identity_entry = gtk_entry_new (); if (config->identity_url != NULL) gtk_entry_set_text (GTK_ENTRY (identity_entry), config->identity_url); - gtk_table_attach (GTK_TABLE (table), identity_entry, - 1, 2, 4, 5, GTK_FILL, GTK_FILL, 4, 4); + table_attach (table, identity_entry, + 1, 2, 4, 5, GTK_FILL, GTK_FILL, 4, 4); identity_tip_label = gtk_label_new (NULL); gtk_label_set_markup (GTK_LABEL (identity_tip_label), _("<i>If using password authentication, leave the SSH Identity URL blank</i>")); gtk_label_set_line_wrap (GTK_LABEL (identity_tip_label), TRUE); - gtk_table_attach (GTK_TABLE (table), identity_tip_label, - 1, 2, 5, 6, GTK_FILL, GTK_FILL, 4, 4); + table_attach (table, identity_tip_label, + 1, 2, 5, 6, GTK_FILL, GTK_FILL, 4, 4); sudo_button gtk_check_button_new_with_label (_("Use sudo when running virt-v2v")); gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (sudo_button), config->sudo); - gtk_table_attach (GTK_TABLE (table), sudo_button, - 1, 2, 6, 7, GTK_FILL, GTK_FILL, 4, 4); + table_attach (table, sudo_button, + 1, 2, 6, 7, GTK_FILL, GTK_FILL, 4, 4); - test_hbox = gtk_hbox_new (FALSE, 0); + hbox_new (test_hbox, FALSE, 0); test = gtk_button_new_with_label (_("Test connection")); gtk_box_pack_start (GTK_BOX (test_hbox), test, TRUE, FALSE, 0); - spinner_hbox = gtk_hbox_new (FALSE, 10); + hbox_new (spinner_hbox, FALSE, 10); spinner = gtk_spinner_new (); gtk_box_pack_start (GTK_BOX (spinner_hbox), spinner, FALSE, FALSE, 0); spinner_message = gtk_label_new (NULL); gtk_label_set_line_wrap (GTK_LABEL (spinner_message), TRUE); - gtk_misc_set_padding (GTK_MISC (spinner_message), 10, 10); + set_padding (spinner_message, 10, 10); gtk_box_pack_start (GTK_BOX (spinner_hbox), spinner_message, TRUE, TRUE, 0); - gtk_box_pack_start (GTK_BOX (GTK_DIALOG (conn_dlg)->vbox), - intro, TRUE, TRUE, 0); - gtk_box_pack_start (GTK_BOX (GTK_DIALOG (conn_dlg)->vbox), - table, TRUE, TRUE, 0); - gtk_box_pack_start (GTK_BOX (GTK_DIALOG (conn_dlg)->vbox), - test_hbox, FALSE, FALSE, 0); - gtk_box_pack_start (GTK_BOX (GTK_DIALOG (conn_dlg)->vbox), - spinner_hbox, TRUE, TRUE, 0); + gtk_box_pack_start + (GTK_BOX (gtk_dialog_get_content_area (GTK_DIALOG (conn_dlg))), + intro, TRUE, TRUE, 0); + gtk_box_pack_start + (GTK_BOX (gtk_dialog_get_content_area (GTK_DIALOG (conn_dlg))), + table, TRUE, TRUE, 0); + gtk_box_pack_start + (GTK_BOX (gtk_dialog_get_content_area (GTK_DIALOG (conn_dlg))), + test_hbox, FALSE, FALSE, 0); + gtk_box_pack_start + (GTK_BOX (gtk_dialog_get_content_area (GTK_DIALOG (conn_dlg))), + spinner_hbox, TRUE, TRUE, 0); /* Buttons. */ gtk_dialog_add_buttons (GTK_DIALOG (conn_dlg), @@ -306,7 +408,7 @@ show_connection_dialog (void) /* Show everything except the spinner. */ gtk_widget_show_all (conn_dlg); - gtk_widget_hide_all (spinner_hbox); + gtk_widget_hide (spinner_hbox); } /** @@ -592,55 +694,55 @@ create_conversion_dialog (struct config *config) gtk_widget_set_size_request (conv_dlg, 900, 560); /* The main dialog area. */ - hbox = gtk_hbox_new (TRUE, 1); - left_vbox = gtk_vbox_new (FALSE, 1); - right_vbox = gtk_vbox_new (TRUE, 1); + hbox_new (hbox, TRUE, 1); + vbox_new (left_vbox, FALSE, 1); + vbox_new (right_vbox, TRUE, 1); /* The left column: target properties and output options. */ target_frame = gtk_frame_new (_("Target properties")); gtk_container_set_border_width (GTK_CONTAINER (target_frame), 4); - target_vbox = gtk_vbox_new (FALSE, 1); + vbox_new (target_vbox, FALSE, 1); - target_tbl = gtk_table_new (3, 3, FALSE); + table_new (target_tbl, 3, 3); guestname_label = gtk_label_new (_("Name:")); - gtk_misc_set_alignment (GTK_MISC (guestname_label), 1., 0.5); - gtk_table_attach (GTK_TABLE (target_tbl), guestname_label, - 0, 1, 0, 1, GTK_FILL, GTK_FILL, 1, 1); + table_attach (target_tbl, guestname_label, + 0, 1, 0, 1, GTK_FILL, GTK_FILL, 1, 1); + set_alignment (guestname_label, 1., 0.5); guestname_entry = gtk_entry_new (); if (config->guestname != NULL) gtk_entry_set_text (GTK_ENTRY (guestname_entry), config->guestname); - gtk_table_attach (GTK_TABLE (target_tbl), guestname_entry, - 1, 2, 0, 1, GTK_FILL, GTK_FILL, 1, 1); + table_attach (target_tbl, guestname_entry, + 1, 2, 0, 1, GTK_FILL, GTK_FILL, 1, 1); vcpus_label = gtk_label_new (_("# vCPUs:")); - gtk_misc_set_alignment (GTK_MISC (vcpus_label), 1., 0.5); - gtk_table_attach (GTK_TABLE (target_tbl), vcpus_label, - 0, 1, 1, 2, GTK_FILL, GTK_FILL, 1, 1); + table_attach (target_tbl, vcpus_label, + 0, 1, 1, 2, GTK_FILL, GTK_FILL, 1, 1); + set_alignment (vcpus_label, 1., 0.5); vcpus_entry = gtk_entry_new (); snprintf (vcpus_str, sizeof vcpus_str, "%d", config->vcpus); gtk_entry_set_text (GTK_ENTRY (vcpus_entry), vcpus_str); - gtk_table_attach (GTK_TABLE (target_tbl), vcpus_entry, - 1, 2, 1, 2, GTK_FILL, GTK_FILL, 1, 1); + table_attach (target_tbl, vcpus_entry, + 1, 2, 1, 2, GTK_FILL, GTK_FILL, 1, 1); vcpus_warning = gtk_image_new_from_stock (GTK_STOCK_DIALOG_WARNING, GTK_ICON_SIZE_BUTTON); - gtk_table_attach (GTK_TABLE (target_tbl), vcpus_warning, - 2, 3, 1, 2, 0, 0, 1, 1); + table_attach (target_tbl, vcpus_warning, + 2, 3, 1, 2, 0, 0, 1, 1); memory_label = gtk_label_new (_("Memory (MB):")); - gtk_misc_set_alignment (GTK_MISC (memory_label), 1., 0.5); - gtk_table_attach (GTK_TABLE (target_tbl), memory_label, - 0, 1, 2, 3, GTK_FILL, GTK_FILL, 1, 1); + table_attach (target_tbl, memory_label, + 0, 1, 2, 3, GTK_FILL, GTK_FILL, 1, 1); + set_alignment (memory_label, 1., 0.5); memory_entry = gtk_entry_new (); snprintf (memory_str, sizeof memory_str, "%" PRIu64, config->memory / 1024 / 1024); gtk_entry_set_text (GTK_ENTRY (memory_entry), memory_str); - gtk_table_attach (GTK_TABLE (target_tbl), memory_entry, - 1, 2, 2, 3, GTK_FILL, GTK_FILL, 1, 1); + table_attach (target_tbl, memory_entry, + 1, 2, 2, 3, GTK_FILL, GTK_FILL, 1, 1); memory_warning = gtk_image_new_from_stock (GTK_STOCK_DIALOG_WARNING, GTK_ICON_SIZE_BUTTON); - gtk_table_attach (GTK_TABLE (target_tbl), memory_warning, - 2, 3, 2, 3, 0, 0, 1, 1); + table_attach (target_tbl, memory_warning, + 2, 3, 2, 3, 0, 0, 1, 1); gtk_box_pack_start (GTK_BOX (target_vbox), target_tbl, TRUE, TRUE, 0); @@ -656,56 +758,56 @@ create_conversion_dialog (struct config *config) output_frame = gtk_frame_new (_("Virt-v2v output options")); gtk_container_set_border_width (GTK_CONTAINER (output_frame), 4); - output_vbox = gtk_vbox_new (FALSE, 1); + vbox_new (output_vbox, FALSE, 1); - output_tbl = gtk_table_new (5, 2, FALSE); + table_new (output_tbl, 5, 2); o_label = gtk_label_new (_("Output to (-o):")); - gtk_misc_set_alignment (GTK_MISC (o_label), 1., 0.5); - gtk_table_attach (GTK_TABLE (output_tbl), o_label, - 0, 1, 0, 1, GTK_FILL, GTK_FILL, 1, 1); + table_attach (output_tbl, o_label, + 0, 1, 0, 1, GTK_FILL, GTK_FILL, 1, 1); + set_alignment (o_label, 1., 0.5); o_combo = gtk_combo_box_text_new (); gtk_widget_set_tooltip_markup (o_combo, _("<b>libvirt</b> means send the converted guest to libvirt-managed KVM on the conversion server. <b>local</b> means put it in a directory on the conversion server. <b>rhev</b> means write it to RHEV-M/oVirt. <b>glance</b> means write it to OpenStack Glance. See the virt-v2v(1) manual page for more information about output options.")); repopulate_output_combo (config); - gtk_table_attach (GTK_TABLE (output_tbl), o_combo, - 1, 2, 0, 1, GTK_FILL, GTK_FILL, 1, 1); + table_attach (output_tbl, o_combo, + 1, 2, 0, 1, GTK_FILL, GTK_FILL, 1, 1); oc_label = gtk_label_new (_("Output conn. (-oc):")); - gtk_misc_set_alignment (GTK_MISC (oc_label), 1., 0.5); - gtk_table_attach (GTK_TABLE (output_tbl), oc_label, - 0, 1, 1, 2, GTK_FILL, GTK_FILL, 1, 1); + table_attach (output_tbl, oc_label, + 0, 1, 1, 2, GTK_FILL, GTK_FILL, 1, 1); + set_alignment (oc_label, 1., 0.5); oc_entry = gtk_entry_new (); gtk_widget_set_tooltip_markup (oc_entry, _("For <b>libvirt</b> only, the libvirt connection URI, or leave blank to add the guest to the default libvirt instance on the conversion server. For others, leave this field blank.")); if (config->output_connection != NULL) gtk_entry_set_text (GTK_ENTRY (oc_entry), config->output_connection); - gtk_table_attach (GTK_TABLE (output_tbl), oc_entry, - 1, 2, 1, 2, GTK_FILL, GTK_FILL, 1, 1); + table_attach (output_tbl, oc_entry, + 1, 2, 1, 2, GTK_FILL, GTK_FILL, 1, 1); os_label = gtk_label_new (_("Output storage (-os):")); - gtk_misc_set_alignment (GTK_MISC (os_label), 1., 0.5); - gtk_table_attach (GTK_TABLE (output_tbl), os_label, - 0, 1, 2, 3, GTK_FILL, GTK_FILL, 1, 1); + table_attach (output_tbl, os_label, + 0, 1, 2, 3, GTK_FILL, GTK_FILL, 1, 1); + set_alignment (os_label, 1., 0.5); os_entry = gtk_entry_new (); gtk_widget_set_tooltip_markup (os_entry, _("For <b>local</b>, put the directory name on the conversion server. For <b>rhev</b>, put the Export Storage Domain (server:/mountpoint). For others, leave this field blank.")); if (config->output_storage != NULL) gtk_entry_set_text (GTK_ENTRY (os_entry), config->output_storage); - gtk_table_attach (GTK_TABLE (output_tbl), os_entry, - 1, 2, 2, 3, GTK_FILL, GTK_FILL, 1, 1); + table_attach (output_tbl, os_entry, + 1, 2, 2, 3, GTK_FILL, GTK_FILL, 1, 1); of_label = gtk_label_new (_("Output format (-of):")); - gtk_misc_set_alignment (GTK_MISC (of_label), 1., 0.5); - gtk_table_attach (GTK_TABLE (output_tbl), of_label, - 0, 1, 3, 4, GTK_FILL, GTK_FILL, 1, 1); + table_attach (output_tbl, of_label, + 0, 1, 3, 4, GTK_FILL, GTK_FILL, 1, 1); + set_alignment (of_label, 1., 0.5); of_entry = gtk_entry_new (); gtk_widget_set_tooltip_markup (of_entry, _("The output disk format, typically <b>raw</b> or <b>qcow2</b>. If blank, defaults to <b>raw</b>.")); if (config->output_format != NULL) gtk_entry_set_text (GTK_ENTRY (of_entry), config->output_format); - gtk_table_attach (GTK_TABLE (output_tbl), of_entry, - 1, 2, 3, 4, GTK_FILL, GTK_FILL, 1, 1); + table_attach (output_tbl, of_entry, + 1, 2, 3, 4, GTK_FILL, GTK_FILL, 1, 1); oa_label = gtk_label_new (_("Output allocation (-oa):")); - gtk_misc_set_alignment (GTK_MISC (oa_label), 1., 0.5); - gtk_table_attach (GTK_TABLE (output_tbl), oa_label, - 0, 1, 4, 5, GTK_FILL, GTK_FILL, 1, 1); + table_attach (output_tbl, oa_label, + 0, 1, 4, 5, GTK_FILL, GTK_FILL, 1, 1); + set_alignment (oa_label, 1., 0.5); oa_combo = gtk_combo_box_text_new (); gtk_combo_box_text_append_text (GTK_COMBO_BOX_TEXT (oa_combo), "sparse"); @@ -719,8 +821,8 @@ create_conversion_dialog (struct config *config) gtk_combo_box_set_active (GTK_COMBO_BOX (oa_combo), 0); break; } - gtk_table_attach (GTK_TABLE (output_tbl), oa_combo, - 1, 2, 4, 5, GTK_FILL, GTK_FILL, 1, 1); + table_attach (output_tbl, oa_combo, + 1, 2, 4, 5, GTK_FILL, GTK_FILL, 1, 1); debug_button gtk_check_button_new_with_label (_("Enable server-side debugging\n" @@ -735,7 +837,7 @@ create_conversion_dialog (struct config *config) info_frame = gtk_frame_new (_("Information")); gtk_container_set_border_width (GTK_CONTAINER (info_frame), 4); info_label = gtk_label_new (NULL); - gtk_misc_set_alignment (GTK_MISC (info_label), 0.1, 0.5); + set_alignment (info_label, 0.1, 0.5); set_info_label (); gtk_container_add (GTK_CONTAINER (info_frame), info_label); @@ -748,8 +850,7 @@ create_conversion_dialog (struct config *config) GTK_POLICY_NEVER, GTK_POLICY_AUTOMATIC); disks_list = gtk_tree_view_new (); populate_disks (GTK_TREE_VIEW (disks_list)); - gtk_scrolled_window_add_with_viewport (GTK_SCROLLED_WINDOW (disks_sw), - disks_list); + scrolled_window_add_with_viewport (disks_sw, disks_list); gtk_container_add (GTK_CONTAINER (disks_frame), disks_sw); removable_frame = gtk_frame_new (_("Removable media")); @@ -760,8 +861,7 @@ create_conversion_dialog (struct config *config) GTK_POLICY_NEVER, GTK_POLICY_AUTOMATIC); removable_list = gtk_tree_view_new (); populate_removable (GTK_TREE_VIEW (removable_list)); - gtk_scrolled_window_add_with_viewport (GTK_SCROLLED_WINDOW (removable_sw), - removable_list); + scrolled_window_add_with_viewport (removable_sw, removable_list); gtk_container_add (GTK_CONTAINER (removable_frame), removable_sw); interfaces_frame = gtk_frame_new (_("Network interfaces")); @@ -776,8 +876,7 @@ create_conversion_dialog (struct config *config) G_CALLBACK (maybe_identify_click), NULL); gtk_widget_set_tooltip_markup (interfaces_list, _("Left click on an interface name to flash the light on the physical interface.")); populate_interfaces (GTK_TREE_VIEW (interfaces_list)); - gtk_scrolled_window_add_with_viewport (GTK_SCROLLED_WINDOW (interfaces_sw), - interfaces_list); + scrolled_window_add_with_viewport (interfaces_sw, interfaces_list); gtk_container_add (GTK_CONTAINER (interfaces_frame), interfaces_sw); /* Pack the top level dialog. */ @@ -791,8 +890,9 @@ create_conversion_dialog (struct config *config) gtk_box_pack_start (GTK_BOX (hbox), left_vbox, TRUE, TRUE, 0); gtk_box_pack_start (GTK_BOX (hbox), right_vbox, TRUE, TRUE, 0); - gtk_box_pack_start (GTK_BOX (GTK_DIALOG (conv_dlg)->vbox), - hbox, TRUE, TRUE, 0); + gtk_box_pack_start + (GTK_BOX (gtk_dialog_get_content_area (GTK_DIALOG (conv_dlg))), + hbox, TRUE, TRUE, 0); /* Buttons. */ gtk_dialog_add_buttons (GTK_DIALOG (conv_dlg), @@ -1489,23 +1589,27 @@ create_running_dialog (void) v2v_output = gtk_text_view_new (); gtk_text_view_set_editable (GTK_TEXT_VIEW (v2v_output), FALSE); gtk_text_view_set_wrap_mode (GTK_TEXT_VIEW (v2v_output), GTK_WRAP_CHAR); + /* XXX Gtk3 ignores this, why? */ gtk_widget_set_size_request (v2v_output, 700, 400); log_label = gtk_label_new (NULL); - gtk_misc_set_alignment (GTK_MISC (log_label), 0., 0.5); - gtk_misc_set_padding (GTK_MISC (log_label), 10, 10); + set_alignment (log_label, 0., 0.5); + set_padding (log_label, 10, 10); set_log_dir (NULL); status_label = gtk_label_new (NULL); - gtk_misc_set_alignment (GTK_MISC (status_label), 0., 0.5); - gtk_misc_set_padding (GTK_MISC (status_label), 10, 10); + set_alignment (status_label, 0., 0.5); + set_padding (status_label, 10, 10); gtk_container_add (GTK_CONTAINER (v2v_output_sw), v2v_output); - gtk_box_pack_start (GTK_BOX (GTK_DIALOG (run_dlg)->vbox), - v2v_output_sw, TRUE, TRUE, 0); - gtk_box_pack_start (GTK_BOX (GTK_DIALOG (run_dlg)->vbox), - log_label, TRUE, TRUE, 0); - gtk_box_pack_start (GTK_BOX (GTK_DIALOG (run_dlg)->vbox), - status_label, TRUE, TRUE, 0); + gtk_box_pack_start + (GTK_BOX (gtk_dialog_get_content_area (GTK_DIALOG (run_dlg))), + v2v_output_sw, TRUE, TRUE, 0); + gtk_box_pack_start + (GTK_BOX (gtk_dialog_get_content_area (GTK_DIALOG (run_dlg))), + log_label, TRUE, TRUE, 0); + gtk_box_pack_start + (GTK_BOX (gtk_dialog_get_content_area (GTK_DIALOG (run_dlg))), + status_label, TRUE, TRUE, 0); /* Buttons. */ gtk_dialog_add_buttons (GTK_DIALOG (run_dlg), -- 2.7.4
Reasonably Related Threads
- [PATCH 0/2] p2v: Allow virt-p2v to be built with Gtk 2 or 3.
- [PATCH v2 0/3] p2v: Allow virt-p2v to be built with Gtk 2 or 3.
- [PATCH 0/2] p2v: Warn if vcpus or memory would be larger than supported by RHEL (RHBZ#823758).
- [PATCH] p2v: add mnemonics to labels and buttons (RHBZ#1379289)
- [PATCH 0/4] Various p2v fixes and features