summaryrefslogtreecommitdiff
blob: b04342c3f68e4079df8ca37d7093338d87827dff (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
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"