Changeset 9198 for trunk/src/user32/clipboard.cpp
- Timestamp:
- Sep 3, 2002, 2:34:35 PM (23 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/user32/clipboard.cpp
r7736 r9198 1 /* $Id: clipboard.cpp,v 1.1 4 2002-01-07 14:32:21 sandervl Exp $ */1 /* $Id: clipboard.cpp,v 1.15 2002-09-03 12:34:01 sandervl Exp $ */ 2 2 3 3 /* … … 23 23 #include "dbglocal.h" 24 24 25 #ifdef USING_OPEN32CLIPBOARD26 27 #define FLAG_TO_OPEN32 028 #define FLAG_FROM_OPEN32 129 30 //******************************************************************************31 //******************************************************************************32 HGLOBAL GlobalCopy(HGLOBAL hDest, HGLOBAL hSource, BOOL fToOpen32)33 {34 LPVOID src;35 LPVOID dest;36 ULONG size;37 38 if(fToOpen32 == FLAG_TO_OPEN32) {39 src = GlobalLock(hSource);40 if(src) {41 size = GlobalSize(hSource);42 if(hDest == NULL) {43 hDest = O32_GlobalAlloc(GHND, size);44 }45 dest = O32_GlobalLock(hDest);46 memcpy(dest, src, size);47 O32_GlobalUnlock(hDest);48 }49 GlobalUnlock(hSource);50 }51 else {52 src = O32_GlobalLock(hSource);53 if(src) {54 size = O32_GlobalSize(hSource);55 if(hDest == NULL) {56 hDest = GlobalAlloc(GHND, size);57 }58 dest = GlobalLock(hDest);59 memcpy(dest, src, size);60 GlobalUnlock(hDest);61 }62 O32_GlobalUnlock(hSource);63 }64 return hDest;65 }66 #endif67 68 25 //****************************************************************************** 69 26 //****************************************************************************** 70 27 BOOL WIN32API ChangeClipboardChain( HWND hwndRemove, HWND hwndNext) 71 28 { 72 Win32BaseWindow *wndRemove, *wndNext;73 HWND hwndOS2Remove, hwndOS2Next;29 Win32BaseWindow *wndRemove, *wndNext; 30 HWND hwndOS2Remove, hwndOS2Next; 74 31 75 32 wndRemove = Win32BaseWindow::GetWindowFromHandle(hwndRemove); … … 96 53 //****************************************************************************** 97 54 //****************************************************************************** 98 BOOL WIN32API CloseClipboard(void)99 {100 dprintf(("USER32: CloseClipboard\n"));101 return O32_CloseClipboard();102 }103 //******************************************************************************104 //******************************************************************************105 55 int WIN32API CountClipboardFormats(void) 106 56 { 107 dprintf(("USER32: CountClipboardFormats\n"));57 dprintf(("USER32: CountClipboardFormats")); 108 58 return O32_CountClipboardFormats(); 109 59 } … … 112 62 BOOL WIN32API EmptyClipboard(void) 113 63 { 114 dprintf(("USER32: EmptyClipboard\n"));64 dprintf(("USER32: EmptyClipboard")); 115 65 return O32_EmptyClipboard(); 116 66 } … … 119 69 UINT WIN32API EnumClipboardFormats(UINT arg1) 120 70 { 121 dprintf(("USER32: EnumClipboardFormats\n"));71 dprintf(("USER32: EnumClipboardFormats %d", arg1)); 122 72 return O32_EnumClipboardFormats(arg1); 123 73 } 124 74 //****************************************************************************** 125 75 //****************************************************************************** 126 HANDLE WIN32API GetClipboardData( UINT uFormat)127 {128 #ifdef USING_OPEN32CLIPBOARD129 HANDLE hClipObj = 0, hClipObjOpen32 = 0;130 131 dprintf(("USER32: GetClipboardData %x", uFormat));132 hClipObjOpen32 = O32_GetClipboardData(uFormat);133 //memory leak134 if(hClipObjOpen32) {135 hClipObj = GlobalCopy(NULL, hClipObjOpen32, FLAG_FROM_OPEN32);136 }137 return hClipObj;138 #else139 dprintf(("USER32: GetClipboardData %x", uFormat));140 return O32_GetClipboardData(uFormat);141 #endif142 }143 //******************************************************************************144 //******************************************************************************145 76 int WIN32API GetClipboardFormatNameA(UINT format,LPSTR lpszFormatName,int cchMaxCount) 146 77 { 147 dprintf(("USER32:GetClipboardFormatNameA %d\n",format));148 return O32_GetClipboardFormatName(format,lpszFormatName,cchMaxCount);78 dprintf(("USER32: GetClipboardFormatNameA %d\n",format)); 79 return O32_GetClipboardFormatName(format,lpszFormatName,cchMaxCount); 149 80 } 150 81 //****************************************************************************** … … 152 83 int WIN32API GetClipboardFormatNameW(UINT format,LPWSTR lpszFormatName,int cchMaxCount) 153 84 { 154 int rc; 155 char *astring = (CHAR*)malloc(cchMaxCount); 156 157 dprintf(("USER32: GetClipboardFormatNameW %d\n",format)); 158 rc = O32_GetClipboardFormatName(format,astring,cchMaxCount); 159 if (rc) AsciiToUnicode(astring,lpszFormatName); 160 free(astring); 161 return(rc); 85 int rc; 86 char *astring = (CHAR*)malloc(cchMaxCount); 87 88 rc = GetClipboardFormatNameA(format,astring,cchMaxCount); 89 if (rc) AsciiToUnicode(astring,lpszFormatName); 90 free(astring); 91 return(rc); 162 92 } 163 93 //****************************************************************************** … … 165 95 HWND WIN32API GetClipboardOwner(void) 166 96 { 167 HWND hwndOwner;168 Win32BaseWindow *window;169 170 dprintf(("USER32: 97 HWND hwndOwner; 98 Win32BaseWindow *window; 99 100 dprintf(("USER32: GetClipboardOwner\n")); 171 101 hwndOwner = O32_GetClipboardOwner(); 172 102 … … 184 114 HWND WIN32API GetClipboardViewer(void) 185 115 { 186 Win32BaseWindow *window;187 HWND hwndViewer;188 189 dprintf(("USER32: GetClipboardViewer\n"));116 Win32BaseWindow *window; 117 HWND hwndViewer; 118 119 dprintf(("USER32: GetClipboardViewer")); 190 120 hwndViewer = O32_GetClipboardViewer(); 191 121 … … 201 131 //****************************************************************************** 202 132 //****************************************************************************** 133 HWND WIN32API SetClipboardViewer( HWND hwndNew) 134 { 135 Win32BaseWindow *wndnew, *wndold; 136 HWND hwndOld; 137 HWND hwndOS2New; 138 139 wndnew = Win32BaseWindow::GetWindowFromHandle(hwndNew); 140 if(!wndnew) { 141 dprintf(("SetClipboardViewer, window %x not found", hwndNew)); 142 SetLastError(ERROR_INVALID_WINDOW_HANDLE); 143 return 0; 144 } 145 dprintf(("USER32: SetClipboardViewer %x", hwndNew)); 146 hwndOS2New = wndnew->getOS2WindowHandle(); 147 RELEASE_WNDOBJ(wndnew); 148 149 hwndOld = O32_SetClipboardViewer(hwndOS2New); 150 151 wndold = Win32BaseWindow::GetWindowFromOS2Handle(hwndOld); 152 if(!wndold) { 153 //probably an OS/2 window, so pretend it's nobody 154 return 0; 155 } 156 hwndOld = wndold->getWindowHandle(); 157 RELEASE_WNDOBJ(wndold); 158 return hwndOld; 159 } 160 //****************************************************************************** 161 //****************************************************************************** 203 162 HWND WIN32API GetOpenClipboardWindow(void) 204 163 { 205 Win32BaseWindow *window;206 HWND hwnd;207 208 dprintf(("USER32: GetOpenClipboardWindow\n"));164 Win32BaseWindow *window; 165 HWND hwnd; 166 167 dprintf(("USER32: GetOpenClipboardWindow")); 209 168 hwnd = O32_GetOpenClipboardWindow(); 210 169 … … 222 181 int WIN32API GetPriorityClipboardFormat( PUINT arg1, int arg2) 223 182 { 224 dprintf(("USER32: GetPriorityClipboardFormat\n"));183 dprintf(("USER32: GetPriorityClipboardFormat")); 225 184 return O32_GetPriorityClipboardFormat(arg1, arg2); 226 185 } … … 236 195 BOOL WIN32API OpenClipboard( HWND hwnd) 237 196 { 238 Win32BaseWindow *window;197 Win32BaseWindow *window; 239 198 240 199 if (hwnd) { … … 253 212 //****************************************************************************** 254 213 //****************************************************************************** 214 BOOL WIN32API CloseClipboard(void) 215 { 216 dprintf(("USER32: CloseClipboard")); 217 return O32_CloseClipboard(); 218 } 219 //****************************************************************************** 220 //****************************************************************************** 255 221 UINT WIN32API RegisterClipboardFormatA( LPCSTR arg1) 256 222 { … … 262 228 UINT WIN32API RegisterClipboardFormatW(LPCWSTR arg1) 263 229 { 264 UINT rc;265 char *astring = UnicodeToAsciiString((LPWSTR)arg1);230 UINT rc; 231 char *astring = UnicodeToAsciiString((LPWSTR)arg1); 266 232 267 233 dprintf(("USER32: RegisterClipboardFormatW %s\n", astring)); … … 273 239 //****************************************************************************** 274 240 //****************************************************************************** 241 HANDLE WIN32API GetClipboardData(UINT uFormat) 242 { 243 HANDLE hRet = O32_GetClipboardData(uFormat); 244 dprintf(("GetClipboardData %x returned %x", uFormat, hRet)); 245 return hRet; 246 } 247 //****************************************************************************** 248 //****************************************************************************** 275 249 HANDLE WIN32API SetClipboardData( UINT uFormat, HANDLE hClipObj) 276 250 { 277 #ifdef USING_OPEN32CLIPBOARD 278 HANDLE hClipObjOpen32 = 0; 279 280 dprintf(("USER32: SetClipboardData %x %x", uFormat, hClipObj)); 281 //memory leak 282 if(hClipObj) { 283 hClipObjOpen32 = GlobalCopy(NULL, hClipObj, FLAG_TO_OPEN32); 284 } 285 O32_SetClipboardData(uFormat, hClipObjOpen32); 286 287 return hClipObj; 288 #else 289 dprintf(("USER32: SetClipboardData %x %x", uFormat, hClipObj)); 290 291 if(uFormat == CF_UNICODETEXT) 292 { 293 //have to translate to CF_TEXT, because WGSS doesn't understand 294 //unicode text 295 LPWSTR lpTextUnicode; 296 LPSTR lpTextAscii; 297 DWORD length; 298 HANDLE hClipObjAscii; 299 300 lpTextUnicode = (LPWSTR)GlobalLock(hClipObj); 301 if(lpTextUnicode == NULL) { 302 dprintf(("!ERROR!: Invalid handle!!")); 303 SetLastError(ERROR_INVALID_HANDLE); 304 return 0; 305 } 306 length = GlobalSize(hClipObj)/sizeof(WCHAR); 307 hClipObjAscii = GlobalAlloc(GMEM_DDESHARE | GMEM_MOVEABLE, length); 308 lpTextAscii = (LPSTR)GlobalLock(hClipObjAscii); 309 if(!hClipObjAscii || lpTextAscii == NULL || length == 0) { 310 dprintf(("!ERROR!: GlobalAlloc %d failed!!", length)); 311 SetLastError(ERROR_INVALID_HANDLE); 312 return 0; 313 } 314 WideCharToMultiByte(CP_ACP, 0, lpTextUnicode, -1, lpTextAscii, length, 0, NULL); 315 316 GlobalUnlock(hClipObjAscii); 317 GlobalUnlock(hClipObj); 318 HANDLE ret = O32_SetClipboardData(CF_TEXT, hClipObjAscii); 319 //hClipObjAscii will be freed when the clipboard is closed 320 return ret; 321 } 251 dprintf(("SetClipboardData %x %x", uFormat, hClipObj)); 322 252 return O32_SetClipboardData(uFormat, hClipObj); 323 #endif 324 } 325 //****************************************************************************** 326 //****************************************************************************** 327 HWND WIN32API SetClipboardViewer( HWND hwndNew) 328 { 329 Win32BaseWindow *wndnew, *wndold; 330 HWND hwndOld; 331 HWND hwndOS2New; 332 333 wndnew = Win32BaseWindow::GetWindowFromHandle(hwndNew); 334 if(!wndnew) { 335 dprintf(("SetClipboardViewer, window %x not found", hwndNew)); 336 SetLastError(ERROR_INVALID_WINDOW_HANDLE); 337 return 0; 338 } 339 dprintf(("USER32: SetClipboardViewer %x", hwndNew)); 340 hwndOS2New = wndnew->getOS2WindowHandle(); 341 RELEASE_WNDOBJ(wndnew); 342 343 hwndOld = O32_SetClipboardViewer(hwndOS2New); 344 345 wndold = Win32BaseWindow::GetWindowFromOS2Handle(hwndOld); 346 if(!wndold) { 347 //probably an OS/2 window, so pretend it's nobody 348 return 0; 349 } 350 hwndOld = wndold->getWindowHandle(); 351 RELEASE_WNDOBJ(wndold); 352 return hwndOld; 353 } 354 //****************************************************************************** 355 //****************************************************************************** 253 } 254 //****************************************************************************** 255 //******************************************************************************
Note:
See TracChangeset
for help on using the changeset viewer.