Laszlo Ersek
2022-Sep-28 12:06 UTC
[Libguestfs] [p2v PATCH 0/2] restrict supported GLIB2 and GTK3 versions
Remove GTK3 compat code that is not needed on RHEL7+. Incorporate suggestions from Rich and Daniel in the subthread at <https://listman.redhat.com/archives/libguestfs/2022-September/029940.html>. Do not remove "gui-gtk3-compat.h" altogether; I expect we may have to add in new compat stuff in the future, and having to redo the infrastructure for that is not a great prospect. Laszlo Laszlo Ersek (2): require GLIB2 >= 2.56 and GTK3 >= 3.22; enhance API compatibility remove old GLIB2 / GTK3 compat code Makefile.am | 4 ++ docs/p2v-building.pod | 6 +- gui-gtk3-compat.h | 46 ------------- gui.c | 69 ++------------------ m4/p2v-libraries.m4 | 5 +- 5 files changed, 16 insertions(+), 114 deletions(-)
Laszlo Ersek
2022-Sep-28 12:06 UTC
[Libguestfs] [p2v PATCH 1/2] require GLIB2 >= 2.56 and GTK3 >= 3.22; enhance API compatibility
For further simplifying virt-p2v's GTK API usage, require the GLIB2 and GTK3 versions that RHEL7 provides. The MIN_REQUIRED=<version> macros elicit warnings if we use an API that was already deprecated in said version of the given library. The MAX_ALLOWED=<version> macros make sure we don't unwittingly use an API that was introduced after our required minimum version. (GDK is a layer below GTK, so using the GDK_VERSION_* macros ensures both GDK and GTK API compatibility.) Suggested-by: Richard W.M. Jones <rjones at redhat.com> Suggested-by: Daniel P. Berrang? <berrange at redhat.com> Signed-off-by: Laszlo Ersek <lersek at redhat.com> --- Makefile.am | 4 ++++ docs/p2v-building.pod | 6 +++++- m4/p2v-libraries.m4 | 5 +++-- 3 files changed, 12 insertions(+), 3 deletions(-) diff --git a/Makefile.am b/Makefile.am index eaa98270fd9a..02ff1bb2eebd 100644 --- a/Makefile.am +++ b/Makefile.am @@ -120,28 +120,32 @@ virt_p2v_SOURCES = \ utils.c generated_sources = \ config.c \ kernel-config.c \ p2v-config.h nodist_virt_p2v_SOURCES = \ $(generated_sources) \ about-authors.c virt_p2v_CPPFLAGS = \ -DLOCALEBASEDIR=\""$(datadir)/locale"\" \ -DGTK_DISABLE_DEPRECATED \ + -DGLIB_VERSION_MIN_REQUIRED=GLIB_VERSION_2_56 \ + -DGLIB_VERSION_MAX_ALLOWED=GLIB_VERSION_2_56 \ + -DGDK_VERSION_MIN_REQUIRED=GDK_VERSION_3_22 \ + -DGDK_VERSION_MAX_ALLOWED=GDK_VERSION_3_22 \ -I$(srcdir)/libguestfs \ -I$(srcdir)/miniexpect \ -I$(srcdir)/gnulib/lib -Ignulib/lib virt_p2v_CFLAGS = \ -pthread \ $(WARN_CFLAGS) $(WERROR_CFLAGS) \ $(PCRE2_CFLAGS) \ $(LIBXML2_CFLAGS) \ $(GTK3_CFLAGS) \ $(DBUS_CFLAGS) virt_p2v_LDADD = \ $(PCRE2_LIBS) \ diff --git a/docs/p2v-building.pod b/docs/p2v-building.pod index e1ba4de12504..a0c16f1202a9 100644 --- a/docs/p2v-building.pod +++ b/docs/p2v-building.pod @@ -69,29 +69,33 @@ I<Required>. I<Required>. =item xz I<Required>. =item nbdkit Optional. L<virt-p2v(1)> requires nbdkit, but it only needs to be present on the virt-p2v ISO, it does not need to be installed at compile time. -=item Gtk 3 +=item Glib E<ge> 2.56 + +I<Required>. + +=item Gtk E<ge> 3.22 I<Required>. =item D-Bus Optional. If the D-Bus low level C API is available, virt-p2v can send a D-Bus message to logind to inhibit power saving (sleep, suspend, etc) during P2V conversions. If this API is not available at build time, then very long conversions might be interrupted if the physical machine goes to sleep. diff --git a/m4/p2v-libraries.m4 b/m4/p2v-libraries.m4 index a00b301056d2..b8cea3603423 100644 --- a/m4/p2v-libraries.m4 +++ b/m4/p2v-libraries.m4 @@ -21,25 +21,26 @@ AC_DEFINE_UNQUOTED([host_cpu],["$host_cpu"],[Host architecture.]) dnl Headers. AC_CHECK_HEADERS([\ linux/rtc.h]) dnl Which header file defines major, minor, makedev. AC_HEADER_MAJOR dnl Check for PCRE2 (required) PKG_CHECK_MODULES([PCRE2], [libpcre2-8]) dnl libxml2 (required) PKG_CHECK_MODULES([LIBXML2], [libxml-2.0]) -dnl Check for Gtk 3 library, used by virt-p2v (required). -PKG_CHECK_MODULES([GTK3], [gtk+-3.0]) +dnl Check for the Glib 2 and Gtk 3 libraries, used by virt-p2v (required). +PKG_CHECK_MODULES([GLIB2], [glib-2.0 >= 2.56]) +PKG_CHECK_MODULES([GTK3], [gtk+-3.0 >= 3.22]) dnl D-Bus is an optional dependency of virt-p2v. PKG_CHECK_MODULES([DBUS], [dbus-1], [ AC_SUBST([DBUS_CFLAGS]) AC_SUBST([DBUS_LIBS]) AC_DEFINE([HAVE_DBUS],[1],[D-Bus found at compile time.]) ],[ AC_MSG_WARN([D-Bus not found, virt-p2v will not be able to inhibit power saving during P2V conversions]) ])
Laszlo Ersek
2022-Sep-28 12:06 UTC
[Libguestfs] [p2v PATCH 2/2] remove old GLIB2 / GTK3 compat code
Open-code conditional compilation directives that evaluate to constant values when virt-p2v is built with GLIB >= 2.56 and GTK >= 3.22. Signed-off-by: Laszlo Ersek <lersek at redhat.com> --- gui-gtk3-compat.h | 46 ------------- gui.c | 69 ++------------------ 2 files changed, 4 insertions(+), 111 deletions(-) diff --git a/gui-gtk3-compat.h b/gui-gtk3-compat.h index e26506469eea..147abf9f4f54 100644 --- a/gui-gtk3-compat.h +++ b/gui-gtk3-compat.h @@ -5,135 +5,89 @@ * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see <https://www.gnu.org/licenses/>. */ /* Backwards compatibility for some deprecated functions in Gtk 3. */ -#if !GTK_CHECK_VERSION(3,2,0) /* gtk < 3.2 */ -static gboolean -gdk_event_get_button (const GdkEvent *event, guint *button) -{ - if (event->type != GDK_BUTTON_PRESS) - return FALSE; - - *button = ((const GdkEventButton *) event)->button; - return TRUE; -} -#endif - -#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 */ /* Copy this enum from GtkTable, as when building without deprecated * functions this is not automatically pulled in. */ typedef enum { GTK_EXPAND = 1 << 0, GTK_SHRINK = 1 << 1, GTK_FILL = 1 << 2 } GtkAttachOptions; /* 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, xoptions, yoptions, xpadding, ypadding) \ do { \ if (((xoptions) & GTK_EXPAND) != 0) \ gtk_widget_set_hexpand ((child), TRUE); \ if (((xoptions) & GTK_FILL) != 0) \ gtk_widget_set_halign ((child), GTK_ALIGN_FILL); \ if (((yoptions) & GTK_EXPAND) != 0) \ gtk_widget_set_vexpand ((child), TRUE); \ if (((yoptions) & GTK_FILL) != 0) \ gtk_widget_set_valign ((child), GTK_ALIGN_FILL); \ set_padding ((child), (xpadding), (ypadding)); \ gtk_grid_attach (GTK_GRID (grid), (child), \ (left), (top), (right)-(left), 1); \ } while (0) -#else -#define table_new(table, rows, columns) \ - (table) = gtk_table_new ((rows), (columns), FALSE) -#define table_attach(table, child, left, right,top, xoptions, yoptions, xpadding, ypadding) \ - gtk_table_attach (GTK_TABLE (table), (child), \ - (left), (right), (top), (top + 1), \ - (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 */ -#define gdk_event_get_event_type(event) ((event)->type) -#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 diff --git a/gui.c b/gui.c index d391305f4f51..3068c97c3ba3 100644 --- a/gui.c +++ b/gui.c @@ -36,31 +36,32 @@ * (eg. which network interfaces should be copied and which should be * ignored). * * =item Running dialog * * The running dialog is displayed when the P2V process is underway. * It mainly displays the virt-v2v debug messages. * * =back * * Note that the other major dialog (C<"Configure network ...">) is * handled entirely by NetworkManager's L<nm-connection-editor(1)> * program and has nothing to do with this code. * - * This file is written in a kind of "pseudo-Gtk" which is backwards compatible - * from Gtk 3.0 through at least Gtk 3.22. This is done using a few macros to - * implement old C<gtk_*> functions or map them to newer functions. + * This file is written in a kind of "pseudo-Gtk" that currently targets Gtk + * 3.22 exclusively, but may later be extended to a broader Gtk version range. + * This is done using a few macros to implement old C<gtk_*> functions or map + * them to newer functions. */ #include <config.h> #include <stdio.h> #include <stdlib.h> #include <stdarg.h> #include <string.h> #include <inttypes.h> #include <unistd.h> #include <fcntl.h> #include <errno.h> #include <error.h> #include <locale.h> @@ -81,32 +82,28 @@ #include "ignore-value.h" #include "p2v.h" /* See note about "pseudo-Gtk" above. */ #include "gui-gtk3-compat.h" /* Maximum vCPUs and guest memory that we will allow users to set. * These limits come from * https://access.redhat.com/articles/rhel-kvm-limits */ #define MAX_SUPPORTED_VCPUS 160 #define MAX_SUPPORTED_MEMORY_MB (UINT64_C (4000 * 1024)) -#if GLIB_CHECK_VERSION(2,32,0) && GTK_CHECK_VERSION(3,12,0) /* glib >= 2.32 && gtk >= 3.12 */ -#define USE_POPOVERS -#endif - static void create_connection_dialog (struct config *); static void create_conversion_dialog (struct config *config, const char * const *disks, const char * const *removable); static void create_running_dialog (void); static void show_connection_dialog (void); static void show_conversion_dialog (void); static void show_running_dialog (void); static void set_info_label (void); /* The connection dialog. */ static GtkWidget *conn_dlg, *server_entry, *port_entry, @@ -236,32 +233,30 @@ create_connection_dialog (struct config *config) gtk_entry_set_text (GTK_ENTRY (username_entry), config->auth.username); else gtk_entry_set_text (GTK_ENTRY (username_entry), "root"); table_attach (table, username_entry, 1, 2, row, GTK_EXPAND|GTK_FILL, GTK_FILL, 4, 4); row++; password_label = gtk_label_new_with_mnemonic (_("_Password:")); table_attach (table, password_label, 0, 1, row, GTK_FILL, GTK_FILL, 4, 4); set_alignment (password_label, 1., 0.5); password_entry = gtk_entry_new (); gtk_label_set_mnemonic_widget (GTK_LABEL (password_label), password_entry); gtk_entry_set_visibility (GTK_ENTRY (password_entry), FALSE); -#ifdef GTK_INPUT_PURPOSE_PASSWORD /* guaranteed if gtk >= 3.5.12 */ gtk_entry_set_input_purpose (GTK_ENTRY (password_entry), GTK_INPUT_PURPOSE_PASSWORD); -#endif if (config->auth.password != NULL) gtk_entry_set_text (GTK_ENTRY (password_entry), config->auth.password); table_attach (table, password_entry, 1, 2, row, GTK_EXPAND|GTK_FILL, GTK_FILL, 4, 4); row++; identity_label = gtk_label_new_with_mnemonic (_("SSH _Identity URL:")); table_attach (table, identity_label, 0, 1, row, GTK_FILL, GTK_FILL, 4, 4); set_alignment (identity_label, 1., 0.5); identity_entry = gtk_entry_new (); gtk_label_set_mnemonic_widget (GTK_LABEL (identity_label), identity_entry); if (config->auth.identity.url != NULL) gtk_entry_set_text (GTK_ENTRY (identity_entry), config->auth.identity.url); @@ -1736,186 +1731,141 @@ get_memory_from_conv_dlg (void) else return UINT64_C (1024) * 1024 * 1024; } /*----------------------------------------------------------------------*/ /* Running dialog. */ static gboolean set_log_dir (gpointer remote_dir); static gboolean set_status (gpointer msg); static gboolean add_v2v_output (gpointer msg); static void *start_conversion_thread (void *data); static gboolean conversion_error (gpointer user_data); static gboolean conversion_finished (gpointer user_data); static void cancel_conversion_dialog (GtkWidget *w, gpointer data); -#ifdef USE_POPOVERS static void activate_action (GSimpleAction *action, GVariant *parameter, gpointer user_data); -#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[] = { { .name = "shutdown", .activate = activate_action }, { .name = "reboot", .activate = activate_action }, }; -#endif /** * Create the running dialog. * * This creates the dialog, but it is not displayed. See * C<show_running_dialog>. */ static void create_running_dialog (void) { size_t i; static const char *tags[16] { "black", "maroon", "green", "olive", "navy", "purple", "teal", "silver", "gray", "red", "lime", "yellow", "blue", "fuchsia", "cyan", "white" }; GtkTextBuffer *buf; -#ifdef USE_POPOVERS GMenu *shutdown_menu; GSimpleActionGroup *shutdown_group; -#else - GtkWidget *shutdown_menu; - GtkWidget *shutdown_menu_item; - GtkWidget *reboot_menu_item; -#endif run_dlg = gtk_dialog_new (); gtk_window_set_title (GTK_WINDOW (run_dlg), g_get_prgname ()); gtk_window_set_resizable (GTK_WINDOW (run_dlg), FALSE); /* The main dialog area. */ v2v_output_sw = gtk_scrolled_window_new (NULL, NULL); gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (v2v_output_sw), GTK_POLICY_NEVER, GTK_POLICY_AUTOMATIC); gtk_widget_set_size_request (v2v_output_sw, 700, 400); 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); buf = gtk_text_view_get_buffer (GTK_TEXT_VIEW (v2v_output)); for (i = 0; i < 16; ++i) { CLEANUP_FREE char *tag_name; if (asprintf (&tag_name, "tag_%s", tags[i]) == -1) error (EXIT_FAILURE, errno, "asprintf"); v2v_output_tags[i] gtk_text_buffer_create_tag (buf, tag_name, "foreground", tags[i], NULL); } -#if GTK_CHECK_VERSION(3,16,0) /* gtk >= 3.16 */ /* XXX This only sets the "CSS" style. It's not clear how to set * the particular font. However (by accident) this does at least * set the widget to use a monospace font. */ GtkStyleContext *context = gtk_widget_get_style_context (v2v_output); gtk_style_context_add_class (context, "monospace"); -#else - PangoFontDescription *font; - font = pango_font_description_from_string ("Monospace 11"); - gtk_widget_override_font (v2v_output, font); - pango_font_description_free (font); -#endif log_label = gtk_label_new (NULL); set_alignment (log_label, 0., 0.5); set_padding (log_label, 10, 10); set_log_dir (NULL); status_label = gtk_label_new (NULL); 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_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); /* 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 (); g_action_map_add_action_entries (G_ACTION_MAP (shutdown_group), shutdown_actions, 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); -#endif /* Buttons. */ gtk_dialog_add_buttons (GTK_DIALOG (run_dlg), _("_Cancel conversion ..."), 1, NULL); cancel_button = gtk_dialog_get_widget_for_response (GTK_DIALOG (run_dlg), 1); gtk_widget_set_sensitive (cancel_button, FALSE); -#ifdef USE_POPOVERS shutdown_button = gtk_menu_button_new (); gtk_button_set_use_underline (GTK_BUTTON (shutdown_button), TRUE); gtk_button_set_label (GTK_BUTTON (shutdown_button), _("_Shutdown ...")); gtk_button_set_always_show_image (GTK_BUTTON (shutdown_button), TRUE); gtk_widget_insert_action_group (shutdown_button, "shutdown", G_ACTION_GROUP (shutdown_group)); gtk_menu_button_set_use_popover (GTK_MENU_BUTTON (shutdown_button), TRUE); gtk_menu_button_set_menu_model (GTK_MENU_BUTTON (shutdown_button), G_MENU_MODEL (shutdown_menu)); -#else - shutdown_button = GTK_WIDGET (gtk_menu_tool_button_new (NULL, - _("_Shutdown ..."))); - gtk_tool_button_set_use_underline (GTK_TOOL_BUTTON (shutdown_button), TRUE); - gtk_menu_tool_button_set_menu (GTK_MENU_TOOL_BUTTON (shutdown_button), - shutdown_menu); -#endif gtk_widget_set_sensitive (shutdown_button, FALSE); gtk_dialog_add_action_widget (GTK_DIALOG (run_dlg), shutdown_button, 2); /* Signals. */ g_signal_connect_swapped (G_OBJECT (run_dlg), "delete_event", G_CALLBACK (close_running_dialog), NULL); g_signal_connect_swapped (G_OBJECT (run_dlg), "destroy", G_CALLBACK (gtk_main_quit), NULL); g_signal_connect (G_OBJECT (cancel_button), "clicked", G_CALLBACK (cancel_conversion_dialog), NULL); -#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 } /** * Hide all other dialogs and show the running dialog. */ static void show_running_dialog (void) { /* Hide the other dialogs. */ gtk_widget_hide (conn_dlg); gtk_widget_hide (conv_dlg); /* Show the running dialog. */ gtk_widget_show_all (run_dlg); @@ -2356,48 +2306,37 @@ cancel_conversion_dialog (GtkWidget *w, gpointer data) GTK_DIALOG_DESTROY_WITH_PARENT, GTK_MESSAGE_QUESTION, GTK_BUTTONS_YES_NO, _("Really cancel the conversion? " "To convert this machine you will need to " "re-run the conversion from the beginning.")); gtk_window_set_title (GTK_WINDOW (dlg), _("Cancel the conversion")); if (gtk_dialog_run (GTK_DIALOG (dlg)) == GTK_RESPONSE_YES) /* This makes start_conversion return an error (eventually). */ cancel_conversion (); gtk_widget_destroy (dlg); } -#ifdef USE_POPOVERS 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, "shutdown")) shutdown_clicked (NULL, user_data); else if (STREQ (action_name, "reboot")) reboot_clicked (NULL, user_data); } -#else -static void -shutdown_button_clicked (GtkToolButton *w, gpointer data) -{ - GtkMenu *menu = data; - - gtk_menu_popup (menu, NULL, NULL, NULL, NULL, 1, - gtk_get_current_event_time ()); -} -#endif static void shutdown_clicked (GtkWidget *w, gpointer data) { if (!is_iso_environment) return; sync (); sleep (2); ignore_value (system ("/sbin/poweroff")); } static void reboot_clicked (GtkWidget *w, gpointer data)
Laszlo Ersek
2022-Sep-29 09:55 UTC
[Libguestfs] [p2v PATCH 0/2] restrict supported GLIB2 and GTK3 versions
On 09/28/22 14:06, Laszlo Ersek wrote:> Remove GTK3 compat code that is not needed on RHEL7+. Incorporate > suggestions from Rich and Daniel in the subthread at > <https://listman.redhat.com/archives/libguestfs/2022-September/029940.html>. > > Do not remove "gui-gtk3-compat.h" altogether; I expect we may have to > add in new compat stuff in the future, and having to redo the > infrastructure for that is not a great prospect. > > Laszlo > > Laszlo Ersek (2): > require GLIB2 >= 2.56 and GTK3 >= 3.22; enhance API compatibility > remove old GLIB2 / GTK3 compat code > > Makefile.am | 4 ++ > docs/p2v-building.pod | 6 +- > gui-gtk3-compat.h | 46 ------------- > gui.c | 69 ++------------------ > m4/p2v-libraries.m4 | 5 +- > 5 files changed, 16 insertions(+), 114 deletions(-)Commit range 94f1f9df1994..c213ae00a337. Thanks! Laszlo