[USER32]
[reactos.git] / reactos / dll / win32 / user32 / misc / stubs.c
index 7029b92..06608d8 100644 (file)
@@ -1,5 +1,4 @@
-/* $Id$
- *
+/*
  * COPYRIGHT:       See COPYING in the top level directory
  * PROJECT:         ReactOS user32.dll
  * FILE:            lib/user32/misc/stubs.c
 
 WINE_DEFAULT_DEBUG_CHANNEL(user32);
 
-/*
- * @unimplemented
- */
-BOOL
-STDCALL
-AttachThreadInput(
-  DWORD idAttach,
-  DWORD idAttachTo,
-  BOOL fAttach)
-{
-  UNIMPLEMENTED;
-  return FALSE;
-}
-
-
-/*
- * @unimplemented
- */
-long
-STDCALL
-BroadcastSystemMessageA(
-  DWORD dwFlags,
-  LPDWORD lpdwRecipients,
-  UINT uiMessage,
-  WPARAM wParam,
-  LPARAM lParam)
-{
-  UNIMPLEMENTED;
-  return 0;
-}
-
-
-/*
- * @unimplemented
- */
-long
-STDCALL
-BroadcastSystemMessageW(
-  DWORD dwFlags,
-  LPDWORD lpdwRecipients,
-  UINT uiMessage,
-  WPARAM wParam,
-  LPARAM lParam)
-{
-  UNIMPLEMENTED;
-  return 0;
-}
-
-
-/*
- * @unimplemented
- */
-int
-STDCALL
-GetMouseMovePointsEx(
-  UINT cbSize,
-  LPMOUSEMOVEPOINT lppt,
-  LPMOUSEMOVEPOINT lpptBuf,
-  int nBufPoints,
-  DWORD resolution)
-{
-  UNIMPLEMENTED;
-  return 0;
-}
-
-
-/*
- * @unimplemented
- */
-BOOL
-STDCALL
-LockWindowUpdate(
-  HWND hWndLock)
-{
-  UNIMPLEMENTED;
-  return FALSE;
-}
-
-
-/*
- * @unimplemented
- */
-BOOL
-STDCALL
-LockWorkStation(VOID)
-{
-  UNIMPLEMENTED;
-  return FALSE;
-}
-
-
 /*
  * @unimplemented
  */
 DWORD
-STDCALL
+WINAPI
 WaitForInputIdle(
   HANDLE hProcess,
   DWORD dwMilliseconds)
 {
-  UNIMPLEMENTED;
-  return 0;
+// Need to call NtQueryInformationProcess and send ProcessId not hProcess.
+  return NtUserWaitForInputIdle(hProcess, dwMilliseconds, FALSE);
 }
 
 /******************************************************************************
@@ -130,7 +38,7 @@ WaitForInputIdle(
  * @unimplemented
  */
 VOID
-STDCALL
+WINAPI
 SetDebugErrorLevel( DWORD dwLevel )
 {
     DbgPrint("(%ld): stub\n", dwLevel);
@@ -138,36 +46,56 @@ SetDebugErrorLevel( DWORD dwLevel )
 
 
 /*
- * @unimplemented
+ * @implemented
  */
 DWORD
-STDCALL
-GetAppCompatFlags ( HTASK hTask )
+WINAPI
+GetAppCompatFlags(HTASK hTask)
 {
-  UNIMPLEMENTED;
-  return FALSE;
+    PCLIENTINFO pci = GetWin32ClientInfo();
+
+    return pci->dwCompatFlags;
+}
+
+/*
+ * @implemented
+ */
+DWORD
+WINAPI
+GetAppCompatFlags2(HTASK hTask)
+{
+    PCLIENTINFO pci = GetWin32ClientInfo();
+
+    return pci->dwCompatFlags2;
 }
 
 /*
  * @unimplemented
  */
 UINT
-STDCALL
+WINAPI
 GetInternalWindowPos(
                     HWND hwnd,
                     LPRECT rectWnd,
                     LPPOINT ptIcon
                     )
 {
-  UNIMPLEMENTED;
-  return FALSE;
+    WINDOWPLACEMENT wndpl;
+
+    if (GetWindowPlacement(hwnd, &wndpl))
+    {
+               if (rectWnd) *rectWnd = wndpl.rcNormalPosition;
+               if (ptIcon)  *ptIcon = wndpl.ptMinPosition;
+               return wndpl.showCmd;
+    }
+    return 0;
 }
 
 /*
  * @unimplemented
  */
 VOID
-STDCALL
+WINAPI
 LoadLocalFonts ( VOID )
 {
   UNIMPLEMENTED;
@@ -177,7 +105,7 @@ LoadLocalFonts ( VOID )
  * @unimplemented
  */
 VOID
-STDCALL
+WINAPI
 LoadRemoteFonts ( VOID )
 {
   UNIMPLEMENTED;
@@ -187,110 +115,115 @@ LoadRemoteFonts ( VOID )
  * @unimplemented
  */
 VOID
-STDCALL
-SetInternalWindowPos(
-                    HWND    hwnd,
-                    UINT    showCmd,
-                    LPRECT  rect,
-                    LPPOINT pt
-                    )
-{
-  UNIMPLEMENTED;
-}
-
-/*
- * @unimplemented
- */
-VOID
-STDCALL
+WINAPI
 RegisterSystemThread ( DWORD flags, DWORD reserved )
 {
   UNIMPLEMENTED;
 }
 
-/*
- * @unimplemented
- */
-DWORD
-STDCALL
-RegisterTasklist ( DWORD x )
-{
-  UNIMPLEMENTED;
-  return FALSE;
-}
 
 /*
- * @unimplemented
- */
-DWORD
-STDCALL
-DragObject(
-          HWND    hwnd1,
-          HWND    hwnd2,
-          UINT    u1,
-          DWORD   dw1,
-          HCURSOR hc1
-          )
-{
-  return NtUserDragObject(hwnd1, hwnd2, u1, dw1, hc1);
-}
-
-
-
-
-/*
- * @unimplemented
+ * @implemented
  */
 UINT
-STDCALL
+WINAPI
 UserRealizePalette ( HDC hDC )
 {
-  UNIMPLEMENTED;
-  return FALSE;
+  return NtUserCallOneParam((DWORD_PTR) hDC, ONEPARAM_ROUTINE_REALIZEPALETTE);
 }
 
-/*
- * @unimplemented
- */
-HANDLE
-WINAPI
-SetSysColorsTemp(
-                const COLORREF *pPens,
-                const HBRUSH   *pBrushes,
-                INT            n
-                )
-{
-  UNIMPLEMENTED;
-  return FALSE;
-}
 
-/*
- * @unimplemented
+/*************************************************************************
+ *             SetSysColorsTemp (USER32.@) (Wine 10/22/2008)
+ *
+ * UNDOCUMENTED !!
+ *
+ * Called by W98SE desk.cpl Control Panel Applet:
+ * handle = SetSysColorsTemp(ptr, ptr, nCount);     ("set" call)
+ * result = SetSysColorsTemp(NULL, NULL, handle);   ("restore" call)
+ *
+ * pPens is an array of COLORREF values, which seems to be used
+ * to indicate the color values to create new pens with.
+ *
+ * pBrushes is an array of solid brush handles (returned by a previous
+ * CreateSolidBrush), which seems to contain the brush handles to set
+ * for the system colors.
+ *
+ * n seems to be used for
+ *   a) indicating the number of entries to operate on (length of pPens,
+ *      pBrushes)
+ *   b) passing the handle that points to the previously used color settings.
+ *      I couldn't figure out in hell what kind of handle this is on
+ *      Windows. I just use a heap handle instead. Shouldn't matter anyway.
+ *
+ * RETURNS
+ *     heap handle of our own copy of the current syscolors in case of
+ *                 "set" call, i.e. pPens, pBrushes != NULL.
+ *     TRUE (unconditionally !) in case of "restore" call,
+ *          i.e. pPens, pBrushes == NULL.
+ *     FALSE in case of either pPens != NULL and pBrushes == NULL
+ *          or pPens == NULL and pBrushes != NULL.
+ *
+ * I'm not sure whether this implementation is 100% correct. [AM]
  */
-WORD
-STDCALL
-CascadeChildWindows ( HWND hWndParent, WORD wFlags )
-{
-  UNIMPLEMENTED;
-  return FALSE;
-}
 
-/*
- * @unimplemented
- */
-WORD
-STDCALL
-TileChildWindows ( HWND hWndParent, WORD wFlags )
-{
-  UNIMPLEMENTED;
-  return FALSE;
+static HPEN SysColorPens[COLOR_MENUBAR + 1];
+static HBRUSH SysColorBrushes[COLOR_MENUBAR + 1];
+
+DWORD_PTR
+WINAPI
+SetSysColorsTemp(const COLORREF *pPens,
+                 const HBRUSH *pBrushes,
+                                DWORD_PTR n)
+{
+    DWORD i;
+
+    if (pPens && pBrushes) /* "set" call */
+    {
+        /* allocate our structure to remember old colors */
+        LPVOID pOldCol = HeapAlloc(GetProcessHeap(), 0, sizeof(DWORD)+n*sizeof(HPEN)+n*sizeof(HBRUSH));
+        LPVOID p = pOldCol;
+        *(DWORD_PTR *)p = n; p = (char*)p + sizeof(DWORD);
+        memcpy(p, SysColorPens, n*sizeof(HPEN)); p = (char*)p + n*sizeof(HPEN);
+        memcpy(p, SysColorBrushes, n*sizeof(HBRUSH)); p = (char*)p + n*sizeof(HBRUSH);
+
+        for (i=0; i < n; i++)
+        {
+            SysColorPens[i] = CreatePen( PS_SOLID, 1, pPens[i] );
+            SysColorBrushes[i] = pBrushes[i];
+        }
+
+        return (DWORD_PTR) pOldCol;
+    }
+    if (!pPens && !pBrushes) /* "restore" call */
+    {
+        LPVOID pOldCol = (LPVOID)n; /* FIXME: not 64-bit safe */
+        LPVOID p = pOldCol;
+        DWORD nCount = *(DWORD *)p;
+        p = (char*)p + sizeof(DWORD);
+
+        for (i=0; i < nCount; i++)
+        {
+            DeleteObject(SysColorPens[i]);
+            SysColorPens[i] = *(HPEN *)p; p = (char*)p + sizeof(HPEN);
+        }
+        for (i=0; i < nCount; i++)
+        {
+            SysColorBrushes[i] = *(HBRUSH *)p; p = (char*)p + sizeof(HBRUSH);
+        }
+        /* get rid of storage structure */
+        HeapFree(GetProcessHeap(), 0, pOldCol);
+
+        return TRUE;
+    }
+    return FALSE;
 }
 
 /*
  * @unimplemented
  */
 HDESK
-STDCALL
+WINAPI
 GetInputDesktop ( VOID )
 {
   UNIMPLEMENTED;
@@ -301,7 +234,7 @@ GetInputDesktop ( VOID )
  * @unimplemented
  */
 BOOL
-STDCALL
+WINAPI
 GetAccCursorInfo ( PCURSORINFO pci )
 {
   UNIMPLEMENTED;
@@ -312,7 +245,7 @@ GetAccCursorInfo ( PCURSORINFO pci )
  * @unimplemented
  */
 BOOL
-STDCALL
+WINAPI
 ClientThreadSetup ( VOID )
 {
   UNIMPLEMENTED;
@@ -323,7 +256,7 @@ ClientThreadSetup ( VOID )
  * @unimplemented
  */
 UINT
-STDCALL
+WINAPI
 GetRawInputDeviceInfoW(
     HANDLE hDevice,
     UINT uiCommand,
@@ -331,31 +264,14 @@ GetRawInputDeviceInfoW(
     PUINT pcbSize)
 {
   UNIMPLEMENTED;
-  return FALSE;
-}
-
-/*
- * @unimplemented
- */
-LONG
-STDCALL
-BroadcastSystemMessageExW(
-    DWORD dwflags,
-    LPDWORD lpdwRecipients,
-    UINT uiMessage,
-    WPARAM wParam,
-    LPARAM lParam,
-    PBSMINFO pBSMInfo)
-{
-  UNIMPLEMENTED;
-  return FALSE;
+  return 0;
 }
 
 /*
  * @unimplemented
  */
 LONG
-STDCALL
+WINAPI
 CsrBroadcastSystemMessageExW(
     DWORD dwflags,
     LPDWORD lpdwRecipients,
@@ -372,7 +288,7 @@ CsrBroadcastSystemMessageExW(
  * @unimplemented
  */
 UINT
-STDCALL
+WINAPI
 GetRawInputDeviceInfoA(
     HANDLE hDevice,
     UINT uiCommand,
@@ -380,31 +296,14 @@ GetRawInputDeviceInfoA(
     PUINT pcbSize)
 {
   UNIMPLEMENTED;
-  return FALSE;
-}
-
-/*
- * @unimplemented
- */
-LONG
-STDCALL
-BroadcastSystemMessageExA(
-    DWORD dwflags,
-    LPDWORD lpdwRecipients,
-    UINT uiMessage,
-    WPARAM wParam,
-    LPARAM lParam,
-    PBSMINFO pBSMInfo)
-{
-  UNIMPLEMENTED;
-  return FALSE;
+  return 0;
 }
 
 /*
  * @unimplemented
  */
 BOOL
-STDCALL
+WINAPI
 AlignRects(LPRECT rect, DWORD b, DWORD c, DWORD d)
 {
   UNIMPLEMENTED;
@@ -415,94 +314,83 @@ AlignRects(LPRECT rect, DWORD b, DWORD c, DWORD d)
  * @unimplemented
  */
 LRESULT
-STDCALL
+WINAPI
 DefRawInputProc(
     PRAWINPUT* paRawInput,
     INT nInput,
     UINT cbSizeHeader)
 {
   UNIMPLEMENTED;
-  return FALSE;
-}
-
-/*
- * @unimplemented
- */
-BOOL
-STDCALL
-GetLayeredWindowAttributes(
-    HWND hwnd,
-    COLORREF *pcrKey,
-    BYTE *pbAlpha,
-    DWORD *pdwFlags)
-{
-  UNIMPLEMENTED;
-  return FALSE;
+  return 0;
 }
 
 /*
  * @unimplemented
  */
 UINT
-STDCALL
+WINAPI
 GetRawInputBuffer(
-    PRAWINPUT   pData,
-    PUINT    pcbSize,
-    UINT         cbSizeHeader)
+    PRAWINPUT pData,
+    PUINT pcbSize,
+    UINT cbSizeHeader)
 {
   UNIMPLEMENTED;
-  return FALSE;
+  return 0;
 }
 
 /*
  * @unimplemented
  */
 UINT
-STDCALL
+WINAPI
 GetRawInputData(
-    HRAWINPUT    hRawInput,
-    UINT         uiCommand,
-    LPVOID      pData,
-    PUINT    pcbSize,
-    UINT         cbSizeHeader)
+    HRAWINPUT hRawInput,
+    UINT uiCommand,
+    LPVOID pData,
+    PUINT pcbSize,
+    UINT cbSizeHeader)
 {
   UNIMPLEMENTED;
-  return FALSE;
+  return 0;
 }
 
 /*
  * @unimplemented
  */
 UINT
-STDCALL
+WINAPI
 GetRawInputDeviceList(
     PRAWINPUTDEVICELIST pRawInputDeviceList,
     PUINT puiNumDevices,
     UINT cbSize)
 {
-  UNIMPLEMENTED;
-  return FALSE;
+    if(pRawInputDeviceList)
+        memset(pRawInputDeviceList, 0, sizeof *pRawInputDeviceList);
+    *puiNumDevices = 0;
+
+    UNIMPLEMENTED;
+    return 0;
 }
 
 /*
  * @unimplemented
  */
 UINT
-STDCALL
+WINAPI
 GetRegisteredRawInputDevices(
     PRAWINPUTDEVICE pRawInputDevices,
     PUINT puiNumDevices,
     UINT cbSize)
 {
   UNIMPLEMENTED;
-  return FALSE;
+  return 0;
 }
 
 /*
  * @unimplemented
  */
 BOOL
-STDCALL
+WINAPI
 PrintWindow(
     HWND hwnd,
     HDC hdcBlt,
@@ -516,7 +404,7 @@ PrintWindow(
  * @unimplemented
  */
 BOOL
-STDCALL
+WINAPI
 RegisterRawInputDevices(
     PCRAWINPUTDEVICE pRawInputDevices,
     UINT uiNumDevices,
@@ -529,20 +417,7 @@ RegisterRawInputDevices(
 /*
  * @unimplemented
  */
-UINT
-STDCALL
-WINNLSGetIMEHotkey( HWND hwnd)
-{
-  UNIMPLEMENTED;
-  return FALSE;
-}
-
-/*
- * @unimplemented
- */
-BOOL
-STDCALL
-WINNLSEnableIME( HWND hwnd, BOOL enable)
+BOOL WINAPI DisplayExitWindowsWarnings(ULONG flags)
 {
   UNIMPLEMENTED;
   return FALSE;
@@ -551,9 +426,7 @@ WINNLSEnableIME( HWND hwnd, BOOL enable)
 /*
  * @unimplemented
  */
-BOOL
-STDCALL
-WINNLSGetEnableStatus( HWND hwnd)
+BOOL WINAPI ReasonCodeNeedsBugID(ULONG reasoncode)
 {
   UNIMPLEMENTED;
   return FALSE;
@@ -562,9 +435,7 @@ WINNLSGetEnableStatus( HWND hwnd)
 /*
  * @unimplemented
  */
-BOOL
-STDCALL
-IMPSetIMEW( HWND hwnd, LPIMEPROW ime)
+BOOL WINAPI ReasonCodeNeedsComment(ULONG reasoncode)
 {
   UNIMPLEMENTED;
   return FALSE;
@@ -573,9 +444,7 @@ IMPSetIMEW( HWND hwnd, LPIMEPROW ime)
 /*
  * @unimplemented
  */
-BOOL
-STDCALL
-IMPQueryIMEW( LPIMEPROW ime)
+BOOL WINAPI CtxInitUser32(VOID)
 {
   UNIMPLEMENTED;
   return FALSE;
@@ -584,9 +453,7 @@ IMPQueryIMEW( LPIMEPROW ime)
 /*
  * @unimplemented
  */
-BOOL
-STDCALL
-IMPGetIMEW( HWND hwnd, LPIMEPROW ime)
+BOOL WINAPI EnterReaderModeHelper(HWND hwnd)
 {
   UNIMPLEMENTED;
   return FALSE;
@@ -595,20 +462,15 @@ IMPGetIMEW( HWND hwnd, LPIMEPROW ime)
 /*
  * @unimplemented
  */
-BOOL
-STDCALL
-IMPSetIMEA( HWND hwnd, LPIMEPROA ime)
+VOID WINAPI InitializeLpkHooks(FARPROC *hookfuncs)
 {
   UNIMPLEMENTED;
-  return FALSE;
 }
 
 /*
  * @unimplemented
  */
-BOOL
-STDCALL
-IMPQueryIMEA( LPIMEPROA ime)
+WORD WINAPI InitializeWin32EntryTable(UCHAR* EntryTablePlus0x1000)
 {
   UNIMPLEMENTED;
   return FALSE;
@@ -617,9 +479,7 @@ IMPQueryIMEA( LPIMEPROA ime)
 /*
  * @unimplemented
  */
-BOOL
-STDCALL
-IMPGetIMEA( HWND hwnd, LPIMEPROA ime)
+BOOL WINAPI IsServerSideWindow(HWND wnd)
 {
   UNIMPLEMENTED;
   return FALSE;
@@ -628,9 +488,7 @@ IMPGetIMEA( HWND hwnd, LPIMEPROA ime)
 /*
  * @unimplemented
  */
-LRESULT
-STDCALL
-SendIMEMessageExW(HWND hwnd,LPARAM lparam)
+HKL WINAPI LoadKeyboardLayoutEx(DWORD unknown,LPCWSTR pwszKLID,UINT Flags) //1st parameter unknown
 {
   UNIMPLEMENTED;
   return FALSE;
@@ -639,27 +497,23 @@ SendIMEMessageExW(HWND hwnd,LPARAM lparam)
 /*
  * @unimplemented
  */
-LRESULT
-STDCALL
-SendIMEMessageExA(HWND hwnd, LPARAM lparam)
+VOID WINAPI AllowForegroundActivation(VOID)
 {
   UNIMPLEMENTED;
-  return FALSE;
 }
 
 /*
  * @unimplemented
  */
-BOOL STDCALL DisplayExitWindowsWarnings(ULONG flags)
+VOID WINAPI ShowStartGlass(DWORD unknown)
 {
   UNIMPLEMENTED;
-  return FALSE;
 }
 
 /*
  * @unimplemented
  */
-BOOL STDCALL ReasonCodeNeedsBugID(ULONG reasoncode)
+BOOL WINAPI DdeGetQualityOfService(HWND hWnd, DWORD Reserved, PSECURITY_QUALITY_OF_SERVICE pqosPrev)
 {
   UNIMPLEMENTED;
   return FALSE;
@@ -668,16 +522,16 @@ BOOL STDCALL ReasonCodeNeedsBugID(ULONG reasoncode)
 /*
  * @unimplemented
  */
-BOOL STDCALL ReasonCodeNeedsComment(ULONG reasoncode)
+BOOL WINAPI SetProcessDPIAware(VOID)
 {
-  UNIMPLEMENTED;
-  return FALSE;
+    UNIMPLEMENTED;
+    return TRUE;
 }
 
 /*
  * @unimplemented
  */
-BOOL STDCALL CtxInitUser32(VOID)
+BOOL WINAPI CliImmSetHotKey(DWORD dwID, UINT uModifiers, UINT uVirtualKey, HKL hKl)
 {
   UNIMPLEMENTED;
   return FALSE;
@@ -686,107 +540,16 @@ BOOL STDCALL CtxInitUser32(VOID)
 /*
  * @unimplemented
  */
-BOOL STDCALL EnterReaderModeHelper(HWND hwnd)
+DWORD WINAPI GetMenuIndex(HMENU hMenu, HMENU hSubMenu)
 {
   UNIMPLEMENTED;
-  return FALSE;
-}
-
-/*
- * @unimplemented
- */
-DWORD
-STDCALL
-GetAppCompatFlags2(HTASK hTask)
-{
-  UNIMPLEMENTED;
-  return FALSE;
-}
-
-/*
- * @unimplemented
- */
-VOID STDCALL InitializeLpkHooks(FARPROC *hookfuncs)
-{
-  UNIMPLEMENTED;
-}
-
-/*
- * @unimplemented
- */
-WORD STDCALL InitializeWin32EntryTable(UCHAR* EntryTablePlus0x1000)
-{
-  UNIMPLEMENTED;
-  return FALSE;
-}
-
-/*
- * @unimplemented
- */
-BOOL STDCALL IsServerSideWindow(HWND wnd)
-{
-  UNIMPLEMENTED;
-  return FALSE;
-}
-
-typedef BOOL (CALLBACK *THEME_HOOK_FUNC) (DWORD state,PVOID arg2); //return type and 2nd parameter unknown
-/*
- * @unimplemented
- */
-BOOL STDCALL RegisterUserApiHook(HINSTANCE instance,THEME_HOOK_FUNC proc)
-{
-  UNIMPLEMENTED;
-  return FALSE;
-}
-
-/*
- * @unimplemented
- */
-BOOL STDCALL UnregisterUserApiHook(VOID)
-{
-  UNIMPLEMENTED;
-  return FALSE;
-}
-
-/*
- * @unimplemented
- */
-HKL STDCALL LoadKeyboardLayoutEx(DWORD unknown,LPCWSTR pwszKLID,UINT Flags) //1st parameter unknown
-{
-  UNIMPLEMENTED;
-  return FALSE;
-}
-
-/*
- * @unimplemented
- */
-VOID STDCALL AllowForegroundActivation(VOID)
-{
-  UNIMPLEMENTED;
-}
-
-/*
- * @unimplemented
- */
-VOID STDCALL ShowStartGlass(DWORD unknown)
-{
-  UNIMPLEMENTED;
-}
-
-/*
- * @unimplemented
- */
-BOOL STDCALL DdeGetQualityOfService(HWND hWnd, DWORD Reserved, PSECURITY_QUALITY_OF_SERVICE pqosPrev)
-{
-  UNIMPLEMENTED;
-  return FALSE;
+  return 0;
 }
 
-
 /*
  * @unimplemented
  */
-DWORD STDCALL User32InitializeImmEntryTable(PVOID p)
+DWORD WINAPI UserRegisterWowHandlers(PVOID Unknown1, PVOID Unknown2)
 {
   UNIMPLEMENTED;
   return 0;