update for HEAD-2003091401
[reactos.git] / lib / user32 / misc / desktop.c
index 7f866e7..696fad2 100644 (file)
 #include <windows.h>
 #include <user32.h>
 #include <debug.h>
+#include <rosrtl/devmode.h>
+#include <rosrtl/logfont.h>
 
+/*
+ * @implemented
+ */
 int STDCALL
 GetSystemMetrics(int nIndex)
 {
   return(NtUserGetSystemMetrics(nIndex));
 }
 
+
+/*
+ * @unimplemented
+ */
+WINBOOL STDCALL SetDeskWallpaper(LPCSTR filename)
+{
+       return SystemParametersInfoA(SPI_SETDESKWALLPAPER,0,(PVOID)filename,1);
+}
+/*
+ * @implemented
+ */
 WINBOOL STDCALL
 SystemParametersInfoA(UINT uiAction,
                      UINT uiParam,
                      PVOID pvParam,
                      UINT fWinIni)
 {
-  return(SystemParametersInfoW(uiAction, uiParam, pvParam, fWinIni));
+  switch (uiAction)
+    {
+      case SPI_GETWORKAREA:
+        {
+           return SystemParametersInfoW(uiAction, uiParam, pvParam, fWinIni);
+        }
+      case SPI_GETNONCLIENTMETRICS:
+        {
+           LPNONCLIENTMETRICSA nclma = (LPNONCLIENTMETRICSA)pvParam;
+           NONCLIENTMETRICSW nclmw;
+           nclmw.cbSize = sizeof(NONCLIENTMETRICSW);
+
+           if (!SystemParametersInfoW(uiAction, sizeof(NONCLIENTMETRICSW),
+                                      &nclmw, fWinIni))
+             return FALSE;
+
+           nclma->iBorderWidth = nclmw.iBorderWidth;
+           nclma->iScrollWidth = nclmw.iScrollWidth;
+           nclma->iScrollHeight = nclmw.iScrollHeight;
+           nclma->iCaptionWidth = nclmw.iCaptionWidth;
+           nclma->iCaptionHeight = nclmw.iCaptionHeight;
+           nclma->iSmCaptionWidth = nclmw.iSmCaptionWidth;
+           nclma->iSmCaptionHeight = nclmw.iSmCaptionHeight;
+           nclma->iMenuWidth = nclmw.iMenuWidth;
+           nclma->iMenuHeight = nclmw.iMenuHeight;
+           RosRtlLogFontW2A(&(nclma->lfCaptionFont), &(nclmw.lfCaptionFont));
+           RosRtlLogFontW2A(&(nclma->lfSmCaptionFont), &(nclmw.lfSmCaptionFont));
+           RosRtlLogFontW2A(&(nclma->lfMenuFont), &(nclmw.lfMenuFont));
+           RosRtlLogFontW2A(&(nclma->lfStatusFont), &(nclmw.lfStatusFont));
+           RosRtlLogFontW2A(&(nclma->lfMessageFont), &(nclmw.lfMessageFont));
+           return TRUE;
+        }
+      case SPI_GETICONTITLELOGFONT:
+        {
+           LOGFONTW lfw;
+           if (!SystemParametersInfoW(uiAction, 0, &lfw, fWinIni))
+             return FALSE;
+           RosRtlLogFontW2A(pvParam, &lfw);
+           return TRUE;
+        }
+    }
+
+  return FALSE;
 }
 
+
+/*
+ * @implemented
+ */
 WINBOOL STDCALL
 SystemParametersInfoW(UINT uiAction,
                      UINT uiParam,
                      PVOID pvParam,
                      UINT fWinIni)
 {
-  NONCLIENTMETRICS *nclm;
-
-  /* FIXME: This should be obtained from the registry */
-  static LOGFONT CaptionFont =
-  { 12, 0, 0, 0, FW_NORMAL, FALSE, FALSE, FALSE, OEM_CHARSET,
-    0, 0, DEFAULT_QUALITY, FIXED_PITCH | FF_MODERN, L"Helmet" };
-
-  switch (uiAction)
-    {
-    case SPI_GETWORKAREA:
-      {
-       ((PRECT)pvParam)->left = 0;
-       ((PRECT)pvParam)->top = 0;
-       ((PRECT)pvParam)->right = 640;
-       ((PRECT)pvParam)->bottom = 480;
-       return(TRUE);
-      }
-    case SPI_GETNONCLIENTMETRICS:
-      {
-        nclm = pvParam;
-        memcpy(&nclm->lfCaptionFont, &CaptionFont, sizeof(LOGFONT));
-        memcpy(&nclm->lfSmCaptionFont, &CaptionFont, sizeof(LOGFONT));
-       return(TRUE);
-      }
-    }
-  return(FALSE);
+  return NtUserSystemParametersInfo(uiAction, uiParam, pvParam, fWinIni);
 }
 
 
+/*
+ * @implemented
+ */
 WINBOOL
 STDCALL
 CloseDesktop(
@@ -71,6 +111,10 @@ CloseDesktop(
   return NtUserCloseDesktop(hDesktop);
 }
 
+
+/*
+ * @implemented
+ */
 HDESK STDCALL
 CreateDesktopA(LPCSTR lpszDesktop,
               LPCSTR lpszDevice,
@@ -82,6 +126,7 @@ CreateDesktopA(LPCSTR lpszDesktop,
   ANSI_STRING DesktopNameA;
   UNICODE_STRING DesktopNameU;
   HDESK hDesktop;
+  DEVMODEW DevmodeW;
 
   if (lpszDesktop != NULL) 
     {
@@ -92,19 +137,24 @@ CreateDesktopA(LPCSTR lpszDesktop,
     {
       RtlInitUnicodeString(&DesktopNameU, NULL);
     }
-  /* FIXME: Need to convert the DEVMODE parameter. */
-  
+
+  RosRtlDevModeA2W ( &DevmodeW, pDevmode );
+
   hDesktop = CreateDesktopW(DesktopNameU.Buffer,
                            NULL,
-                           (LPDEVMODEW)pDevmode,
+                           &DevmodeW,
                            dwFlags,
                            dwDesiredAccess,
                            lpsa);
-  
+
   RtlFreeUnicodeString(&DesktopNameU);
   return(hDesktop);
 }
 
+
+/*
+ * @implemented
+ */
 HDESK STDCALL
 CreateDesktopW(LPCWSTR lpszDesktop,
               LPCWSTR lpszDevice,
@@ -130,36 +180,40 @@ CreateDesktopW(LPCWSTR lpszDesktop,
   return(hDesktop);
 }
 
-WINBOOL
-STDCALL
-EnumDesktopWindows(
-  HDESK hDesktop,
-  ENUMWINDOWSPROC lpfn,
-  LPARAM lParam)
-{
-  return FALSE;
-}
 
+/*
+ * @unimplemented
+ */
 WINBOOL
 STDCALL
 EnumDesktopsA(
   HWINSTA hwinsta,
-  DESKTOPENUMPROC lpEnumFunc,
+  DESKTOPENUMPROCA lpEnumFunc,
   LPARAM lParam)
 {
+  UNIMPLEMENTED;
   return FALSE;
 }
 
+
+/*
+ * @unimplemented
+ */
 WINBOOL
 STDCALL
 EnumDesktopsW(
   HWINSTA hwinsta,
-  DESKTOPENUMPROC lpEnumFunc,
+  DESKTOPENUMPROCW lpEnumFunc,
   LPARAM lParam)
 {
+  UNIMPLEMENTED;
   return FALSE;
 }
 
+
+/*
+ * @implemented
+ */
 HDESK
 STDCALL
 GetThreadDesktop(
@@ -168,6 +222,10 @@ GetThreadDesktop(
   return NtUserGetThreadDesktop(dwThreadId, 0);
 }
 
+
+/*
+ * @implemented
+ */
 HDESK
 STDCALL
 OpenDesktopA(
@@ -198,6 +256,10 @@ OpenDesktopA(
   return hDesktop;
 }
 
+
+/*
+ * @implemented
+ */
 HDESK
 STDCALL
 OpenDesktopW(
@@ -216,6 +278,10 @@ OpenDesktopW(
     dwDesiredAccess);
 }
 
+
+/*
+ * @implemented
+ */
 HDESK
 STDCALL
 OpenInputDesktop(
@@ -229,6 +295,10 @@ OpenInputDesktop(
     dwDesiredAccess);
 }
 
+
+/*
+ * @implemented
+ */
 WINBOOL
 STDCALL
 PaintDesktop(
@@ -237,6 +307,10 @@ PaintDesktop(
   return NtUserPaintDesktop(hdc);
 }
 
+
+/*
+ * @implemented
+ */
 WINBOOL
 STDCALL
 SetThreadDesktop(
@@ -245,6 +319,10 @@ SetThreadDesktop(
   return NtUserSetThreadDesktop(hDesktop);
 }
 
+
+/*
+ * @implemented
+ */
 WINBOOL
 STDCALL
 SwitchDesktop(
@@ -253,4 +331,35 @@ SwitchDesktop(
   return NtUserSwitchDesktop(hDesktop);
 }
 
+
+/*
+ * @implemented
+ */
+BOOL STDCALL
+SetShellWindowEx(HWND hwndShell, HWND hwndShellListView)
+{
+       return NtUserSetShellWindowEx(hwndShell, hwndShellListView);
+}
+
+
+/*
+ * @implemented
+ */
+BOOL STDCALL
+SetShellWindow(HWND hwndShell)
+{
+       return SetShellWindowEx(hwndShell, hwndShell);
+}
+
+
+/*
+ * @implemented
+ */
+HWND STDCALL
+GetShellWindow(VOID)
+{
+       return NtUserGetShellWindow();
+}
+
+
 /* EOF */