some more work on system menus
authorThomas Bluemel <thomas@reactsoft.com>
Thu, 21 Aug 2003 16:04:26 +0000 (16:04 +0000)
committerThomas Bluemel <thomas@reactsoft.com>
Thu, 21 Aug 2003 16:04:26 +0000 (16:04 +0000)
svn path=/trunk/; revision=5723

reactos/include/win32k/ntuser.h
reactos/lib/user32/misc/winsta.c
reactos/lib/user32/user32.rc
reactos/subsys/win32k/ntuser/misc.c
reactos/subsys/win32k/ntuser/window.c

index 20aae78..aee6167 100644 (file)
@@ -177,6 +177,7 @@ NtUserCallOneParam(
 #define TWOPARAM_ROUTINE_SWITCHTOTHISWINDOW 0x56
 #define TWOPARAM_ROUTINE_VALIDATERGN        0x57
 #define TWOPARAM_ROUTINE_SETWNDCONTEXTHLPID 0x58
+#define TWOPARAM_ROUTINE_SETWINSTASYSMENU   0x59
 DWORD
 STDCALL
 NtUserCallTwoParam(
index d7b2269..4db1d3a 100644 (file)
@@ -1,4 +1,4 @@
-/* $Id: winsta.c,v 1.9 2003/08/07 04:03:24 royce Exp $
+/* $Id: winsta.c,v 1.10 2003/08/21 16:04:26 weiden Exp $
  *
  * COPYRIGHT:       See COPYING in the top level directory
  * PROJECT:         ReactOS user32.dll
@@ -67,13 +67,29 @@ CreateWindowStationW(LPWSTR lpwinsta,
                     ACCESS_MASK dwDesiredAccess,
                     LPSECURITY_ATTRIBUTES lpsa)
 {
+  HWINSTA res;
   UNICODE_STRING WindowStationName;
+  HMENU SysMenuTemplate;
+  HMODULE hUser32;
   
   RtlInitUnicodeString(&WindowStationName, lpwinsta);
   
-  return NtUserCreateWindowStation(&WindowStationName,
+  res = NtUserCreateWindowStation(&WindowStationName,
                                   dwDesiredAccess,
                                   lpsa, 0, 0, 0);
+                                  
+  hUser32 = GetModuleHandleW(L"user32.dll");
+  SysMenuTemplate = LoadMenuW(hUser32, L"SYSMENU");
+                                  
+  if(SysMenuTemplate)
+  {
+    NtUserCallTwoParam((DWORD)res, (DWORD)SysMenuTemplate, 
+                       TWOPARAM_ROUTINE_SETWINSTASYSMENU);
+    /* we don't need the menu anymore, it's been cloned */
+    DestroyMenu(SysMenuTemplate);
+  }
+    
+  return res;
 }
 
 
index b56af33..761f5f2 100644 (file)
@@ -85,15 +85,18 @@ EDITMENU MENU LOADONCALL MOVEABLE DISCARDABLE
 
 SYSMENU MENU LOADONCALL MOVEABLE DISCARDABLE
 {
-  MENUITEM "&Restore", 61728
-  MENUITEM "&Move", 61456
-  MENUITEM "&Size", 61440
-  MENUITEM "Mi&nimize", 61472
-  MENUITEM "Ma&ximize", 61488
-  MENUITEM SEPARATOR
-  MENUITEM "&Close\tAlt-F4", 61536
+  POPUP ""
+  BEGIN
+    MENUITEM "&Restore", 61728
+    MENUITEM "&Move", 61456
+    MENUITEM "&Size", 61440
+    MENUITEM "Mi&nimize", 61472
+    MENUITEM "Ma&ximize", 61488
+    MENUITEM SEPARATOR
+    MENUITEM "&Close\tAlt-F4", 61536
 //  MENUITEM SEPARATOR
 //  MENUITEM "&Switch to ...\tCtrl-Esc", 61744
 //  MENUITEM SEPARATOR
 //  MENUITEM "&About ReactOS ...", 61761
+  END
 }
index 17a1946..0df5333 100644 (file)
@@ -1,4 +1,4 @@
-/* $Id: misc.c,v 1.7 2003/08/19 11:48:49 weiden Exp $
+/* $Id: misc.c,v 1.8 2003/08/21 16:04:26 weiden Exp $
  *
  * COPYRIGHT:        See COPYING in the top level directory
  * PROJECT:          ReactOS kernel
@@ -130,13 +130,19 @@ NtUserCallTwoParam(
       if(!WindowObject)
       {
         SetLastWin32Error(ERROR_INVALID_HANDLE);
-        return FALSE;
+        return (DWORD)FALSE;
       }
       
       WindowObject->ContextHelpId = Param2;
       
       IntReleaseWindowObject(WindowObject);
-      return TRUE;
+      return (DWORD)TRUE;
+      
+    case TWOPARAM_ROUTINE_SETWINSTASYSMENU:
+      if(!Param1 || !Param2)
+        return (DWORD)FALSE;
+      /* FIXME clone menu and assign it to the window station */
+      return (DWORD)TRUE;
 
   }
   DPRINT1("Calling invalid routine number 0x%x in NtUserCallOneParam()\n Param1=0x%x Parm2=0x%x\n",
index 23103bd..7afb941 100644 (file)
@@ -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: window.c,v 1.98 2003/08/21 15:26:19 weiden Exp $
+/* $Id: window.c,v 1.99 2003/08/21 16:04:26 weiden Exp $
  *
  * COPYRIGHT:        See COPYING in the top level directory
  * PROJECT:          ReactOS kernel
@@ -304,7 +304,7 @@ IntReleaseWindowObject(PWINDOW_OBJECT Window)
 HMENU FASTCALL
 IntGetSystemMenu(PWINDOW_OBJECT WindowObject, BOOL bRevert)
 {
-  PMENU_OBJECT MenuObject;
+  PMENU_OBJECT MenuObject, NewMenuObject;
   PW32PROCESS W32Process;
 
   if(bRevert)
@@ -325,18 +325,15 @@ IntGetSystemMenu(PWINDOW_OBJECT WindowObject, BOOL bRevert)
       if(!MenuObject)
         return (HMENU)0;
 
-      MenuObject = IntCloneMenu(MenuObject);
-      if(MenuObject)
+      NewMenuObject = IntCloneMenu(MenuObject);
+      if(NewMenuObject)
       {
-        WindowObject->SystemMenu = MenuObject->Self;
-        MenuObject->IsSystemMenu = TRUE;
+        WindowObject->SystemMenu = NewMenuObject->Self;
+        NewMenuObject->IsSystemMenu = TRUE;
+        IntReleaseMenuObject(NewMenuObject);
       }
+      IntReleaseMenuObject(MenuObject);
     }
-    /* FIXME Load system menu here? 
-    else
-    {
-    
-    }*/
     return (HMENU)0;
   }
   else