From ed9a0cb22a046e1990af7b004a935a2664ff98f6 Mon Sep 17 00:00:00 2001 From: Filip Navara Date: Sat, 18 Oct 2003 17:35:44 +0000 Subject: [PATCH] - Fixed registry entries for Explorer (once more) - Added very basic window relinking to WinPosSetWindowPos svn path=/trunk/; revision=6356 --- reactos/bootdata/hivedef.inf | 40 ++++++++++----------- reactos/bootdata/hivesft.inf | 32 ++++++++--------- reactos/subsys/win32k/include/window.h | 3 ++ reactos/subsys/win32k/ntuser/winpos.c | 49 ++++++++++++++++++++++++-- 4 files changed, 83 insertions(+), 41 deletions(-) diff --git a/reactos/bootdata/hivedef.inf b/reactos/bootdata/hivedef.inf index 8244d623d81..5c16f424e9d 100644 --- a/reactos/bootdata/hivedef.inf +++ b/reactos/bootdata/hivedef.inf @@ -10,29 +10,29 @@ HKCU,"Control Panel\Appearance",,0x00000012 HKCU,"Environment",,0x00000012 ; application compatibility settings for Windows 95 -HKCU,"Software\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers\WIN95","MajorVersion",0x00010001,0x00000004 -HKCU,"Software\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers\WIN95","MinorVersion",0x00010001,0x0000000A -HKCU,"Software\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers\WIN95","BuildNumber",0x00010001,0x000003B6 -HKCU,"Software\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers\WIN95","PlatformId",0x00010001,0x00000001 +HKCU,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers\WIN95","MajorVersion",0x00010001,0x00000004 +HKCU,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers\WIN95","MinorVersion",0x00010001,0x0000000A +HKCU,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers\WIN95","BuildNumber",0x00010001,0x000003B6 +HKCU,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers\WIN95","PlatformId",0x00010001,0x00000001 ; application compatibility settings for Windows 98/ME -HKCU,"Software\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers\WIN98","MajorVersion",0x00010001,0x00000004 -HKCU,"Software\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers\WIN98","MinorVersion",0x00010001,0x00000000 -HKCU,"Software\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers\WIN98","BuildNumber",0x00010001,0x000008AE -HKCU,"Software\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers\WIN98","PlatformId",0x00010001,0x00000001 +HKCU,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers\WIN98","MajorVersion",0x00010001,0x00000004 +HKCU,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers\WIN98","MinorVersion",0x00010001,0x00000000 +HKCU,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers\WIN98","BuildNumber",0x00010001,0x000008AE +HKCU,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers\WIN98","PlatformId",0x00010001,0x00000001 ; application compatibility settings for Windows NT 4 Service Pack 5 -HKCU,"Software\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers\NT4SP5","MajorVersion",0x00010001,0x00000004 -HKCU,"Software\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers\NT4SP5","MinorVersion",0x00010001,0x00000000 -HKCU,"Software\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers\NT4SP5","BuildNumber",0x00010001,0x00000565 -HKCU,"Software\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers\NT4SP5","PlatformId",0x00010001,0x00000002 +HKCU,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers\NT4SP5","MajorVersion",0x00010001,0x00000004 +HKCU,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers\NT4SP5","MinorVersion",0x00010001,0x00000000 +HKCU,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers\NT4SP5","BuildNumber",0x00010001,0x00000565 +HKCU,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers\NT4SP5","PlatformId",0x00010001,0x00000002 ; application compatibility settings for Windows 2000 -HKCU,"Software\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers\WIN2000","MajorVersion",0x00010001,0x00000005 -HKCU,"Software\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers\WIN2000","MinorVersion",0x00010001,0x00000000 -HKCU,"Software\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers\WIN2000","BuildNumber",0x00010001,0x00000893 -HKCU,"Software\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers\WIN2000","PlatformId",0x00010001,0x00000002 +HKCU,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers\WIN2000","MajorVersion",0x00010001,0x00000005 +HKCU,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers\WIN2000","MinorVersion",0x00010001,0x00000000 +HKCU,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers\WIN2000","BuildNumber",0x00010001,0x00000893 +HKCU,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers\WIN2000","PlatformId",0x00010001,0x00000002 ; application compatibility settings for Windows XP -HKCU,"Software\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers\WINXP","MajorVersion",0x00010001,0x00000005 -HKCU,"Software\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers\WINXP","MinorVersion",0x00010001,0x00000001 -HKCU,"Software\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers\WINXP","BuildNumber",0x00010001,0x00000A28 -HKCU,"Software\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers\WINXP","PlatformId",0x00010001,0x00000002 +HKCU,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers\WINXP","MajorVersion",0x00010001,0x00000005 +HKCU,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers\WINXP","MinorVersion",0x00010001,0x00000001 +HKCU,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers\WINXP","BuildNumber",0x00010001,0x00000A28 +HKCU,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers\WINXP","PlatformId",0x00010001,0x00000002 ; EOF diff --git a/reactos/bootdata/hivesft.inf b/reactos/bootdata/hivesft.inf index d0f1329f824..2d5bcbb9865 100644 --- a/reactos/bootdata/hivesft.inf +++ b/reactos/bootdata/hivesft.inf @@ -3,33 +3,29 @@ Signature="$ReactOS$ [AddReg] - HKLM,"SOFTWARE\ReactOS\Windows NT\CurrentVersion\WinLogon","Shell",0x00020000,"%SystemRoot%\System32\cmd.exe" HKLM,"SOFTWARE\ReactOS\Windows NT\CurrentVersion\WinLogon","StartServices",0x00010001,0x00000001 -HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders","Desktop",0x00020000,"%SystemRoot%\Desktop" HKCU,"SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders","Desktop",0x00020000,"%SystemRoot%\Desktop" -HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders","AppData",0x00020000,"%SystemRoot%\Application Data" HKCU,"SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders","AppData",0x00020000,"%SystemRoot%\Application Data" -HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders","Start Menu",0x00020000,"%SystemRoot%\Start Menu" HKCU,"SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders","Start Menu",0x00020000,"%SystemRoot%\Start Menu" ; For Shell32.dll -HKLM,"SOFTWARE\Classes\CLSID\{00021400-0000-0000-C000-000000000046}","",0x00020000,"Desktop" -HKLM,"SOFTWARE\Classes\CLSID\{00021400-0000-0000-C000-000000000046}\InProcServer32","",0x00020000,"shell32.dll" -HKLM,"SOFTWARE\Classes\CLSID\{00021400-0000-0000-C000-000000000046}\InProcServer32","ThreadingModel",0x00020000,"Apartment" -HKLM,"SOFTWARE\Classes\CLSID\{00021401-0000-0000-C000-000000000046}","",0x00020000,"Shortcut" -HKLM,"SOFTWARE\Classes\CLSID\{00021401-0000-0000-C000-000000000046}\InProcServer32","",0x00020000,"shell32.dll" -HKLM,"SOFTWARE\Classes\CLSID\{00021401-0000-0000-C000-000000000046}\InProcServer32","ThreadingModel",0x00020000,"Apartment" -HKLM,"SOFTWARE\Classes\CLSID\{00021401-0000-0000-C000-000000000046}\shellex\MayChangeDefaultMenu]","",0x00020000,"" +HKLM,"SOFTWARE\Classes\CLSID\{00021400-0000-0000-C000-000000000046}","",0x00000002,"Desktop" +HKLM,"SOFTWARE\Classes\CLSID\{00021400-0000-0000-C000-000000000046}\InProcServer32","",0x00000002,"shell32.dll" +HKLM,"SOFTWARE\Classes\CLSID\{00021400-0000-0000-C000-000000000046}\InProcServer32","ThreadingModel",0x00000002,"Apartment" +HKLM,"SOFTWARE\Classes\CLSID\{00021401-0000-0000-C000-000000000046}","",0x00000002,"Shortcut" +HKLM,"SOFTWARE\Classes\CLSID\{00021401-0000-0000-C000-000000000046}\InProcServer32","",0x00000002,"shell32.dll" +HKLM,"SOFTWARE\Classes\CLSID\{00021401-0000-0000-C000-000000000046}\InProcServer32","ThreadingModel",0x00000002,"Apartment" +HKLM,"SOFTWARE\Classes\CLSID\{00021401-0000-0000-C000-000000000046}\shellex\MayChangeDefaultMenu]","",0x00000002,"" ; For Ole32.dll -HKLM,"SOFTWARE\Classes\Interface\{00000000-0000-0000-C000-000000000046}","",0x00020000,"IUnknown" -HKLM,"SOFTWARE\Classes\Interface\{00000000-0000-0000-C000-000000000046}\BaseInterface","",0x00020000,"" -HKLM,"SOFTWARE\Classes\Interface\{00000000-0000-0000-C000-000000000046}\NumMethods","",0x00020000,"3" -HKLM,"SOFTWARE\Classes\Interface\{00000000-0000-0000-C000-000000000046}\ProxyStubClsid32","",0x00020000,"{00000320-0000-0000-C000-000000000046}" -HKLM,"SOFTWARE\Classes\CLSID\{00000320-0000-0000-C000-000000000046}","",0x00020000,"PSFactoryBuffer" -HKLM,"SOFTWARE\Classes\CLSID\{00000320-0000-0000-C000-000000000046}\InProcServer32","",0x00020000,"ole32.dll" -HKLM,"SOFTWARE\Classes\CLSID\{00000320-0000-0000-C000-000000000046}\InProcServer32","ThreadingModel",0x00020000,"Both" +HKLM,"SOFTWARE\Classes\Interface\{00000000-0000-0000-C000-000000000046}","",0x00000002,"IUnknown" +HKLM,"SOFTWARE\Classes\Interface\{00000000-0000-0000-C000-000000000046}\BaseInterface","",0x00000002,"" +HKLM,"SOFTWARE\Classes\Interface\{00000000-0000-0000-C000-000000000046}\NumMethods","",0x00000002,"3" +HKLM,"SOFTWARE\Classes\Interface\{00000000-0000-0000-C000-000000000046}\ProxyStubClsid32","",0x00000002,"{00000320-0000-0000-C000-000000000046}" +HKLM,"SOFTWARE\Classes\CLSID\{00000320-0000-0000-C000-000000000046}","",0x00000002,"PSFactoryBuffer" +HKLM,"SOFTWARE\Classes\CLSID\{00000320-0000-0000-C000-000000000046}\InProcServer32","",0x00000002,"ole32.dll" +HKLM,"SOFTWARE\Classes\CLSID\{00000320-0000-0000-C000-000000000046}\InProcServer32","ThreadingModel",0x00000002,"Both" ; EOF diff --git a/reactos/subsys/win32k/include/window.h b/reactos/subsys/win32k/include/window.h index 7607ed6c866..cba215fd07c 100644 --- a/reactos/subsys/win32k/include/window.h +++ b/reactos/subsys/win32k/include/window.h @@ -159,6 +159,9 @@ IntGetWindowThreadProcessId(PWINDOW_OBJECT Wnd, PDWORD pid); VOID FASTCALL IntUnlinkWindow(PWINDOW_OBJECT Wnd); +VOID FASTCALL +IntLinkWindow(PWINDOW_OBJECT Wnd, PWINDOW_OBJECT WndParent, PWINDOW_OBJECT WndPrevSibling); + ULONG UserHasDlgFrameStyle(ULONG Style, ULONG ExStyle); diff --git a/reactos/subsys/win32k/ntuser/winpos.c b/reactos/subsys/win32k/ntuser/winpos.c index 5f934dab759..caaa891932d 100644 --- a/reactos/subsys/win32k/ntuser/winpos.c +++ b/reactos/subsys/win32k/ntuser/winpos.c @@ -16,7 +16,7 @@ * along with this program; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */ -/* $Id: winpos.c,v 1.32 2003/10/17 17:38:38 mf Exp $ +/* $Id: winpos.c,v 1.33 2003/10/18 17:35:44 navaraf Exp $ * * COPYRIGHT: See COPYING in the top level directory * PROJECT: ReactOS kernel @@ -662,7 +662,50 @@ WinPosSetWindowPos(HWND Wnd, HWND WndInsertAfter, INT x, INT y, INT cx, WvrFlags = WinPosDoNCCALCSize(Window, &WinPos, &NewWindowRect, &NewClientRect); - /* FIXME: Relink windows. (also take into account shell window in hwndShellWindow) */ + /* + * FIXME: Relink windows. (also take into account shell window in hwndShellWindow) + */ + if (!(WinPos.flags & SWP_NOZORDER) && WinPos.hwndInsertAfter != WinPos.hwnd) + { + PWINDOW_OBJECT ParentWindow; + PWINDOW_OBJECT InsertAfterWindow; + + ParentWindow = IntGetWindowObject(Window->ParentHandle); + if (WndInsertAfter == HWND_TOP) + { + InsertAfterWindow = NULL; + } + else if (WndInsertAfter != HWND_BOTTOM) + { + InsertAfterWindow = ParentWindow->LastChild; + } + else + { + InsertAfterWindow = IntGetWindowObject(WinPos.hwndInsertAfter); + } + + if (InsertAfterWindow != NULL && + InsertAfterWindow->ParentHandle != Window->ParentHandle) + { + ExAcquireFastMutexUnsafe(&ParentWindow->ChildrenListLock); + IntUnlinkWindow(Window); + ExReleaseFastMutexUnsafe(&ParentWindow->ChildrenListLock); + ParentWindow = IntGetWindowObject(InsertAfterWindow->ParentHandle); + ExAcquireFastMutexUnsafe(&ParentWindow->ChildrenListLock); + IntLinkWindow(Window, ParentWindow, InsertAfterWindow); + ExReleaseFastMutexUnsafe(&ParentWindow->ChildrenListLock); + } + else + { + ExAcquireFastMutexUnsafe(&ParentWindow->ChildrenListLock); + IntUnlinkWindow(Window); + IntLinkWindow(Window, ParentWindow, InsertAfterWindow); + ExReleaseFastMutexUnsafe(&ParentWindow->ChildrenListLock); + } + + IntReleaseWindowObject(ParentWindow); + IntReleaseWindowObject(InsertAfterWindow); + } /* FIXME: Reset active DCEs */ @@ -857,7 +900,7 @@ WinPosSetWindowPos(HWND Wnd, HWND WndInsertAfter, INT x, INT y, INT cx, /* FIXME: Check some conditions before doing this. */ IntSendWINDOWPOSCHANGEDMessage(WinPos.hwnd, &WinPos); - ObmDereferenceObject(Window); + IntReleaseWindowObject(Window); return(TRUE); }