aboutsummaryrefslogtreecommitdiff
path: root/xorg-server/hw/xwin/winclipboard
diff options
context:
space:
mode:
authormarha <marha@users.sourceforge.net>2014-10-03 11:16:22 +0200
committermarha <marha@users.sourceforge.net>2014-10-03 11:17:02 +0200
commit37facdad11007fb89d30d7de5328ad900de7760d (patch)
tree82d9e504958a0caa24c10d1c737667fbb59591c4 /xorg-server/hw/xwin/winclipboard
parent6cd5821f50969f9fcce45396bfc115ce2c3156a0 (diff)
downloadvcxsrv-37facdad11007fb89d30d7de5328ad900de7760d.tar.gz
vcxsrv-37facdad11007fb89d30d7de5328ad900de7760d.tar.bz2
vcxsrv-37facdad11007fb89d30d7de5328ad900de7760d.zip
Resynchronised files with released version
Diffstat (limited to 'xorg-server/hw/xwin/winclipboard')
-rwxr-xr-xxorg-server/hw/xwin/winclipboard/internal.h16
-rwxr-xr-xxorg-server/hw/xwin/winclipboard/thread.c71
2 files changed, 75 insertions, 12 deletions
diff --git a/xorg-server/hw/xwin/winclipboard/internal.h b/xorg-server/hw/xwin/winclipboard/internal.h
index d42497cc9..fece50740 100755
--- a/xorg-server/hw/xwin/winclipboard/internal.h
+++ b/xorg-server/hw/xwin/winclipboard/internal.h
@@ -58,22 +58,14 @@ typedef int pid_t;
/* Windows headers */
#include <X11/Xwindows.h>
-/* Clipboard module constants */
-#define WIN_CLIPBOARD_WINDOW_CLASS "xwinclip"
-#define WIN_CLIPBOARD_WINDOW_TITLE "xwinclip"
-#ifdef HAS_DEVWINDOWS
-#define WIN_MSG_QUEUE_FNAME "/dev/windows"
-#endif
-#define WIN_CONNECT_RETRIES 40
-#define WIN_CONNECT_DELAY 4
-#define WIN_JMP_OKAY 0
-#define WIN_JMP_ERROR_IO 2
-#define WIN_LOCAL_PROPERTY "CYGX_CUT_BUFFER"
+#include "winmsg.h"
+
#define WIN_XEVENTS_SUCCESS 0
#define WIN_XEVENTS_CONVERT 2
#define WIN_XEVENTS_NOTIFY 3
+#define WIN_LOCAL_PROPERTY "CYGX_CUT_BUFFER"
-#include "winmsg.h"
+#define WM_WM_REINIT (WM_USER + 200)
/*
* References to external symbols
diff --git a/xorg-server/hw/xwin/winclipboard/thread.c b/xorg-server/hw/xwin/winclipboard/thread.c
index 56f5484e6..1ba687eb1 100755
--- a/xorg-server/hw/xwin/winclipboard/thread.c
+++ b/xorg-server/hw/xwin/winclipboard/thread.c
@@ -47,6 +47,18 @@
#include "winmsg.h"
#include "internal.h"
+/* Clipboard module constants */
+#define WIN_CONNECT_RETRIES 40
+#define WIN_CONNECT_DELAY 4
+#define WIN_JMP_OKAY 0
+#define WIN_JMP_ERROR_IO 2
+
+#define WIN_CLIPBOARD_WINDOW_CLASS "xwinclip"
+#define WIN_CLIPBOARD_WINDOW_TITLE "xwinclip"
+#ifdef HAS_DEVWINDOWS
+#define WIN_MSG_QUEUE_FNAME "/dev/windows"
+#endif
+
#ifdef _MSC_VER
#define snprintf _snprintf
#endif
@@ -55,6 +67,7 @@
*/
extern Bool g_fUnicodeClipboard;
+extern Bool g_fClipboard;
extern Bool g_fClipboardStarted;
extern Bool g_fClipboardLaunched;
extern HWND g_hwndClipboard;
@@ -423,6 +436,55 @@ commonexit:
}
/*
+ * Create the Windows window that we use to receive Windows messages
+ */
+
+HWND
+winClipboardCreateMessagingWindow(void)
+{
+ WNDCLASSEX wc;
+ HWND hwnd;
+
+ /* Setup our window class */
+ wc.cbSize = sizeof(WNDCLASSEX);
+ wc.style = CS_HREDRAW | CS_VREDRAW;
+ wc.lpfnWndProc = winClipboardWindowProc;
+ wc.cbClsExtra = 0;
+ wc.cbWndExtra = 0;
+ wc.hInstance = GetModuleHandle(NULL);
+ wc.hIcon = 0;
+ wc.hCursor = 0;
+ wc.hbrBackground = (HBRUSH) GetStockObject(WHITE_BRUSH);
+ wc.lpszMenuName = NULL;
+ wc.lpszClassName = WIN_CLIPBOARD_WINDOW_CLASS;
+ wc.hIconSm = 0;
+ RegisterClassEx(&wc);
+
+ /* Create the window */
+ hwnd = CreateWindowExA(0, /* Extended styles */
+ WIN_CLIPBOARD_WINDOW_CLASS, /* Class name */
+ WIN_CLIPBOARD_WINDOW_TITLE, /* Window name */
+ WS_OVERLAPPED, /* Not visible anyway */
+ CW_USEDEFAULT, /* Horizontal position */
+ CW_USEDEFAULT, /* Vertical position */
+ CW_USEDEFAULT, /* Right edge */
+ CW_USEDEFAULT, /* Bottom edge */
+ (HWND) NULL, /* No parent or owner window */
+ (HMENU) NULL, /* No menu */
+ GetModuleHandle(NULL), /* Instance handle */
+ NULL); /* Creation data */
+ assert(hwnd != NULL);
+
+ /* I'm not sure, but we may need to call this to start message processing */
+ ShowWindow(hwnd, SW_HIDE);
+
+ /* Similarly, we may need a call to this even though we don't paint */
+ UpdateWindow(hwnd);
+
+ return hwnd;
+}
+
+/*
* winClipboardErrorHandler - Our application specific error handler
*/
@@ -478,3 +540,12 @@ winClipboardThreadExit(void *arg)
AbortDDX(EXIT_ERR_ABORT);
TerminateProcess(GetCurrentProcess(),1);
}
+
+
+void
+winFixClipboardChain(int Removed)
+{
+ if (g_fClipboard && g_hwndClipboard) {
+ PostMessage (g_hwndClipboard, WM_WM_REINIT, Removed, 0);
+ }
+}