qemu-stable
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [PATCH v2] gtk: disable GTK Clipboard with a new meson option


From: Jim Fehlig
Subject: Re: [PATCH v2] gtk: disable GTK Clipboard with a new meson option
Date: Mon, 21 Nov 2022 15:42:08 -0700
User-agent: Mozilla/5.0 (X11; Linux x86_64; rv:102.0) Gecko/20100101 Thunderbird/102.3.0

On 11/21/22 06:55, Claudio Fontana wrote:
The GTK Clipboard implementation may cause guest hangs.

Therefore implement new configure switch: --enable-gtk-clipboard,

as a meson option disabled by default, which warns in the help
text about the experimental nature of the feature.
Regenerate the meson build options to include it.

The initialization of the clipboard is gtk.c, as well as the
compilation of gtk-clipboard.c are now conditional on this new
option to be set.

Resolves: https://gitlab.com/qemu-project/qemu/-/issues/1150
Signed-off-by: Claudio Fontana <cfontana@suse.de>
Acked-by: Gerd Hoffmann <kraxel@redhat.com>
---
  meson.build                   | 5 +++++
  meson_options.txt             | 7 +++++++
  scripts/meson-buildoptions.sh | 3 +++
  ui/gtk.c                      | 2 ++
  ui/meson.build                | 5 ++++-
  5 files changed, 21 insertions(+), 1 deletion(-)

Compile-tested only. Oh, and ensured './configure --help' contained your text 
:-).

Reviewed-by: Jim Fehlig <jfehlig@suse.com>


v1 -> v2:

* fixed a too long line in scripts/meson-buildoptions.sh (checkpatch)

* meson.build: set have_gtk_clipboard variable once, avoid duplication (Jim)

* mention the warnings about experimental nature of the feature in commit

diff --git a/meson.build b/meson.build
index cf3e517e56..5c6b5a1c75 100644
--- a/meson.build
+++ b/meson.build
@@ -1246,6 +1246,8 @@ endif
  gtk = not_found
  gtkx11 = not_found
  vte = not_found
+have_gtk_clipboard = get_option('gtk_clipboard').enabled()
+
  if not get_option('gtk').auto() or have_system
    gtk = dependency('gtk+-3.0', version: '>=3.22.0',
                     method: 'pkg-config',
@@ -1264,6 +1266,8 @@ if not get_option('gtk').auto() or have_system
                         required: get_option('vte'),
                         kwargs: static_kwargs)
      endif
+  elif have_gtk_clipboard
+    error('GTK clipboard requested, but GTK not found')
    endif
  endif
@@ -1842,6 +1846,7 @@ if glusterfs.found()
  endif
  config_host_data.set('CONFIG_GTK', gtk.found())
  config_host_data.set('CONFIG_VTE', vte.found())
+config_host_data.set('CONFIG_GTK_CLIPBOARD', have_gtk_clipboard)
  config_host_data.set('CONFIG_LIBATTR', have_old_libattr)
  config_host_data.set('CONFIG_LIBCAP_NG', libcap_ng.found())
  config_host_data.set('CONFIG_EBPF', libbpf.found())
diff --git a/meson_options.txt b/meson_options.txt
index 66128178bf..4b749ca549 100644
--- a/meson_options.txt
+++ b/meson_options.txt
@@ -219,6 +219,13 @@ option('vnc_sasl', type : 'feature', value : 'auto',
         description: 'SASL authentication for VNC server')
  option('vte', type : 'feature', value : 'auto',
         description: 'vte support for the gtk UI')
+
+# GTK Clipboard implementation is disabled by default, since it may cause hangs
+# of the guest VCPUs. See gitlab issue 1150:
+# https://gitlab.com/qemu-project/qemu/-/issues/1150
+
+option('gtk_clipboard', type: 'feature', value : 'disabled',
+       description: 'clipboard support for the gtk UI (EXPERIMENTAL, MAY 
HANG)')
  option('xkbcommon', type : 'feature', value : 'auto',
         description: 'xkbcommon support')
  option('zstd', type : 'feature', value : 'auto',
diff --git a/scripts/meson-buildoptions.sh b/scripts/meson-buildoptions.sh
index 2cb0de5601..aa6e30ea91 100644
--- a/scripts/meson-buildoptions.sh
+++ b/scripts/meson-buildoptions.sh
@@ -93,6 +93,7 @@ meson_options_help() {
    printf "%s\n" '  glusterfs       Glusterfs block device driver'
    printf "%s\n" '  gnutls          GNUTLS cryptography support'
    printf "%s\n" '  gtk             GTK+ user interface'
+  printf "%s\n" '  gtk-clipboard   clipboard support for GTK (EXPERIMENTAL, 
MAY HANG)'
    printf "%s\n" '  guest-agent     Build QEMU Guest Agent'
    printf "%s\n" '  guest-agent-msi Build MSI package for the QEMU Guest Agent'
    printf "%s\n" '  hax             HAX acceleration support'
@@ -274,6 +275,8 @@ _meson_option_parse() {
      --disable-gprof) printf "%s" -Dgprof=false ;;
      --enable-gtk) printf "%s" -Dgtk=enabled ;;
      --disable-gtk) printf "%s" -Dgtk=disabled ;;
+    --enable-gtk-clipboard) printf "%s" -Dgtk_clipboard=enabled ;;
+    --disable-gtk-clipboard) printf "%s" -Dgtk_clipboard=disabled ;;
      --enable-guest-agent) printf "%s" -Dguest_agent=enabled ;;
      --disable-guest-agent) printf "%s" -Dguest_agent=disabled ;;
      --enable-guest-agent-msi) printf "%s" -Dguest_agent_msi=enabled ;;
diff --git a/ui/gtk.c b/ui/gtk.c
index 7ec21f7798..4817623c8f 100644
--- a/ui/gtk.c
+++ b/ui/gtk.c
@@ -2403,7 +2403,9 @@ static void gtk_display_init(DisplayState *ds, 
DisplayOptions *opts)
          opts->u.gtk.show_tabs) {
          gtk_menu_item_activate(GTK_MENU_ITEM(s->show_tabs_item));
      }
+#ifdef CONFIG_GTK_CLIPBOARD
      gd_clipboard_init(s);
+#endif /* CONFIG_GTK_CLIPBOARD */
  }
static void early_gtk_display_init(DisplayOptions *opts)
diff --git a/ui/meson.build b/ui/meson.build
index ec13949776..c1b137bf33 100644
--- a/ui/meson.build
+++ b/ui/meson.build
@@ -97,7 +97,10 @@ if gtk.found()
    softmmu_ss.add(when: 'CONFIG_WIN32', if_true: files('win32-kbd-hook.c'))
gtk_ss = ss.source_set()
-  gtk_ss.add(gtk, vte, pixman, files('gtk.c', 'gtk-clipboard.c'))
+  gtk_ss.add(gtk, vte, pixman, files('gtk.c'))
+  if have_gtk_clipboard
+    gtk_ss.add(files('gtk-clipboard.c'))
+  endif
    gtk_ss.add(when: x11, if_true: files('x_keymap.c'))
    gtk_ss.add(when: opengl, if_true: files('gtk-gl-area.c'))
    gtk_ss.add(when: [x11, opengl], if_true: files('gtk-egl.c'))




reply via email to

[Prev in Thread] Current Thread [Next in Thread]