- Timestamp:
- Apr 23, 2003, 8:01:01 PM (22 years ago)
- Location:
- trunk/src/user32
- Files:
-
- 9 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/user32/USER32.DEF
r9889 r10031 1 ; $Id: USER32.DEF,v 1.7 8 2003-03-03 16:36:25sandervl Exp $1 ; $Id: USER32.DEF,v 1.79 2003-04-23 18:00:58 sandervl Exp $ 2 2 3 3 LIBRARY USER32 INITINSTANCE TERMINSTANCE … … 36 36 ;;;; Present in WGSS50 37 37 ;;;; _GpiQueryDCData = PMGPI.665 38 39 WinQueryProperty = PMMERGE.5450 40 WinRemoveProperty = PMMERGE.5451 41 WinSetProperty = PMMERGE.5452 38 42 39 43 EXPORTS -
trunk/src/user32/oslibwin.cpp
r10013 r10031 1 /* $Id: oslibwin.cpp,v 1.14 2 2003-04-11 15:22:33sandervl Exp $ */1 /* $Id: oslibwin.cpp,v 1.143 2003-04-23 18:00:58 sandervl Exp $ */ 2 2 /* 3 3 * Window API wrappers for OS/2 … … 127 127 //Note: Also check OSLibSetWindowStyle when changing this!! 128 128 //****************************************************************************** 129 BOOL OSLibWinConvertStyle(ULONG dwStyle, ULONG dwExStyle, ULONG *OSWinStyle, 129 BOOL OSLibWinConvertStyle(ULONG dwStyle, ULONG dwExStyle, ULONG *OSWinStyle, 130 130 ULONG *OSFrameStyle) 131 131 { … … 144 144 145 145 //WS_EX_TOOLWINDOW is incompatible with the OS2Look (titlebar thinner + smaller font) 146 if(fOS2Look && !(dwExStyle & WS_EX_TOOLWINDOW_W)) 146 if(fOS2Look && !(dwExStyle & WS_EX_TOOLWINDOW_W)) 147 147 { 148 148 if((dwStyle & WS_CAPTION_W) == WS_CAPTION_W) { … … 168 168 //****************************************************************************** 169 169 //****************************************************************************** 170 BOOL OSLibWinPositionFrameControls(HWND hwndFrame, RECTLOS2 *pRect, DWORD dwStyle, 171 DWORD dwExStyle, HICON hSysMenuIcon, 170 BOOL OSLibWinPositionFrameControls(HWND hwndFrame, RECTLOS2 *pRect, DWORD dwStyle, 171 DWORD dwExStyle, HICON hSysMenuIcon, 172 172 BOOL drawCloseButton, BOOL fClassIcon) 173 173 { … … 190 190 minmaxheight = WinQuerySysValue(HWND_DESKTOP, SV_CYMINMAXBUTTON); 191 191 } 192 192 193 193 if(fOS2Look == OS2_APPEARANCE_SYSMENU) { 194 194 //Note: If no class icon *and* WS_EX_DLGMODALFRAME -> no system menu!! … … 236 236 swp[i].cx -= minmaxwidth/2; 237 237 } 238 //there is no close button in warp 3 and sometimes we do not 238 //there is no close button in warp 3 and sometimes we do not 239 239 //have close button as well 240 240 if((dwStyle & WS_SYSMENU_W) && !fVersionWarp3 && drawCloseButton) { … … 578 578 579 579 //****************************************************************************** 580 //@PF This is exactly that weird message PM sends when we maximize window from 580 //@PF This is exactly that weird message PM sends when we maximize window from 581 581 //icon - this coordinates NEVER surface later and this combination of SWP 582 582 //commands is useless, yet it starts the correct reaction of maximiztion from … … 595 595 /* @@PF The reason for this weird minimize algorithm is that we are not fully 596 596 using PM for minimization. I.e. we respect all PM messages yet we do mess 597 so much with some messages that minimization is based partly on vodoo. 597 so much with some messages that minimization is based partly on vodoo. 598 598 That is if you try minimize and deactivate in one call it will fail. 599 599 Here we deactivate yourselves and give focus to next window that is … … 635 635 { 636 636 ULONG hIconOS2 = GetOS2Icon(hIcon); 637 if(hIconOS2) 637 if(hIconOS2) 638 638 return (BOOL) WinSendMsg(hwnd, WM_SETICON, (MPARAM)hIconOS2, 0); 639 639 return FALSE; … … 996 996 //PF: PM Logic approved by numerous testcases shows this: 997 997 //There is no other way to tweak FID_MINMAX without deleting it 998 //Controls are created with size 0,0, invisible and should be immediately 998 //Controls are created with size 0,0, invisible and should be immediately 999 999 //positioned. MINMAX control can't function properly without FID_SYSMENU 1000 1000 //control if it is present, so we need to recreate BOTH controls. … … 1006 1006 //leave old, WinCreateFrameControls can't tweak anything. 1007 1007 1008 void OSLibSetWindowStyle(HWND hwndFrame, HWND hwndClient, ULONG dwStyle, 1008 void OSLibSetWindowStyle(HWND hwndFrame, HWND hwndClient, ULONG dwStyle, 1009 1009 ULONG dwExStyle, ULONG dwOldWindowsStyle) 1010 1010 { … … 1012 1012 ULONG dwOldWinStyle; 1013 1013 1014 int checksum, checksum2; 1014 int checksum, checksum2; 1015 1015 DWORD dest_tid, dest_pid; 1016 1016 … … 1024 1024 dest_tid = GetWindowThreadProcessId(OS2ToWin32Handle(hwndClient) , &dest_pid ); 1025 1025 1026 if (dest_tid != GetCurrentThreadId()) 1026 if (dest_tid != GetCurrentThreadId()) 1027 1027 { 1028 1028 dprintf(("OSLibSetWindowStyle: Redirecting Change Frame controls to another thread")); … … 1034 1034 minmaxheight = WinQuerySysValue(HWND_DESKTOP, SV_CYMINMAXBUTTON); 1035 1035 } 1036 1036 1037 1037 if (hwndClient) 1038 1038 { … … 1081 1081 dwWinStyle |= WS_MAXIMIZED; 1082 1082 } 1083 else 1083 else 1084 1084 dwWinStyle &= ~WS_MAXIMIZED; 1085 1085 … … 1096 1096 } 1097 1097 else 1098 WinQueryWindowPos(WinWindowFromID(hwndFrame, FID_TITLEBAR), &rc1); 1098 WinQueryWindowPos(WinWindowFromID(hwndFrame, FID_TITLEBAR), &rc1); 1099 1099 1100 1100 if((dwStyle & WS_SYSMENU_W) && !(dwExStyle & WS_EX_TOOLWINDOW_W)) … … 1126 1126 { 1127 1127 OSFrameStyle |= FCF_CLOSEBUTTON; 1128 OSFrameStyle |= FCF_SYSMENU; 1128 OSFrameStyle |= FCF_SYSMENU; 1129 1129 totalwidth += minmaxwidth/2; 1130 1130 dprintf(("close button")); … … 1132 1132 } 1133 1133 } 1134 else 1134 else 1135 1135 { 1136 if (WinWindowFromID(hwndFrame, FID_TITLEBAR)) 1136 if (WinWindowFromID(hwndFrame, FID_TITLEBAR)) 1137 1137 WinDestroyWindow(WinWindowFromID(hwndFrame, FID_TITLEBAR)); 1138 1138 } … … 1140 1140 if (checksum != checksum2) 1141 1141 { 1142 if (WinWindowFromID(hwndFrame, FID_SYSMENU)) 1142 if (WinWindowFromID(hwndFrame, FID_SYSMENU)) 1143 1143 WinDestroyWindow(WinWindowFromID(hwndFrame, FID_SYSMENU)); 1144 if (WinWindowFromID(hwndFrame, FID_MINMAX)) 1144 if (WinWindowFromID(hwndFrame, FID_MINMAX)) 1145 1145 WinDestroyWindow(WinWindowFromID(hwndFrame, FID_MINMAX)); 1146 1146 } … … 1154 1154 GetWindowTextA(OS2ToWin32Handle(hwndClient), buffer, sizeof(buffer)); 1155 1155 WinCreateFrameControls(hwndFrame, &FCData, buffer ); 1156 1156 1157 1157 if (totalwidth != rc3.cx) 1158 1158 { … … 1162 1162 rc3.x = rc3.x + totalwidth; 1163 1163 } 1164 1165 WinSetWindowPos(WinWindowFromID(hwndFrame, FID_MINMAX),0,rc3.x,rc3.y,rc3.cx,rc3.cy, SWP_MOVE | SWP_SIZE | SWP_SHOW); 1166 WinSetWindowPos(WinWindowFromID(hwndFrame, FID_SYSMENU),0,rc2.x,rc2.y,rc2.cx,rc2.cy, SWP_MOVE | SWP_SIZE | SWP_SHOW); 1167 WinSetWindowPos(WinWindowFromID(hwndFrame, FID_TITLEBAR),0,rc1.x,rc1.y,rc1.cx,rc1.cy, SWP_MOVE | SWP_SIZE | SWP_SHOW); 1164 1165 WinSetWindowPos(WinWindowFromID(hwndFrame, FID_MINMAX),0,rc3.x,rc3.y,rc3.cx,rc3.cy, SWP_MOVE | SWP_SIZE | SWP_SHOW); 1166 WinSetWindowPos(WinWindowFromID(hwndFrame, FID_SYSMENU),0,rc2.x,rc2.y,rc2.cx,rc2.cy, SWP_MOVE | SWP_SIZE | SWP_SHOW); 1167 WinSetWindowPos(WinWindowFromID(hwndFrame, FID_TITLEBAR),0,rc1.x,rc1.y,rc1.cx,rc1.cy, SWP_MOVE | SWP_SIZE | SWP_SHOW); 1168 1168 1169 1169 if (WinQueryActiveWindow(HWND_DESKTOP) == hwndFrame) … … 1345 1345 //****************************************************************************** 1346 1346 //****************************************************************************** 1347 1348 /* 'Private' PM property stuff. */ 1349 PVOID APIENTRY WinQueryProperty(HWND hwnd, PCSZ pszNameOrAtom); 1350 PVOID APIENTRY WinRemoveProperty(HWND hwnd, PCSZ pszNameOrAtom); 1351 BOOL APIENTRY WinSetProperty(HWND hwnd, PCSZ pszNameOrAtom, PVOID pvData, ULONG ulFlags); 1352 1353 /** 1354 * Set Property. 1355 * @returns Success indicator. 1356 * @param hwnd Window the property is associated with. 1357 * @param psz The property atom or name. 1358 * @param pv Property value. 1359 * @param fFlags Flags. Use 0. 1360 */ 1361 BOOL OSLibSetProperty(HWND hwnd, const char *psz, void *pv, unsigned fFlags) 1362 { 1363 USHORT selFS = RestoreOS2FS(); 1364 BOOL fRet = WinSetProperty(hwnd, psz, pv, fFlags); 1365 SetFS(selFS); 1366 return fRet; 1367 } 1368 1369 /** 1370 * Get Property. 1371 * @returns Property value. 1372 * @param hwnd Window the property is associated with. 1373 * @param psz The property atom or name. 1374 */ 1375 void * OSLibQueryProperty(HWND hwnd, const char *psz) 1376 { 1377 USHORT selFS = RestoreOS2FS(); 1378 void *pvRet = WinQueryProperty(hwnd, psz); 1379 SetFS(selFS); 1380 return pvRet; 1381 } 1382 1383 /** 1384 * Remove Property. 1385 * @returns Property value. 1386 * @param hwnd Window the property is associated with. 1387 * @param psz The property atom or name. 1388 */ 1389 void * OSLibRemoveProperty(HWND hwnd, const char *psz) 1390 { 1391 USHORT selFS = RestoreOS2FS(); 1392 void *pvRet = WinRemoveProperty(hwnd, psz); 1393 SetFS(selFS); 1394 return pvRet; 1395 } 1396 -
trunk/src/user32/oslibwin.h
r10013 r10031 1 /* $Id: oslibwin.h,v 1.7 5 2003-04-11 15:22:33sandervl Exp $ */1 /* $Id: oslibwin.h,v 1.76 2003-04-23 18:00:58 sandervl Exp $ */ 2 2 /* 3 3 * Window API wrappers for OS/2 … … 398 398 399 399 400 void * OSLibRemoveProperty(HWND hwnd, const char *psz); 401 BOOL OSLibSetProperty(HWND hwnd, const char *psz, void *pv, unsigned fFlags); 402 void * OSLibQueryProperty(HWND hwnd, const char *psz); 403 400 404 #endif //__OSLIBWIN_H__ -
trunk/src/user32/pmwindow.cpp
r10008 r10031 1 /* $Id: pmwindow.cpp,v 1.20 8 2003-04-11 10:55:02sandervl Exp $ */1 /* $Id: pmwindow.cpp,v 1.209 2003-04-23 18:00:59 sandervl Exp $ */ 2 2 /* 3 3 * Win32 Window Managment Code for OS/2 … … 31 31 #include <dbglog.h> 32 32 #include <win32wbase.h> 33 #include <win32wfake.h> 33 34 #include <win32dlg.h> 34 35 #include "win32wdesktop.h" … … 884 885 { 885 886 win32wnd->DispatchMsgA(pWinMsg); 886 if(WinQueryUpdateRect(hwnd, NULL) == TRUE) 887 if(WinQueryUpdateRect(hwnd, NULL) == TRUE) 887 888 {//the application didn't validate the update region; Windows 888 889 //will only send a WM_PAINT once until another part of the … … 1018 1019 break; 1019 1020 } 1020 1021 1021 1022 ULONG ulBytes, cItems; 1022 1023 char *pszFiles; … … 1036 1037 else { 1037 1038 rc = (MRFROM2SHORT (DOR_NEVERDROP, 0)); 1038 } 1039 } 1039 1040 break; 1040 1041 } … … 1272 1273 { 1273 1274 //ignore this message. don't forward it to the default PM frame window handler 1274 //as that one sends it to the client. as a result we end up translating 1275 //as that one sends it to the client. as a result we end up translating 1275 1276 //it twice 1276 1277 break; … … 1366 1367 DWORD dwOldStyle = win32wnd->getOldStyle(); 1367 1368 DWORD dwStyle = win32wnd->getStyle(); 1368 1369 1369 1370 win32wnd->setOldStyle(dwStyle); 1370 1371 if((dwOldStyle & WS_MINIMIZE_W) && !(dwStyle & WS_MINIMIZE_W)) { … … 1553 1554 WinShowWindow(win32wnd->getOS2WindowHandle(), 0); 1554 1555 } 1555 if(pswp->fl & (SWP_SHOW|SWP_HIDE)) 1556 if(pswp->fl & (SWP_SHOW|SWP_HIDE)) 1556 1557 {//TODO: necessary for more options? (activate?) 1557 1558 if(win32wnd->CanReceiveSizeMsgs()) … … 1948 1949 //result will be illegal. Btw we do not honour PM border size settings 1949 1950 //and never will. I was unable to figure out why only X coordinate 1950 //is being broken but not Y as well. 1951 1952 if ((pswp->fl & SWP_MAXIMIZE) == SWP_MAXIMIZE) 1951 //is being broken but not Y as well. 1952 1953 if ((pswp->fl & SWP_MAXIMIZE) == SWP_MAXIMIZE) 1953 1954 { 1954 1955 RECT rect; … … 2091 2092 SetWin32TIB(); 2092 2093 2093 //We can't query the window object directly from this window as it's not the 2094 //real thing. There should be a genuine win32 child window which we can use. 2095 HWND hwndChild = WinQueryWindow(hwnd, QW_TOP); 2096 2097 win32wndchild = Win32BaseWindow::GetWindowFromOS2FrameHandle(hwndChild); 2098 if(win32wndchild == NULL) { 2099 DebugInt3(); 2100 goto RunDefWndProc; 2101 } 2102 //now get the parent window object 2103 win32wnd = Win32BaseWindow::GetWindowFromHandle(GetParent(win32wndchild->getWindowHandle())); 2104 if(win32wndchild) RELEASE_WNDOBJ(win32wndchild); 2105 2094 win32wnd = Win32FakeWindow::GetWindowFromOS2Handle(hwnd); 2106 2095 if(win32wnd == NULL) { 2107 2096 DebugInt3(); … … 2207 2196 //****************************************************************************** 2208 2197 //****************************************************************************** 2209 static char *PMDragExtractFiles(PDRAGINFO pDragInfo, ULONG *pcItems, ULONG *pulBytes) 2198 static char *PMDragExtractFiles(PDRAGINFO pDragInfo, ULONG *pcItems, ULONG *pulBytes) 2210 2199 { 2211 2200 PDRAGITEM pDragItem; … … 2225 2214 2226 2215 //computer memory required to hold all filenames 2227 int bufsize = 0; 2216 int bufsize = 0; 2228 2217 for (i = 0; i < cItems; i++) { 2229 2218 pDragItem = DrgQueryDragitemPtr(pDragInfo, i); … … 2240 2229 goto failure; 2241 2230 } 2242 memset(pszFiles, 0, bufsize); 2231 memset(pszFiles, 0, bufsize); 2243 2232 2244 2233 pszCurFile = pszFiles; … … 2285 2274 //****************************************************************************** 2286 2275 //****************************************************************************** 2287 static BOOL PMDragValidate(PDRAGINFO pDragInfo) 2276 static BOOL PMDragValidate(PDRAGINFO pDragInfo) 2288 2277 { 2289 2278 PDRAGITEM pDragItem; … … 2324 2313 2325 2314 dprintf(("dropped file %s%s", szContainerName, szFileName)); 2326 break; 2315 break; 2327 2316 } 2328 2317 … … 2347 2336 failure: 2348 2337 DrgFreeDraginfo(pDragInfo); 2349 return FALSE; 2338 return FALSE; 2350 2339 } 2351 2340 … … 2376 2365 { 2377 2366 static char szSWPFlags[512]; 2378 2367 2379 2368 szSWPFlags[0] = 0; 2380 2369 … … 2402 2391 if(flags & SWP_ACTIVATE) { 2403 2392 strcat(szSWPFlags, "SWP_ACTIVATE "); 2404 } 2393 } 2405 2394 if(flags & SWP_DEACTIVATE) { 2406 2395 strcat(szSWPFlags, "SWP_DEACTIVATE "); -
trunk/src/user32/user32dbg.def
r9889 r10031 1 ; $Id: user32dbg.def,v 1.1 1 2003-03-03 16:36:26sandervl Exp $1 ; $Id: user32dbg.def,v 1.12 2003-04-23 18:00:59 sandervl Exp $ 2 2 3 3 LIBRARY USER32 INITINSTANCE TERMINSTANCE … … 36 36 ;;;; Present in WGSS50 37 37 ;;;; _GpiQueryDCData = PMGPI.665 38 39 WinQueryProperty = PMMERGE.5450 40 WinRemoveProperty = PMMERGE.5451 41 WinSetProperty = PMMERGE.5452 38 42 39 43 EXPORTS -
trunk/src/user32/win32wbase.cpp
r10013 r10031 1 /* $Id: win32wbase.cpp,v 1.36 6 2003-04-11 15:22:33sandervl Exp $ */1 /* $Id: win32wbase.cpp,v 1.367 2003-04-23 18:00:59 sandervl Exp $ */ 2 2 /* 3 3 * Win32 Window Base Class for OS/2 … … 2361 2361 dwOldStyle = getStyle(); 2362 2362 2363 /* 2364 * SW_SHOWDEFAULT is an reference to the startup info wShowWindow member. 2365 */ 2366 if (nCmdShow == SW_SHOWDEFAULT) 2367 { 2368 nCmdShow = GetProcessDword(0, GPD_STARTF_SHOWWINDOW); 2369 dprintf(("ShowWindow: GetProcessDword(0, GPD_STARTF_SHOWWINDOW) -> %x", nCmdShow)); 2370 } 2371 2372 2363 2373 switch(nCmdShow) 2364 2374 { -
trunk/src/user32/win32wbaseprop.cpp
r3493 r10031 1 /* $Id: win32wbaseprop.cpp,v 1. 1 2000-05-05 11:32:38sandervl Exp $ */1 /* $Id: win32wbaseprop.cpp,v 1.2 2003-04-23 18:01:00 sandervl Exp $ */ 2 2 /* 3 3 * Window properties … … 92 92 { 93 93 /* We need to create it */ 94 if (!(prop = (PROPERTY *) HeapAlloc(GetProcessHeap(), 0,sizeof(*prop) )))94 if (!(prop = (PROPERTY *)_smalloc(sizeof(*prop) ))) 95 95 { 96 96 dprintf(("setProp: malloc failed!!")); … … 99 99 if(HIWORD(str)) 100 100 { 101 if (!(prop->string = HEAP_strdupA(GetProcessHeap(), 0, str))) 101 unsigned cch = strlen(str) + 1; 102 if (!(prop->string = (LPSTR)_smalloc(cch))) 102 103 { 103 HeapFree( GetProcessHeap(), 0, prop);104 _sfree(prop); 104 105 return FALSE; 105 106 } 107 memcpy(prop->string, str, cch); 106 108 } 107 109 else prop->string = (char *)str; //atom … … 158 160 *pprop = prop->next; 159 161 if(HIWORD(prop->string)) 160 HeapFree(GetProcessHeap(), 0,prop->string);161 HeapFree( GetProcessHeap(), 0, prop);162 _sfree(prop->string); 163 _sfree(prop); 162 164 return handle; 163 165 } … … 176 178 next = prop->next; 177 179 if(HIWORD(prop->string)) 178 HeapFree(GetProcessHeap(), 0,prop->string);179 HeapFree(GetProcessHeap(), 0,prop);180 _sfree(prop->string); 181 _sfree(prop); 180 182 } 181 183 propertyList = NULL; -
trunk/src/user32/win32wfake.cpp
r9941 r10031 1 /* $Id: win32wfake.cpp,v 1. 2 2003-03-27 10:42:42sandervl Exp $ */1 /* $Id: win32wfake.cpp,v 1.3 2003-04-23 18:01:01 sandervl Exp $ */ 2 2 /* 3 3 * Win32 Fake Window Class for OS/2 … … 24 24 #include "dbglocal.h" 25 25 26 //****************************************************************************** 27 //****************************************************************************** 26 /** The Odin HWND Property - must be unique for this (custom)build. */ 27 char Win32FakeWindow::szPropOdinHandle[64] = "OdinFakeHWND"; 28 /** Flag which tells if we've inited or not. */ 29 BOOL Win32FakeWindow::fInited = FALSE; 30 31 /** 32 * Creates a fake Odin window for an existing OS/2 window. 33 * 34 * @returns odin handle to the fake window. 35 * @returns NULL on failure. 36 * @param hwndOS2 Window handle. 37 * @param classAtom The atom of the Odin window class. 38 * @author Sander van Leeuwen <sandervl@innotek.de> 39 * @author knut st. osmundsen <bird@anduin.net> 40 */ 28 41 HWND WIN32API CreateFakeWindowEx(HWND hwndOS2, ATOM classAtom) 29 42 { 30 43 Win32FakeWindow *window; 31 44 45 /* 46 * Check if already faked - fail. 47 */ 48 window = Win32FakeWindow::GetWindowFromOS2Handle(hwndOS2); 49 if (window) 50 { 51 dprintf(("CreateFakeWindowEx: already faked!!! (hwndOS2=%x hwndOdin=%x)", 52 hwndOS2, window->getOS2WindowHandle())); 53 return NULL; 54 } 55 56 /* 57 * Now proceed. 58 */ 32 59 window = new Win32FakeWindow(hwndOS2, classAtom); 33 if (window == NULL)34 { 35 dprintf(("Win32FakeWindow creation failed !!"));60 if (window == NULL) 61 { 62 dprintf(("Win32FakeWindow creation failed for %x!!!", hwndOS2)); 36 63 return 0; 37 64 } 38 65 HWND hwnd = window->getWindowHandle(); 39 66 40 67 // set myself as last active popup / window 41 68 window->setLastActive( hwnd ); 42 69 43 70 RELEASE_WNDOBJ(window); 71 dprintf(("CreateFakeWindowEx: created %x for %x", hwnd, hwndOS2)); 44 72 return hwnd; 45 73 } … … 51 79 52 80 window = Win32BaseWindow::GetWindowFromHandle(hwnd); 53 if (!window) {81 if (!window) { 54 82 dprintf(("DestroyFakeWindow, window %x not found", hwnd)); 55 83 SetLastError(ERROR_INVALID_WINDOW_HANDLE); … … 64 92 : Win32BaseWindow() 65 93 { 94 if (!fInited) init(); 95 66 96 OS2Hwnd = OS2HwndFrame = hwndOS2; 67 97 … … 93 123 OSLibQueryWindowRectAbsolute (OS2Hwnd, &rectWindow); 94 124 125 //Store the window handle as a property of the OS/2 window. 126 if (!OSLibSetProperty(OS2Hwnd, szPropOdinHandle, (void*)getWindowHandle(), 0)) 127 { 128 dprintf(("%s: f**k! WinSetProperty(%x,%s,%x,0) failed!!!", __FUNCTION__, 129 hwndOS2, szPropOdinHandle, getWindowHandle())); 130 } 131 132 //See if parent window is either odin or fake window. 133 Win32BaseWindow * pParent = NULL; 134 HWND hwndParentOS2 = OSLibWinQueryWindow(OS2Hwnd, QWOS_PARENT); 135 if (hwndParentOS2 != OSLIB_HWND_DESKTOP) 136 { 137 pParent = Win32FakeWindow::GetWindowFromOS2Handle(hwndParentOS2); 138 if (!pParent) 139 pParent = Win32BaseWindow::GetWindowFromOS2Handle(hwndParentOS2); 140 if (pParent) 141 { 142 setParent(pParent); 143 dprintf(("%s: hwndParentOS2=%x %s window, set as parent.", __FUNCTION__, 144 hwndParentOS2, pParent->isFakeWindow() ? "fake" : "odin")); 145 dwStyle |= WS_CHILD; 146 } 147 else 148 { 149 dprintf(("%s: hwndParentOS2=%x but not a fake nor odin window.", __FUNCTION__, hwndParentOS2)); 150 } 151 } 152 153 //See if owner widnow is either odin or fake window. 154 HWND hwndOwnerOS2 = OSLibWinQueryWindow(OS2Hwnd, QWOS_OWNER); 155 if (hwndOwnerOS2 != OSLIB_HWND_DESKTOP) 156 { 157 Win32BaseWindow * pOwner; 158 if (hwndOwnerOS2 == hwndParentOS2) 159 pOwner = pParent; 160 else 161 { 162 pOwner = Win32FakeWindow::GetWindowFromOS2Handle(hwndOwnerOS2); 163 if (!pOwner) 164 pOwner = Win32BaseWindow::GetWindowFromOS2Handle(hwndOwnerOS2); 165 } 166 if (pOwner) 167 { 168 setOwner(pOwner); 169 dprintf(("%s: hwndOwnerOS2=%x %s window, set as owner.", __FUNCTION__, 170 hwndOwnerOS2, pOwner->isFakeWindow() ? "fake" : "odin")); 171 dwStyle |= WS_CHILD; 172 } 173 else 174 { 175 dprintf(("%s: hwndOwnerOS2=%x but not a fake nor odin window.", __FUNCTION__, hwndOwnerOS2)); 176 } 177 } 178 179 95 180 setOldPMWindowProc(PMWinSubclassFakeWindow(OS2Hwnd)); 96 181 } … … 99 184 Win32FakeWindow::~Win32FakeWindow() 100 185 { 101 186 OSLibRemoveProperty(OS2Hwnd, szPropOdinHandle); 102 187 } 103 188 //****************************************************************************** 104 189 //****************************************************************************** 105 190 PRECT Win32FakeWindow::getWindowRect() 106 { 191 { 107 192 //the coordinates can change without us being notified, so recheck every time 108 OSLibQueryWindowRectAbsolute (OS2Hwnd, &rectWindow); 109 return &rectWindow; 110 } 111 //****************************************************************************** 112 //****************************************************************************** 113 BOOL Win32FakeWindow::SetWindowPos(HWND hwndInsertAfter, int x, int y, int cx, 193 194 Win32BaseWindow * pParent = getParent(); 195 if (pParent) 196 { 197 SWP swp; 198 if (OSLibWinQueryWindowPos(OS2Hwnd, &swp)) 199 { 200 ULONG y = pParent->getWindowHeight(); 201 rectWindow.left = swp.x; 202 rectWindow.right = swp.x + swp.cx; 203 rectWindow.top = y - swp.y - swp.cy; 204 rectWindow.bottom = y - swp.y; 205 } 206 } 207 else 208 OSLibQueryWindowRectAbsolute(OS2Hwnd, &rectWindow); 209 210 return &rectWindow; 211 } 212 //****************************************************************************** 213 //****************************************************************************** 214 BOOL Win32FakeWindow::SetWindowPos(HWND hwndInsertAfter, int x, int y, int cx, 114 215 int cy, UINT fuFlags, BOOL fShowWindow) 115 216 { 217 // we don't trust input either. 116 218 dprintf(("Win32FakeWindow::SetWindowPos; don't change window position, just update internal position")); 117 219 118 //We pretend this window has no parent and its position is in screen coordinates119 220 OSLibWinQueryWindowClientRect(OS2Hwnd, &rectClient); 120 OSLibQueryWindowRectAbsolute (OS2Hwnd, &rectWindow); 121 221 getWindowRect(); 122 222 return TRUE; 123 223 } … … 130 230 //****************************************************************************** 131 231 //****************************************************************************** 232 233 /** 234 * Locates window in linked list and increases reference count if found. 235 * The window object msut be unreferenced after usage. 236 * 237 * @returns Pointer to fake window. 238 * @returns NULL if not found. 239 * @param hwndOS2 OS/2 window handle of the fake window. 240 */ 241 Win32FakeWindow *Win32FakeWindow::GetWindowFromOS2Handle(HWND hwndOS2) 242 { 243 if (fInited) init(); 244 245 HWND hwnd = (HWND)OSLibQueryProperty(hwndOS2, szPropOdinHandle); 246 Win32BaseWindow *pWindow = GetWindowFromHandle(hwnd); 247 if (pWindow) 248 { 249 if (pWindow->isFakeWindow()) 250 return (Win32FakeWindow*)pWindow; 251 DebugInt3(); 252 } 253 dprintf(("Win32FakeWindow::GetWindowFromOS2Handle(%x) -> null", hwndOS2)); 254 return NULL; 255 } 256 257 258 /** 259 * Init the global(s). 260 * It will make the name property unique among the odin instances. 261 * 262 * This will chagne szPropOdinHandle and fInited. 263 */ 264 void Win32FakeWindow::init() 265 { 266 if (fInited) 267 return; 268 269 /* 270 * Get the name of this dll. 271 */ 272 extern int _System DosQueryModFromEIP(HMODULE *phMod, ULONG *pObjNum, ULONG BuffLen, PCHAR pBuff, ULONG *pOffset, ULONG Address); 273 char szModName[260]; 274 HMODULE hmod; 275 ULONG iObj, offObj; 276 USHORT GetFS(); 277 int rc = DosQueryModFromEIP(&hmod, &iObj, sizeof(szModName), &szModName[0], &offObj, (ULONG)Win32FakeWindow::init); 278 SetFS(rc); 279 if (rc) 280 { 281 dprintf(("Win32FakeWindow::init: DosQueryModFromEIP failed!!!")); 282 DebugInt3(); 283 return; 284 } 285 char *psz = strrchr(szModName, '\\'); 286 if (!psz) 287 psz = szModName; 288 if (strchr(szModName, '.')) 289 *strchr(szModName, '.') = '\0'; 290 291 fInited = 1; 292 strcat(szPropOdinHandle, psz); 293 dprintf(("Win32FakeWindow::init: szPropOdinHandle='%s'", szPropOdinHandle)); 294 } 295 -
trunk/src/user32/win32wfake.h
r9941 r10031 1 /* $Id: win32wfake.h,v 1. 2 2003-03-27 10:42:42sandervl Exp $ */1 /* $Id: win32wfake.h,v 1.3 2003-04-23 18:01:01 sandervl Exp $ */ 2 2 /* 3 3 * Win32 Fake Window Class for OS/2 … … 26 26 virtual BOOL isFakeWindow(); 27 27 28 static Win32FakeWindow *GetWindowFromOS2Handle(HWND hwnd); 29 static void init(); 30 static char szPropOdinHandle[64]; 31 static BOOL fInited; 32 28 33 protected: 29 34 private:
Note:
See TracChangeset
for help on using the changeset viewer.