[arch-commits] Commit in open-vm-tools/trunk (2 files)

Christian Hesse eworm at archlinux.org
Fri Feb 9 06:48:33 UTC 2018


    Date: Friday, February 9, 2018 @ 06:48:32
  Author: eworm
Revision: 290428

upgpkg: open-vm-tools 6:10.2.0-2

Set X11 as the backend for gtk3 of open-vm-tools (FS#57425)

Added:
  open-vm-tools/trunk/0001-Set-X11-as-the-backend-for-gtk3-of-open-vm-tools.patch
Modified:
  open-vm-tools/trunk/PKGBUILD

-------------------------------------------------------------+
 0001-Set-X11-as-the-backend-for-gtk3-of-open-vm-tools.patch |   83 ++++++++++
 PKGBUILD                                                    |   23 +-
 2 files changed, 99 insertions(+), 7 deletions(-)

Added: 0001-Set-X11-as-the-backend-for-gtk3-of-open-vm-tools.patch
===================================================================
--- 0001-Set-X11-as-the-backend-for-gtk3-of-open-vm-tools.patch	                        (rev 0)
+++ 0001-Set-X11-as-the-backend-for-gtk3-of-open-vm-tools.patch	2018-02-09 06:48:32 UTC (rev 290428)
@@ -0,0 +1,83 @@
+From c5bc784da611ee929e0da7c20a410e03e6540613 Mon Sep 17 00:00:00 2001
+From: Oliver Kurth <okurth at vmware.com>
+Date: Fri, 26 Jan 2018 15:04:36 -0800
+Subject: [PATCH] Set X11 as the backend for gtk3 of open-vm-tools
+
+Open-vm-tools defaults to gtk3.  For distros like Fedora 27, Wayland is
+the default display server.  With no restriction on the backend, plugins
+will try to use Wayland as the backend of Gtk+3.  As a result,
+gdk_display_get_default() returns a Wayland display;
+gdk_display_get_default_group() also returns a Wayland window.  Applying
+GDK_WINDOW_XID() on the Wayland window will result in the crash reported
+on recent Linux releases that default to a Wayland display server.
+
+As X11-specific code is widely used in tools plugins, a migratation to
+Wayland in the short term is not possible.  So, as a compromised solution,
+plugins can be forced to run on XWayland, which is the compatible mode
+of Wayland for legacy X11 clients.
+
+gdk_set_allowed_backends() only applies when flag GTK3 is defined, and Gtk
+version cwgreater than 3.10.
+---
+ open-vm-tools/services/plugins/desktopEvents/x11Lock.c   | 12 +++++++++++-
+ open-vm-tools/services/plugins/dndcp/copyPasteDnDX11.cpp | 14 +++++++++++++-
+ 2 files changed, 24 insertions(+), 2 deletions(-)
+
+diff --git a/open-vm-tools/services/plugins/desktopEvents/x11Lock.c b/open-vm-tools/services/plugins/desktopEvents/x11Lock.c
+index 572234ac..613b6946 100644
+--- a/open-vm-tools/services/plugins/desktopEvents/x11Lock.c
++++ b/open-vm-tools/services/plugins/desktopEvents/x11Lock.c
+@@ -1,5 +1,5 @@
+ /*********************************************************
+- * Copyright (C) 2010-2016 VMware, Inc. All rights reserved.
++ * Copyright (C) 2010-2018 VMware, Inc. All rights reserved.
+  *
+  * This program is free software; you can redistribute it and/or modify it
+  * under the terms of the GNU Lesser General Public License as published
+@@ -364,6 +364,16 @@ X11Lock_Init(ToolsAppCtx *ctx,
+    g_set_prgname(VMUSER_TITLE);
+    argv[0] = VMUSER_TITLE;
+ 
++#if GTK_MAJOR_VERSION > 3 || (GTK_MAJOR_VERSION == 3 && GTK_MINOR_VERSION >= 10)
++   /*
++    * On recent distros, Wayland is the default display server. If the obtained
++    * display or window is a wayland one, applying X11 specific functions on them
++    * will result in crashes. Before migrating the X11 specific code to Wayland,
++    * force using X11 as the backend of Gtk+3. gdk_set_allowed_backends() is
++    * introduced since Gtk+3.10 and Wayland is supported from Gtk+3.10.
++    */
++   gdk_set_allowed_backends("x11");
++#endif
+    /* XXX: is calling gtk_init() multiple times safe? */
+    gtk_init(&argc, (char ***) &argv);
+ 
+diff --git a/open-vm-tools/services/plugins/dndcp/copyPasteDnDX11.cpp b/open-vm-tools/services/plugins/dndcp/copyPasteDnDX11.cpp
+index fffdc402..4c2f3d8d 100644
+--- a/open-vm-tools/services/plugins/dndcp/copyPasteDnDX11.cpp
++++ b/open-vm-tools/services/plugins/dndcp/copyPasteDnDX11.cpp
+@@ -1,5 +1,5 @@
+ /*********************************************************
+- * Copyright (C) 2010-2016 VMware, Inc. All rights reserved.
++ * Copyright (C) 2010-2018 VMware, Inc. All rights reserved.
+  *
+  * This program is free software; you can redistribute it and/or modify it
+  * under the terms of the GNU Lesser General Public License as published
+@@ -211,6 +211,18 @@ gboolean
+ CopyPasteDnDX11::Init(ToolsAppCtx *ctx)
+ {
+    TRACE_CALL();
++
++#if GTK_MAJOR_VERSION > 3 || (GTK_MAJOR_VERSION == 3 && GTK_MINOR_VERSION >= 10)
++   /*
++    * On recent distros, Wayland is the default display server. If the obtained
++    * display or window is a wayland one, applying X11 specific functions on them
++    * will result in crashes. Before migrating the X11 specific code to Wayland,
++    * force using X11 as the backend of Gtk+3. gdk_set_allowed_backends() is
++    * introduced since Gtk+3.10 and Wayland is supported from Gtk+3.10.
++    */
++   gdk_set_allowed_backends("x11");
++#endif
++
+    CopyPasteDnDWrapper *wrapper = CopyPasteDnDWrapper::GetInstance();
+ 
+    ASSERT(ctx);

Modified: PKGBUILD
===================================================================
--- PKGBUILD	2018-02-08 23:51:17 UTC (rev 290427)
+++ PKGBUILD	2018-02-09 06:48:32 UTC (rev 290428)
@@ -5,29 +5,38 @@
 pkgname=open-vm-tools
 epoch=6
 pkgver=10.2.0
-pkgrel=1
+pkgrel=2
 pkgdesc='The Open Virtual Machine Tools (open-vm-tools) are the open source implementation of VMware Tools'
 arch=('x86_64')
 url='https://github.com/vmware/open-vm-tools'
 license=('LGPL')
 depends=('libdnet' 'icu' 'procps-ng' 'uriparser' 'libsigc++' 'libxss'
-	 'iproute2' 'fuse2' 'lsb-release' 'libmspack')
+         'iproute2' 'fuse2' 'lsb-release' 'libmspack')
 makedepends=('chrpath' 'doxygen' 'gtkmm3' 'libxtst' 'python')
 optdepends=('gtkmm3: DnD/CP plugin'
-	    'libxtst: DnD/CP, resolution set plugins'
-	    'netctl: suspend-resume network state'
-	    'networkmanager: suspend-resume network state')
+            'libxtst: DnD/CP, resolution set plugins'
+            'netctl: suspend-resume network state'
+            'networkmanager: suspend-resume network state')
 backup=('etc/xdg/autostart/vmware-user.desktop')
 options=('docs')
 source=("$pkgname-$pkgver.tar.gz::https://github.com/vmware/open-vm-tools/archive/stable-${pkgver/_/-}.tar.gz"
-	'vmtoolsd.service'
-	'vmware-vmblock-fuse.service')
+        '0001-Set-X11-as-the-backend-for-gtk3-of-open-vm-tools.patch'
+        'vmtoolsd.service'
+        'vmware-vmblock-fuse.service')
 sha256sums=('40dccff0630034b4985ac7a0d3bfcf89025e9a57f518e561db8c6fd7322bf029'
+            '0adad94c3cdd748e8b809456972f9248412265cd4c2edec9391d977232330b32'
             '5a9403f78356873258521644068f2c9639b994d5954e5ad953934136822b2689'
             '99e3cc1da20a751049144cc02dec77174a55109b5b5960e1facd78709da7724f')
 
+prepare() {
+  cd "$srcdir/$pkgname-"*"/open-vm-tools"
+
+  patch -Np2 < "${srcdir}"/0001-Set-X11-as-the-backend-for-gtk3-of-open-vm-tools.patch
+}
+
 build() {
   cd "$srcdir/$pkgname-"*"/open-vm-tools"
+
   autoreconf -vi
   sh ./configure --prefix=/usr \
     --sbindir=/usr/bin \



More information about the arch-commits mailing list