98
98
size_t argsSize, void *clientData);
99
99
void VMwareUserRpcInErrorCB (void *clientdata, char const *status);
102
extern Bool ForeignTools_Initialize(GuestApp_Dict *configDictionaryParam,
103
DblLnkLst_Links *eventQueue);
104
extern void ForeignTools_Shutdown(void);
107
101
static Bool InitGroupLeader(Window *groupLeader, Window *rootWindow);
108
102
static Bool AcquireDisplayLock(void);
109
103
static Bool QueryX11Lock(Display *dpy, Window w, Atom lockAtom);
110
104
static void ReloadSelf(void);
111
105
static void VMwareUserRegisterCopyPaste(bool reg);
106
static void VMwareUserRegisterDnD(bool reg);
199
194
FoundryToolsDaemon_UnregisterOpenUrl();
200
195
gOpenUrlRegistered = FALSE;
202
if (gDnDRegistered) {
203
DnD_Unregister(gHGWnd, gGHWnd);
204
gDnDRegistered = FALSE;
207
198
CopyPasteDnDWrapper *p = CopyPasteDnDWrapper::GetInstance();
208
if (p && p->IsRegistered()) {
211
203
RpcIn_Destruct(gRpcIn);
372
364
VMwareUserRpcInResetCB(RpcInData *data) // IN/OUT
374
366
Debug("----------toolbox: Received 'reset' from vmware\n");
375
if (gDnDRegistered) {
376
DnD_OnReset(gHGWnd, gGHWnd);
378
367
CopyPasteDnDWrapper *p = CopyPasteDnDWrapper::GetInstance();
440
429
FoundryToolsDaemon_RegisterOpenUrlCapability();
442
if (!gDnDRegistered) {
443
gDnDRegistered = DnD_Register(gHGWnd, gGHWnd);
444
if (gDnDRegistered) {
446
state.detWnd = gGHWnd;
447
state.setMode = DnD_SetMode;
448
Unity_SetActiveDnDDetWnd(&state);
450
} else if (DnD_GetVmxDnDVersion() > 1) {
451
if (!DnD_RegisterCapability()) {
452
DnD_Unregister(gHGWnd, gGHWnd);
453
gDnDRegistered = FALSE;
432
VMwareUserRegisterDnD(TRUE);
457
433
VMwareUserRegisterCopyPaste(TRUE);
459
435
if (!HgfsServerManager_CapReg(TOOLS_DND_NAME, gHgfsServerRegistered)) {
473
449
* VMwareUserRegisterCopyPaste
475
451
* Call the CopyPasteDnDWrapper singleton to register, or unregister,
476
* copy and paste with the host. The wrapper class will try whatever
477
* versions are supported, in highest to lowest order when registering.
452
* copy and paste with the host. The wrapper class will try
453
* whatever versions are supported, in highest to lowest order when
493
470
p->SetUserData(static_cast<void *>(gUserMainWidget));
481
*-----------------------------------------------------------------------------
483
* VMwareUserRegisterDnD
485
* Call the CopyPasteDnDWrapper singleton to register, or unregister,
486
* drag and drop with the host. The wrapper class will try
487
* whatever versions are supported, in highest to lowest order when
494
* Drag and drop capabilities will be (un)registered.
496
*-----------------------------------------------------------------------------
500
VMwareUserRegisterDnD(bool reg) // IN: if TRUE, register, else unregister
502
CopyPasteDnDWrapper *p = CopyPasteDnDWrapper::GetInstance();
504
p->SetUserData(static_cast<void *>(gUserMainWidget));
505
p->SetEventQueue(gEventQueue);
803
812
* blocking driver if it is not root. If guestd autostarts vmware-user,
804
813
* guestd will first initialize it and pass block fd in with -blockFd.
806
if (index + 1 == argc) {
815
if (++index >= argc) {
807
816
Warning("The \""OPTION_BLOCK_FD"\" option on the command line requires an "
812
if (!StrUtil_StrToInt(&gBlockFd, argv[index])) {
820
if (!StrUtil_StrToInt(&blockFd, argv[index])) {
813
821
Warning("The \""OPTION_BLOCK_FD"\" option on the command line requires a "
814
822
"valid integer.\n");
817
Debug("vmware-user got blockFd = %d\n", gBlockFd);
825
Debug("vmware-user got blockFd = %d\n", blockFd);
819
827
Warning("Invalid \"%s\" option on the command line.\n", argv[index]);
833
* vmware-user runs as current active account, and can not initialize blocking
834
* driver if it is not root. If guestd autostarts vmware-user, guestd will first
835
* initialize it and pass block fd in. If manually run vmware-user, here will
836
* try to initialize the blocking driver.
838
usingBlock = blockFd >= 0 ?
839
DnD_CompleteBlockInitialization(blockFd, &gBlockCtrl) :
840
DnD_InitializeBlocking(&gBlockCtrl);
843
Debug("%s: vmware-user failed to initialize blocking driver.\n",
824
847
if (Signal_SetGroupHandler(gSignals, olds, ARRAYSIZE(gSignals),
825
848
VMwareUserSignalHandler) == 0 ) {
826
849
Panic("vmware-user can't set signal handler\n");
851
874
Debug_EnableToFile(NULL, FALSE);
855
* vmware-user runs as current active account, and can not initialize blocking
856
* driver if it is not root. If guestd autostarts vmware-user, guestd will first
857
* initialize it and pass block fd in. If manually run vmware-user, here will
858
* try to initialize the blocking driver.
862
gBlockFd = DnD_InitializeBlocking();
864
Debug("%s: vmware-user failed to initialize blocking driver.\n",
869
877
gUserMainWidget = VMwareUser_CreateWindow();
871
CopyPasteDnDWrapper *p = CopyPasteDnDWrapper::GetInstance();
873
p->SetUserData(static_cast<void *>(gUserMainWidget));
874
p->SetBlockFd(gBlockFd);
877
879
gHGWnd = VMwareUser_CreateWindow();
878
880
gGHWnd = VMwareUser_CreateWindow();
893
895
return EXIT_FAILURE;
896
if (runningInForeignVM) {
897
Bool success = ForeignTools_Initialize(confDict, gEventQueue);
898
CopyPasteDnDWrapper *p = CopyPasteDnDWrapper::GetInstance();
900
p->SetUserData(static_cast<void *>(gUserMainWidget));
901
p->SetBlockControl(&gBlockCtrl);
902
p->SetEventQueue(gEventQueue);
903
907
EventManager_Add(gEventQueue, CONF_POLL_TIME, VMwareUserConfFileLoop,
975
/* XXX Refactor this. */
976
979
if (gYieldBlock) {
977
Debug("Yielding vmblock descriptor.\n");
978
if (gDnDRegistered) {
979
DnD_Unregister(gHGWnd, gGHWnd);
980
gDnDRegistered = FALSE;
982
980
CopyPasteDnDWrapper *p = CopyPasteDnDWrapper::GetInstance();
986
if (gBlockFd >= 0 && !DnD_UninitializeBlocking(gBlockFd)) {
986
if (DnD_BlockIsReady(&gBlockCtrl) &&
987
!DnD_UninitializeBlocking(&gBlockCtrl)) {
987
988
Debug("vmware-user failed to uninitialize blocking.\n");
990
990
gYieldBlock = FALSE;
994
if (runningInForeignVM) {
995
ForeignTools_Shutdown();
998
994
Signal_ResetGroupHandler(gSignals, olds, ARRAYSIZE(gSignals));
1000
if (gBlockFd >= 0 && !DnD_UninitializeBlocking(gBlockFd)) {
996
if (DnD_BlockIsReady(&gBlockCtrl) &&
997
!DnD_UninitializeBlocking(&gBlockCtrl)) {
1001
998
Debug("vmware-user failed to uninitialize blocking.\n");