*/
#define G_LOG_DOMAIN "dndcp"
+#define VMTOOLS_USE_LEGACY_GTK
#include "copyPasteDnDWrapper.h"
#include "copyPasteDnDX11.h"
-#include "dndPluginIntX11.h"
#include "copyPasteUIX11.h"
#include "tracer.hh"
+#include "dndPluginIntX11.h"
Window gXRoot;
Display *gXDisplay;
* Constructor.
*/
+
+#ifdef VMTOOLS_USE_LEGACY_GTK
CopyPasteDnDX11::CopyPasteDnDX11() :
m_main(NULL),
m_copyPasteUI(NULL),
m_dndUI(NULL)
{
}
+#endif
/**
CopyPasteDnDWrapper *wrapper = CopyPasteDnDWrapper::GetInstance();
ASSERT(ctx);
+
+#ifdef VMTOOLS_USE_LEGACY_GTK
int argc = 1;
const char *argv[] = {"", NULL};
m_main = new Gtk::Main(&argc, (char ***) &argv, false);
+#endif
+
if (wrapper) {
BlockService::GetInstance()->Init(ctx);
}
+
+#ifdef VMTOOLS_USE_LEGACY_GTK
gUserMainWidget = gtk_invisible_new();
#ifndef GTK3
gXDisplay = GDK_WINDOW_XDISPLAY(gUserMainWidget->window);
gXDisplay = GDK_WINDOW_XDISPLAY(gtk_widget_get_window(gUserMainWidget));
#endif
gXRoot = RootWindow(gXDisplay, DefaultScreen(gXDisplay));
+#endif
/*
* Register legacy (backdoor) version of copy paste.
CopyPasteDnDX11::~CopyPasteDnDX11()
{
- if (m_copyPasteUI) {
- delete m_copyPasteUI;
- }
- if (m_dndUI) {
- delete m_dndUI;
- }
- if (m_main) {
- delete m_main;
- }
+ delete m_copyPasteUI;
+
+#ifdef VMTOOLS_USE_LEGACY_GTK
+ delete m_dndUI;
+ delete m_main;
+#endif
/*
* Legacy CP.
CopyPaste_Unregister(gUserMainWidget);
if (gUserMainWidget) {
- gtk_widget_destroy(gUserMainWidget);
+
+#ifdef VMTOOLS_USE_LEGACY_GTK
+ gtk_widget_destroy(gUserMainWidget);
+#endif
+
}
}
TRACE_CALL();
CopyPasteDnDWrapper *wrapper = CopyPasteDnDWrapper::GetInstance();
+
+#ifdef VMTOOLS_USE_LEGACY_GTK
if (!wrapper->IsDnDEnabled()) {
return FALSE;
}
g_debug("%s: dnd is registered? %d\n", __FUNCTION__, (int) wrapper->IsDnDRegistered());
return wrapper->IsDnDRegistered();
+#endif
}
TRACE_CALL();
CopyPasteDnDWrapper *wrapper = CopyPasteDnDWrapper::GetInstance();
if (wrapper->IsCPRegistered()) {
- if (m_copyPasteUI) {
- delete m_copyPasteUI;
- m_copyPasteUI = NULL;
- }
+ delete m_copyPasteUI;
wrapper->SetCPIsRegistered(FALSE);
wrapper->SetCPVersion(-1);
}
TRACE_CALL();
CopyPasteDnDWrapper *wrapper = CopyPasteDnDWrapper::GetInstance();
if (wrapper->IsDnDRegistered()) {
- if (m_dndUI) {
- delete m_dndUI;
- m_dndUI = NULL;
- }
+
+#ifdef VMTOOLS_USE_LEGACY_GTK
+ delete m_dndUI;
+#endif
+
wrapper->SetDnDIsRegistered(false);
wrapper->SetDnDVersion(-1);
return;
void
CopyPasteDnDX11::SetDnDAllowed(bool allowed)
{
+#ifdef VMTOOLS_USE_LEGACY_GTK
ASSERT(m_dndUI);
TRACE_CALL();
m_dndUI->SetDnDAllowed(allowed);
+#endif
}
g_debug("%s: calling VmxDnDVersionChanged (version %d)\n",
__FUNCTION__, version);
ASSERT(ctx);
+#ifdef VMTOOLS_USE_LEGACY_GTK
ASSERT(m_dndUI);
m_dndUI->VmxDnDVersionChanged(ctx->rpc, version);
+#endif
}
/*********************************************************
- * Copyright (c) 2009-2021 VMware, Inc. All rights reserved.
+ * Copyright (c) 2009-2025 Broadcom. All Rights Reserved.
+ * The term "Broadcom" refers to Broadcom Inc. and/or its subsidiaries.
*
* 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
/*********************************************************
- * Copyright (c) 2009-2018 VMware, Inc. All rights reserved.
+ * Copyright (c) 2009-2025 Broadcom. All Rights Reserved.
+ * The term "Broadcom" refers to Broadcom Inc. and/or its subsidiaries.
*
* 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
/*
* Make sure exception types are public and therefore shared between libg*mm
- * and this plugin.
+ * and this plugin.
*
* See
* http://gcc.gnu.org/wiki/Visibility#Problems_with_C.2B-.2B-_exceptions_.28please_read.21.29
#include <X11/Xlib.h>
#include <gtk/gtk.h>
+
+#define VMTOOLS_USE_LEGACY_GTK
+
+#ifdef VMTOOLS_USE_LEGACY_GTK
#include <gdk/gdkx.h>
+#endif
+
#include "vmware/guestrpc/tclodefs.h"
class CopyPasteUIX11;
/* hg */
void GetRemoteClipboardCB(const CPClipboard *clip);
- void RemoteGetFilesDone(void);
+
+#ifdef VMTOOLS_USE_LEGACY_GTK
void LocalGetFileRequestCB(Gtk::SelectionData& selection_data, guint info);
void LocalGetTextOrRTFRequestCB(Gtk::SelectionData& sd, guint info);
void LocalGetSelectionFileList(const Gtk::SelectionData& sd);
void LocalGetFileContentsRequestCB(Gtk::SelectionData& sd, guint info);
void LocalClearClipboardCB(void);
+#endif
/* gh */
void GetLocalClipboard(void);
+#ifdef VMTOOLS_USE_LEGACY_GTK
void LocalClipboardTimestampCB(const Gtk::SelectionData& sd);
void LocalPrimTimestampCB(const Gtk::SelectionData& sd);
void LocalReceivedFileListCB(const Gtk::SelectionData& selection_data);
+ bool LocalPrepareFileContents(const CPClipboard *clip);
+#endif
void GetLocalFilesDone(bool success);
void SendClipNotChanged(void);
/* Conversion methods. */
utf::utf8string GetNextPath(utf::utf8string &str, size_t& index);
utf::string GetLastDirName(const utf::string &str);
- bool LocalPrepareFileContents(const CPClipboard *clip);
VmTimeType GetCurrentTime(void);
GuestCopyPasteMgr *mCP;
bool mClipboardEmpty;
utf::string mHGStagingDir;
+#ifdef VMTOOLS_USE_LEGACY_GTK
std::vector<Gtk::TargetEntry> mListTargets;
+ GdkAtom mGHSelection;
bool mIsClipboardOwner;
uint64 mClipTime;
uint64 mPrimTime;
uint64 mLastTimestamp;
- GdkAtom mGHSelection;
+#endif
CPClipboard mClipboard;
ThreadParams mThreadParams;
pthread_t mThread;
/* File vars. */
VmTimeType mHGGetListTime;
- utf::string mHGCopiedUriList;
utf::utf8string mHGFCPData;
+
+#ifdef VMTOOLS_USE_LEGACY_GTK
+ utf::string mHGCopiedUriList;
utf::string mHGTextData;
std::string mHGRTFData;
+ bool mGetTimestampOnly;
std::vector<utf::string> mHGFileContentsList;
+#endif
+
DND_FILE_TRANSFER_STATUS mHGGetFileStatus;
bool mBlockAdded;
DnDBlockControl *mBlockCtrl;
bool mInited;
uint64 mTotalFileSize;
- bool mGetTimestampOnly;
};
#endif // __COPYPASTE_UI_X11_H__
/*********************************************************
- * Copyright (c) 2005-2024 Broadcom. All Rights Reserved.
+ * Copyright (c) 2005-2025 Broadcom. All Rights Reserved.
* The term "Broadcom" refers to Broadcom Inc. and/or its subsidiaries.
*
* This program is free software; you can redistribute it and/or modify it
#define FCP_TARGET_INFO_URI_LIST 1
/* FCP target used for nautilus 3.30 or later. */
#define FCP_TARGET_NAME_NAUTILUS_FILES "UTF8_STRING"
+#define FCP_TARGET_NAME_NAUTILUS_GTK4_UTF8 "text/plain;charset=utf-8"
#define FCP_TARGET_MIME_NAUTILUS_FILES "x-special/nautilus-clipboard"
#define FCP_TARGET_INFO_NAUTILUS_FILES 2
/* Number of FCP targets. */
#define TARGET_NAME_TIMESTAMP "TIMESTAMP"
#define TARGET_NAME_STRING "STRING"
#define TARGET_NAME_TEXT_PLAIN "text/plain"
+#define TARGET_NAME_TEXT_PLAIN_UTF8 "text/plain;charset=utf-8"
#define TARGET_NAME_UTF8_STRING "UTF8_STRING"
#define TARGET_NAME_COMPOUND_TEXT "COMPOUND_TEXT"
#define TARGET_NAME_APPLICATION_RTF "application/rtf"
#ifndef __COPYPASTEDNDX11_H__
#define __COPYPASTEDNDX11_H__
+#define VMTOOLS_USE_LEGACY_GTK
+
+
#include "dnd.h" /* for DnDBlockControl */
+
+#ifdef VMTOOLS_USE_LEGACY_GTK
#include "dndUIX11.h"
+#endif
+
#include <gtk/gtk.h>
#include "vm_basic_types.h"
#include "copyPasteDnDImpl.h"
virtual void DnDVersionChanged(int version);
virtual void CopyPasteVersionChanged(int version);
virtual uint32 GetCaps();
+#ifdef VMTOOLS_USE_LEGACY_GTK
void SetUnityMode(Bool mode) {m_dndUI->SetUnityMode(mode);};
+#endif
void SetDnDAllowed(bool allowed);
void SetCopyPasteAllowed(bool allowed);
private:
+
+#ifdef VMTOOLS_USE_LEGACY_GTK
Gtk::Main *m_main;
CopyPasteUIX11 *m_copyPasteUI;
DnDUIX11 *m_dndUI;
+#endif
};
#endif // __COPYPASTEDNDX11_H__
#ifndef __DND_UI_X11_H__
#define __DND_UI_X11_H__
+#define VMTOOLS_USE_LEGACY_GTK
+
+
#include "stringxx/string.hh"
#include "dnd.h"
#include "str.h"
/*
* Gtk+ Callbacks: Drag Destination.
*/
+#ifdef VMTOOLS_USE_LEGACY_GTK
void OnGtkDragDataReceived(const Glib::RefPtr<Gdk::DragContext> &dc,
int x, int y, const Gtk::SelectionData &sd,
guint info, guint time);
*/
void SourceDragStartDone();
void SourceUpdateFeedback(DND_DROPEFFECT effect);
+#endif /* end VMTOOLS_USE_LEGACY_GTK */
/*
* Target function for GH DnD. Makes call to common layer.
*/
#ifndef __DNDPLUGIN_INTX11_H__
#define __DNDPLUGIN_INTX11_H__
+#define VMTOOLS_USE_LEGACY_GTK
+
+
#include <X11/Xlib.h>
#include <gtk/gtk.h>
+
+#ifdef VMTOOLS_USE_LEGACY_GTK
#include <gdk/gdkx.h>
+#endif
+
#undef Bool
#include "vm_basic_types.h"
#include "dnd.h"
#define G_LOG_DOMAIN "dndcp"
+#define VMTOOLS_USE_LEGACY_GTK
+
+
+#ifdef VMTOOLS_USE_LEGACY_GTK
+/* TODO: support xutils with GTK4 */
#include "xutils/xutils.hh"
+#endif
#include "dndUIX11.h"
#include "guestDnDCPMgr.hh"
extern "C" {
#include <X11/extensions/XTest.h> /* for XTest*() */
#include <gtk/gtk.h>
+#ifdef VMTOOLS_USE_LEGACY_GTK
#include <gdk/gdkx.h>
+#endif
+
#include <X11/Xatom.h>
#include "vmware/guestrpc/tclodefs.h"
{
TRACE_CALL();
+#ifdef VMTOOLS_USE_LEGACY_GTK
xutils::Init();
xutils::workAreaChanged.connect(sigc::mem_fun(this, &DnDUIX11::OnWorkAreaChanged));
+#endif
/*
* XXX Hard coded use of default screen means this doesn't work in dual-
{
TRACE_CALL();
+#ifdef VMTOOLS_USE_LEGACY_GTK
std::vector<unsigned long> values;
if (xutils::GetCardinalList(screen->get_root_window(), "_NET_WORKAREA", values)
&& values.size() > 0
mOrigin.set_x(0);
mOrigin.set_y(0);
}
+#endif
g_debug("%s: new origin at (%d, %d)\n", __FUNCTION__, mOrigin.get_x(),
mOrigin.get_y());