| From 82931a1bcb39d5132910c7fb2ddc086c51d06662 Mon Sep 17 00:00:00 2001 |
| From: John Wolfe <jwolfe@vmware.com> |
| Date: Mon, 19 Apr 2021 11:08:10 -0700 |
| Subject: [PATCH] Fix issues using GCC 11 with gtk >= 3.20 and glib >=2.66.3 |
| |
| With glib2.0 releases >= 2.66.3, glib header files inside an |
| extern "C" block will encounter compilation errors. This has |
| impacted several OSS packages. Consumers of newer versions of glib2.0 |
| must not include glib headers in an extern "C" block. |
| |
| GTK 3.20 has deprecated gdk_display_get_device_manager(); using the |
| newer gdk_display_get_default_seat() when the GTK version is >= 3.20. |
| |
| The return value from read() must be used to avoid an unused result |
| warning from the compiler. This can be avoided by using dummy retyping |
| in the case where the return value is not used or in this case, using |
| the returned value in a debug log message. |
| |
| Pull Request: https://github.com/vmware/open-vm-tools/pull/505 |
| Addresses: https://github.com/vmware/open-vm-tools/issues/500 |
| Addresses: https://github.com/vmware/open-vm-tools/issues/509 |
| --- |
| open-vm-tools/AUTHORS | 3 +++ |
| open-vm-tools/lib/include/tracer.hh | 4 +--- |
| .../services/plugins/dndcp/copyPasteUIX11.cpp | 3 ++- |
| .../plugins/dndcp/dndGuest/dndCPTransportGuestRpc.hpp | 6 +++--- |
| open-vm-tools/services/plugins/dndcp/dndUIX11.cpp | 11 +++++++++-- |
| open-vm-tools/services/plugins/dndcp/dndcp.cpp | 7 ++++++- |
| 6 files changed, 24 insertions(+), 10 deletions(-) |
| |
| diff --git a/open-vm-tools/lib/include/tracer.hh b/open-vm-tools/lib/include/tracer.hh |
| index 697caedbc..e9ae892cb 100644 |
| --- a/open-vm-tools/lib/include/tracer.hh |
| +++ b/open-vm-tools/lib/include/tracer.hh |
| @@ -1,5 +1,5 @@ |
| /********************************************************* |
| - * Copyright (C) 2013-2017 VMware, Inc. All rights reserved. |
| + * Copyright (C) 2013-2017,2021 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 |
| @@ -28,9 +28,7 @@ |
| |
| #include "vm_basic_defs.h" |
| |
| -extern "C" { |
| #include "glib.h" |
| -} |
| |
| |
| #ifdef VMX86_DEVEL |
| diff --git a/open-vm-tools/services/plugins/dndcp/copyPasteUIX11.cpp b/open-vm-tools/services/plugins/dndcp/copyPasteUIX11.cpp |
| index 68212ab8b..080dc3d76 100644 |
| --- a/open-vm-tools/services/plugins/dndcp/copyPasteUIX11.cpp |
| +++ b/open-vm-tools/services/plugins/dndcp/copyPasteUIX11.cpp |
| @@ -1,5 +1,5 @@ |
| /********************************************************* |
| - * Copyright (C) 2009-2020 VMware, Inc. All rights reserved. |
| + * Copyright (C) 2009-2021 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 |
| @@ -1666,6 +1666,7 @@ CopyPasteUIX11::FileBlockMonitorThread(void *arg) // IN |
| char buf[sizeof(VMBLOCK_FUSE_READ_RESPONSE)]; |
| ssize_t size; |
| size = read(fd, buf, sizeof(VMBLOCK_FUSE_READ_RESPONSE)); |
| + g_debug("%s: Number of bytes read : %" FMTSZ "u\n", __FUNCTION__, size); |
| /* |
| * The current thread will block in read function until |
| * any other application accesses the file params->fileBlockName |
| diff --git a/open-vm-tools/services/plugins/dndcp/dndGuest/dndCPTransportGuestRpc.hpp b/open-vm-tools/services/plugins/dndcp/dndGuest/dndCPTransportGuestRpc.hpp |
| index 9b70984fc..424481baa 100644 |
| --- a/open-vm-tools/services/plugins/dndcp/dndGuest/dndCPTransportGuestRpc.hpp |
| +++ b/open-vm-tools/services/plugins/dndcp/dndGuest/dndCPTransportGuestRpc.hpp |
| @@ -1,5 +1,5 @@ |
| /********************************************************* |
| - * Copyright (C) 2010-2017 VMware, Inc. All rights reserved. |
| + * Copyright (C) 2010-2017,2021 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 |
| @@ -31,13 +31,13 @@ |
| |
| #include "dnd.h" |
| |
| -extern "C" { |
| #ifdef VMX86_TOOLS |
| #include "vmware/tools/guestrpc.h" |
| #else |
| +extern "C" { |
| #include "guest_rpc.h" |
| -#endif |
| } |
| +#endif |
| |
| #define GUEST_RPC_CMD_STR_DND "dnd.transport" |
| #define GUEST_RPC_CMD_STR_CP "copypaste.transport" |
| diff --git a/open-vm-tools/services/plugins/dndcp/dndUIX11.cpp b/open-vm-tools/services/plugins/dndcp/dndUIX11.cpp |
| index 50c2bf5e1..03cf3e0d7 100644 |
| --- a/open-vm-tools/services/plugins/dndcp/dndUIX11.cpp |
| +++ b/open-vm-tools/services/plugins/dndcp/dndUIX11.cpp |
| @@ -1,5 +1,5 @@ |
| /********************************************************* |
| - * Copyright (C) 2009-2019 VMware, Inc. All rights reserved. |
| + * Copyright (C) 2009-2021 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 |
| @@ -467,8 +467,15 @@ DnDUIX11::OnSrcDragBegin(const CPClipboard *clip, // IN |
| #ifndef GTK3 |
| event.device = gdk_device_get_core_pointer(); |
| #else |
| - GdkDeviceManager* manager = gdk_display_get_device_manager(gdk_window_get_display(event.window)); |
| +# if GTK_MINOR_VERSION >= 20 |
| + GdkSeat *seat = |
| + gdk_display_get_default_seat(gdk_window_get_display(event.window)); |
| + event.device = gdk_seat_get_pointer(seat); |
| +# else |
| + GdkDeviceManager *manager = |
| + gdk_display_get_device_manager(gdk_window_get_display(event.window)); |
| event.device = gdk_device_manager_get_client_pointer(manager); |
| +# endif |
| #endif |
| event.x_root = mOrigin.get_x(); |
| event.y_root = mOrigin.get_y(); |
| diff --git a/open-vm-tools/services/plugins/dndcp/dndcp.cpp b/open-vm-tools/services/plugins/dndcp/dndcp.cpp |
| index d1013f4a7..bae4c94c7 100644 |
| --- a/open-vm-tools/services/plugins/dndcp/dndcp.cpp |
| +++ b/open-vm-tools/services/plugins/dndcp/dndcp.cpp |
| @@ -1,5 +1,5 @@ |
| /********************************************************* |
| - * Copyright (C) 2010-2019 VMware, Inc. All rights reserved. |
| + * Copyright (C) 2010-2021 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 |
| @@ -31,6 +31,11 @@ |
| |
| #define G_LOG_DOMAIN "dndcp" |
| |
| +/** |
| + * Include glib.h before encountering any extern "C". |
| + */ |
| +#include <glib.h> |
| + |
| extern "C" { |
| #include "vmware/guestrpc/tclodefs.h" |
| #include "vmware/tools/plugin.h" |