X-Git-Url: http://git.jankratochvil.net/?p=reactos.git;a=blobdiff_plain;f=lib%2Fuser32%2Fmisc%2Fdesktop.c;fp=lib%2Fuser32%2Fmisc%2Fdesktop.c;h=696fad291d5c43cbc6bef7f63d217bb04f721290;hp=7f866e7cf2b997c06fe0eab4a94820663f6e2655;hb=a3df8bf1429570e0bd6c6428f6ed80073578cf4b;hpb=7c0db166f81fbe8c8b913d7f26048e337d383605 diff --git a/lib/user32/misc/desktop.c b/lib/user32/misc/desktop.c index 7f866e7..696fad2 100644 --- a/lib/user32/misc/desktop.c +++ b/lib/user32/misc/desktop.c @@ -12,57 +12,97 @@ #include #include #include +#include +#include +/* + * @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 */