08aeddb35352d6ac0a75927c1b3d229a78d545d4
[reactos.git] / reactos / lib / user32 / misc / desktop.c
1 /* $Id: desktop.c,v 1.23 2003/08/11 11:02:43 gvg Exp $
2 *
3 * COPYRIGHT: See COPYING in the top level directory
4 * PROJECT: ReactOS user32.dll
5 * FILE: lib/user32/misc/desktop.c
6 * PURPOSE: Desktops
7 * PROGRAMMER: Casper S. Hornstrup (chorns@users.sourceforge.net)
8 * UPDATE HISTORY:
9 * 06-06-2001 CSH Created
10 */
11 #include <string.h>
12 #include <windows.h>
13 #include <user32.h>
14 #include <debug.h>
15 #include <rosrtl/devmode.h>
16 #include <rosrtl/logfont.h>
17
18 /*
19 * @implemented
20 */
21 int STDCALL
22 GetSystemMetrics(int nIndex)
23 {
24 return(NtUserGetSystemMetrics(nIndex));
25 }
26
27
28 /*
29 * @implemented
30 */
31 WINBOOL STDCALL
32 SystemParametersInfoA(UINT uiAction,
33 UINT uiParam,
34 PVOID pvParam,
35 UINT fWinIni)
36 {
37 WINBOOL Ret;
38 NONCLIENTMETRICSA *nclma;
39 NONCLIENTMETRICSW nclmw;
40
41 switch (uiAction)
42 {
43 case SPI_GETNONCLIENTMETRICS:
44 nclma = pvParam;
45 nclmw.cbSize = sizeof(NONCLIENTMETRICSW);
46 uiParam = sizeof(NONCLIENTMETRICSW);
47 pvParam = &nclmw;
48 break;
49 }
50 Ret = SystemParametersInfoW(uiAction, uiParam, pvParam, fWinIni);
51 if (! Ret)
52 {
53 return FALSE;
54 }
55
56 switch (uiAction)
57 {
58 case SPI_GETNONCLIENTMETRICS:
59 RosRtlLogFontW2A(&(nclma->lfCaptionFont), &(nclmw.lfCaptionFont));
60 RosRtlLogFontW2A(&(nclma->lfSmCaptionFont), &(nclmw.lfSmCaptionFont));
61 return TRUE;
62 }
63
64 return TRUE;
65 }
66
67
68 /*
69 * @implemented
70 */
71 WINBOOL STDCALL
72 SystemParametersInfoW(UINT uiAction,
73 UINT uiParam,
74 PVOID pvParam,
75 UINT fWinIni)
76 {
77 NONCLIENTMETRICSW *nclm;
78
79 /* FIXME: This should be obtained from the registry */
80 static LOGFONTW CaptionFont =
81 { 12, 0, 0, 0, FW_NORMAL, FALSE, FALSE, FALSE, OEM_CHARSET,
82 0, 0, DEFAULT_QUALITY, FF_MODERN, L"Bitstream Vera Sans Bold" };
83
84 switch (uiAction)
85 {
86 case SPI_GETWORKAREA:
87 {
88 ((PRECT)pvParam)->left = 0;
89 ((PRECT)pvParam)->top = 0;
90 ((PRECT)pvParam)->right = 640;
91 ((PRECT)pvParam)->bottom = 480;
92 return(TRUE);
93 }
94 case SPI_GETNONCLIENTMETRICS:
95 {
96 nclm = pvParam;
97 memcpy(&nclm->lfCaptionFont, &CaptionFont, sizeof(CaptionFont));
98 memcpy(&nclm->lfSmCaptionFont, &CaptionFont, sizeof(CaptionFont));
99 return(TRUE);
100 }
101 }
102 return(FALSE);
103 }
104
105
106 /*
107 * @implemented
108 */
109 WINBOOL
110 STDCALL
111 CloseDesktop(
112 HDESK hDesktop)
113 {
114 return NtUserCloseDesktop(hDesktop);
115 }
116
117
118 /*
119 * @implemented
120 */
121 HDESK STDCALL
122 CreateDesktopA(LPCSTR lpszDesktop,
123 LPCSTR lpszDevice,
124 LPDEVMODEA pDevmode,
125 DWORD dwFlags,
126 ACCESS_MASK dwDesiredAccess,
127 LPSECURITY_ATTRIBUTES lpsa)
128 {
129 ANSI_STRING DesktopNameA;
130 UNICODE_STRING DesktopNameU;
131 HDESK hDesktop;
132 DEVMODEW DevmodeW;
133
134 if (lpszDesktop != NULL)
135 {
136 RtlInitAnsiString(&DesktopNameA, (LPSTR)lpszDesktop);
137 RtlAnsiStringToUnicodeString(&DesktopNameU, &DesktopNameA, TRUE);
138 }
139 else
140 {
141 RtlInitUnicodeString(&DesktopNameU, NULL);
142 }
143
144 RosRtlDevModeA2W ( &DevmodeW, pDevmode );
145
146 hDesktop = CreateDesktopW(DesktopNameU.Buffer,
147 NULL,
148 &DevmodeW,
149 dwFlags,
150 dwDesiredAccess,
151 lpsa);
152
153 RtlFreeUnicodeString(&DesktopNameU);
154 return(hDesktop);
155 }
156
157
158 /*
159 * @implemented
160 */
161 HDESK STDCALL
162 CreateDesktopW(LPCWSTR lpszDesktop,
163 LPCWSTR lpszDevice,
164 LPDEVMODEW pDevmode,
165 DWORD dwFlags,
166 ACCESS_MASK dwDesiredAccess,
167 LPSECURITY_ATTRIBUTES lpsa)
168 {
169 UNICODE_STRING DesktopName;
170 HWINSTA hWinSta;
171 HDESK hDesktop;
172
173 hWinSta = NtUserGetProcessWindowStation();
174
175 RtlInitUnicodeString(&DesktopName, lpszDesktop);
176
177 hDesktop = NtUserCreateDesktop(&DesktopName,
178 dwFlags,
179 dwDesiredAccess,
180 lpsa,
181 hWinSta);
182
183 return(hDesktop);
184 }
185
186
187 /*
188 * @unimplemented
189 */
190 WINBOOL
191 STDCALL
192 EnumDesktopsA(
193 HWINSTA hwinsta,
194 DESKTOPENUMPROC lpEnumFunc,
195 LPARAM lParam)
196 {
197 UNIMPLEMENTED;
198 return FALSE;
199 }
200
201
202 /*
203 * @unimplemented
204 */
205 WINBOOL
206 STDCALL
207 EnumDesktopsW(
208 HWINSTA hwinsta,
209 DESKTOPENUMPROC lpEnumFunc,
210 LPARAM lParam)
211 {
212 UNIMPLEMENTED;
213 return FALSE;
214 }
215
216
217 /*
218 * @implemented
219 */
220 HDESK
221 STDCALL
222 GetThreadDesktop(
223 DWORD dwThreadId)
224 {
225 return NtUserGetThreadDesktop(dwThreadId, 0);
226 }
227
228
229 /*
230 * @implemented
231 */
232 HDESK
233 STDCALL
234 OpenDesktopA(
235 LPSTR lpszDesktop,
236 DWORD dwFlags,
237 WINBOOL fInherit,
238 ACCESS_MASK dwDesiredAccess)
239 {
240 ANSI_STRING DesktopNameA;
241 UNICODE_STRING DesktopNameU;
242 HDESK hDesktop;
243
244 if (lpszDesktop != NULL) {
245 RtlInitAnsiString(&DesktopNameA, lpszDesktop);
246 RtlAnsiStringToUnicodeString(&DesktopNameU, &DesktopNameA, TRUE);
247 } else {
248 RtlInitUnicodeString(&DesktopNameU, NULL);
249 }
250
251 hDesktop = OpenDesktopW(
252 DesktopNameU.Buffer,
253 dwFlags,
254 fInherit,
255 dwDesiredAccess);
256
257 RtlFreeUnicodeString(&DesktopNameU);
258
259 return hDesktop;
260 }
261
262
263 /*
264 * @implemented
265 */
266 HDESK
267 STDCALL
268 OpenDesktopW(
269 LPWSTR lpszDesktop,
270 DWORD dwFlags,
271 WINBOOL fInherit,
272 ACCESS_MASK dwDesiredAccess)
273 {
274 UNICODE_STRING DesktopName;
275
276 RtlInitUnicodeString(&DesktopName, lpszDesktop);
277
278 return NtUserOpenDesktop(
279 &DesktopName,
280 dwFlags,
281 dwDesiredAccess);
282 }
283
284
285 /*
286 * @implemented
287 */
288 HDESK
289 STDCALL
290 OpenInputDesktop(
291 DWORD dwFlags,
292 WINBOOL fInherit,
293 ACCESS_MASK dwDesiredAccess)
294 {
295 return NtUserOpenInputDesktop(
296 dwFlags,
297 fInherit,
298 dwDesiredAccess);
299 }
300
301
302 /*
303 * @implemented
304 */
305 WINBOOL
306 STDCALL
307 PaintDesktop(
308 HDC hdc)
309 {
310 return NtUserPaintDesktop(hdc);
311 }
312
313
314 /*
315 * @implemented
316 */
317 WINBOOL
318 STDCALL
319 SetThreadDesktop(
320 HDESK hDesktop)
321 {
322 return NtUserSetThreadDesktop(hDesktop);
323 }
324
325
326 /*
327 * @implemented
328 */
329 WINBOOL
330 STDCALL
331 SwitchDesktop(
332 HDESK hDesktop)
333 {
334 return NtUserSwitchDesktop(hDesktop);
335 }
336
337
338 /*
339 * @implemented
340 */
341 BOOL STDCALL
342 SetShellWindowEx(HWND hwndShell, HWND hwndShellListView)
343 {
344 return NtUserSetShellWindowEx(hwndShell, hwndShellListView);
345 }
346
347
348 /*
349 * @implemented
350 */
351 BOOL STDCALL
352 SetShellWindow(HWND hwndShell)
353 {
354 return SetShellWindowEx(hwndShell, hwndShell);
355 }
356
357
358 /*
359 * @implemented
360 */
361 HWND STDCALL
362 GetShellWindow(VOID)
363 {
364 return NtUserGetShellWindow();
365 }
366
367
368 /* EOF */