diff --git a/hw/xwin/winclipboard.h b/hw/xwin/winclipboard.h index 2d1b508d9..fcda6bfa0 100644 --- a/hw/xwin/winclipboard.h +++ b/hw/xwin/winclipboard.h @@ -107,6 +107,12 @@ BOOL winClipboardFlushWindowsMessageQueue(HWND hwnd); LRESULT CALLBACK winClipboardWindowProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam); +typedef struct +{ + Display *pClipboardDisplay; + Window iClipboardWindow; +} ClipboardWindowCreationParams; + /* * winclipboardxevents.c */ diff --git a/hw/xwin/winclipboardthread.c b/hw/xwin/winclipboardthread.c index 0bffd44d2..f9089ffc0 100644 --- a/hw/xwin/winclipboardthread.c +++ b/hw/xwin/winclipboardthread.c @@ -58,8 +58,6 @@ extern Bool g_fUnicodeClipboard; extern Bool g_fClipboard; extern HWND g_hwndClipboard; -extern void *g_pClipboardDisplay; -extern Window g_iClipboardWindow; /* * Global variables @@ -78,7 +76,7 @@ int xfixes_error_base; */ static HWND -winClipboardCreateMessagingWindow(void); +winClipboardCreateMessagingWindow(Display *pDisplay, Window iWindow); static int winClipboardErrorHandler(Display * pDisplay, XErrorEvent * pErr); @@ -192,9 +190,6 @@ winClipboardProc(void *pvNotUsed) goto winClipboardProc_Done; } - /* Save the display in a global used by the wndproc */ - g_pClipboardDisplay = pDisplay; - ErrorF("winClipboardProc - XOpenDisplay () returned and " "successfully opened the display.\n"); @@ -255,14 +250,11 @@ winClipboardProc(void *pvNotUsed) XFixesSelectionWindowDestroyNotifyMask | XFixesSelectionClientCloseNotifyMask); - /* Save the window in the screen privates */ - g_iClipboardWindow = iWindow; /* Initialize monitored selection state */ winClipboardInitMonitoredSelections(); - /* Create Windows messaging window */ - hwnd = winClipboardCreateMessagingWindow(); + hwnd = winClipboardCreateMessagingWindow(pDisplay, iWindow); /* Save copy of HWND in screen privates */ g_hwndClipboard = hwnd; @@ -419,8 +411,6 @@ winClipboardProc(void *pvNotUsed) #endif /* global clipboard variable reset */ - g_iClipboardWindow = None; - g_pClipboardDisplay = NULL; g_hwndClipboard = NULL; return NULL; @@ -431,9 +421,10 @@ winClipboardProc(void *pvNotUsed) */ static HWND -winClipboardCreateMessagingWindow(void) +winClipboardCreateMessagingWindow(Display *pDisplay, Window iWindow) { WNDCLASSEX wc; + ClipboardWindowCreationParams cwcp; HWND hwnd; /* Setup our window class */ @@ -451,6 +442,10 @@ winClipboardCreateMessagingWindow(void) wc.hIconSm = 0; RegisterClassEx(&wc); + /* Information to be passed to WM_CREATE */ + cwcp.pClipboardDisplay = pDisplay; + cwcp.iClipboardWindow = iWindow; + /* Create the window */ hwnd = CreateWindowExA(0, /* Extended styles */ WIN_CLIPBOARD_WINDOW_CLASS, /* Class name */ @@ -463,7 +458,7 @@ winClipboardCreateMessagingWindow(void) (HWND) NULL, /* No parent or owner window */ (HMENU) NULL, /* No menu */ GetModuleHandle(NULL), /* Instance handle */ - NULL); /* Creation data */ + &cwcp); /* Creation data */ assert(hwnd != NULL); /* I'm not sure, but we may need to call this to start message processing */ diff --git a/hw/xwin/winclipboardwndproc.c b/hw/xwin/winclipboardwndproc.c index d73c2db40..459170f2a 100644 --- a/hw/xwin/winclipboardwndproc.c +++ b/hw/xwin/winclipboardwndproc.c @@ -44,12 +44,6 @@ #define WIN_POLL_TIMEOUT 1 -/* - * References to external symbols - */ - -extern void *g_pClipboardDisplay; -extern Window g_iClipboardWindow; /* * Process X events up to specified timeout @@ -138,6 +132,8 @@ winClipboardWindowProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam) { static HWND s_hwndNextViewer; static Bool s_fCBCInitialized; + static Display *pDisplay; + static Window iWindow; /* Branch on message type */ switch (message) { @@ -158,9 +154,13 @@ winClipboardWindowProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam) { HWND first, next; DWORD error_code = 0; + ClipboardWindowCreationParams *cwcp = (ClipboardWindowCreationParams *)((CREATESTRUCT *)lParam)->lpCreateParams; winDebug("winClipboardWindowProc - WM_CREATE\n"); + pDisplay = cwcp->pClipboardDisplay; + iWindow = cwcp->iClipboardWindow; + first = GetClipboardViewer(); /* Get handle to first viewer in chain. */ if (first == hwnd) return 0; /* Make sure it's not us! */ @@ -243,8 +243,6 @@ winClipboardWindowProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam) static Atom atomClipboard; static int generation; static Bool s_fProcessingDrawClipboard = FALSE; - Display *pDisplay = g_pClipboardDisplay; - Window iWindow = g_iClipboardWindow; int iReturn; winDebug("winClipboardWindowProc - WM_DRAWCLIPBOARD: Enter\n"); @@ -323,7 +321,7 @@ winClipboardWindowProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam) /* Release PRIMARY selection if owned */ iReturn = XGetSelectionOwner(pDisplay, XA_PRIMARY); - if (iReturn == g_iClipboardWindow) { + if (iReturn == iWindow) { winDebug("winClipboardWindowProc - WM_DRAWCLIPBOARD - " "PRIMARY selection is owned by us.\n"); XSetSelectionOwner(pDisplay, XA_PRIMARY, None, CurrentTime); @@ -335,7 +333,7 @@ winClipboardWindowProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam) /* Release CLIPBOARD selection if owned */ iReturn = XGetSelectionOwner(pDisplay, atomClipboard); - if (iReturn == g_iClipboardWindow) { + if (iReturn == iWindow) { winDebug("winClipboardWindowProc - WM_DRAWCLIPBOARD - " "CLIPBOARD selection is owned by us.\n"); XSetSelectionOwner(pDisplay, atomClipboard, None, CurrentTime); @@ -408,8 +406,6 @@ winClipboardWindowProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam) case WM_RENDERALLFORMATS: { int iReturn; - Display *pDisplay = g_pClipboardDisplay; - Window iWindow = g_iClipboardWindow; Bool fConvertToUnicode; winDebug("winClipboardWindowProc - WM_RENDER*FORMAT - Hello.\n"); diff --git a/hw/xwin/winglobals.c b/hw/xwin/winglobals.c index b3f18ae4b..8eaaf385a 100644 --- a/hw/xwin/winglobals.c +++ b/hw/xwin/winglobals.c @@ -95,8 +95,6 @@ Bool g_fUnicodeClipboard = TRUE; Bool g_fClipboard = TRUE; Bool g_fClipboardStarted = FALSE; HWND g_hwndClipboard = NULL; -void *g_pClipboardDisplay = NULL; -Window g_iClipboardWindow = None; #endif /* @@ -109,8 +107,6 @@ winInitializeGlobals(void) { g_dwCurrentThreadID = GetCurrentThreadId(); #ifdef XWIN_CLIPBOARD - g_iClipboardWindow = None; - g_pClipboardDisplay = NULL; g_hwndClipboard = NULL; #endif }