2 *Copyright (C) 2003-2004 Harold L Hunt II All Rights Reserved.
4 *Permission is hereby granted, free of charge, to any person obtaining
5 * a copy of this software and associated documentation files (the
6 *"Software"), to deal in the Software without restriction, including
7 *without limitation the rights to use, copy, modify, merge, publish,
8 *distribute, sublicense, and/or sell copies of the Software, and to
9 *permit persons to whom the Software is furnished to do so, subject to
10 *the following conditions:
12 *The above copyright notice and this permission notice shall be
13 *included in all copies or substantial portions of the Software.
15 *THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
16 *EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
17 *MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
18 *NONINFRINGEMENT. IN NO EVENT SHALL HAROLD L HUNT II BE LIABLE FOR
19 *ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF
20 *CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
21 *WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
23 *Except as contained in this notice, the name of Harold L Hunt II
24 *shall not be used in advertising or otherwise to promote the sale, use
25 *or other dealings in this Software without prior written authorization
26 *from Harold L Hunt II.
28 * Authors: Harold L Hunt II
31 #ifdef HAVE_XWIN_CONFIG_H
32 #include <xwin-config.h>
34 #include "dixstruct.h"
35 #include "winclipboard.h"
41 typedef int (*winDispatchProcPtr
) (ClientPtr
);
43 int winProcSetSelectionOwner(ClientPtr
/* client */ );
46 * References to external symbols
49 extern pthread_t g_ptClipboardProc
;
50 extern winDispatchProcPtr winProcSetSelectionOwnerOrig
;
51 extern Bool g_fClipboard
;
52 extern HWND g_hwndClipboard
;
55 * Intialize the Clipboard module
59 winInitClipboard(void)
61 winDebug("winInitClipboard ()\n");
63 /* Wrap some internal server functions */
64 if (ProcVector
[X_SetSelectionOwner
] != winProcSetSelectionOwner
) {
65 winProcSetSelectionOwnerOrig
= ProcVector
[X_SetSelectionOwner
];
66 ProcVector
[X_SetSelectionOwner
] = winProcSetSelectionOwner
;
69 /* Spawn a thread for the Clipboard module */
70 if (pthread_create(&g_ptClipboardProc
, NULL
, winClipboardProc
, NULL
)) {
71 /* Bail if thread creation failed */
72 ErrorF("winInitClipboard - pthread_create failed.\n");
80 * Create the Windows window that we use to recieve Windows messages
84 winClipboardCreateMessagingWindow(void)
89 /* Setup our window class */
90 wc
.cbSize
= sizeof(WNDCLASSEX
);
91 wc
.style
= CS_HREDRAW
| CS_VREDRAW
;
92 wc
.lpfnWndProc
= winClipboardWindowProc
;
95 wc
.hInstance
= GetModuleHandle(NULL
);
98 wc
.hbrBackground
= (HBRUSH
) GetStockObject(WHITE_BRUSH
);
99 wc
.lpszMenuName
= NULL
;
100 wc
.lpszClassName
= WIN_CLIPBOARD_WINDOW_CLASS
;
102 RegisterClassEx(&wc
);
104 /* Create the window */
105 hwnd
= CreateWindowExA(0, /* Extended styles */
106 WIN_CLIPBOARD_WINDOW_CLASS
, /* Class name */
107 WIN_CLIPBOARD_WINDOW_TITLE
, /* Window name */
108 WS_OVERLAPPED
, /* Not visible anyway */
109 CW_USEDEFAULT
, /* Horizontal position */
110 CW_USEDEFAULT
, /* Vertical position */
111 CW_USEDEFAULT
, /* Right edge */
112 CW_USEDEFAULT
, /* Bottom edge */
113 (HWND
) NULL
, /* No parent or owner window */
114 (HMENU
) NULL
, /* No menu */
115 GetModuleHandle(NULL
), /* Instance handle */
116 NULL
); /* Creation data */
117 assert(hwnd
!= NULL
);
119 /* I'm not sure, but we may need to call this to start message processing */
120 ShowWindow(hwnd
, SW_HIDE
);
122 /* Similarly, we may need a call to this even though we don't paint */
129 winFixClipboardChain(void)
131 if (g_fClipboard
&& g_hwndClipboard
) {
132 PostMessage(g_hwndClipboard
, WM_WM_REINIT
, 0, 0);