42f6ec1ab650127b0ef9c43e05ad542e9e446a54
[reactos.git] / reactos / lib / user32 / misc / desktop.c
1 /* $Id: desktop.c,v 1.14 2003/07/19 01:35:27 royce 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
16 /*
17 * @implemented
18 */
19 int STDCALL
20 GetSystemMetrics(int nIndex)
21 {
22 return(NtUserGetSystemMetrics(nIndex));
23 }
24
25
26 /*
27 * @implemented
28 */
29 WINBOOL STDCALL
30 SystemParametersInfoA(UINT uiAction,
31 UINT uiParam,
32 PVOID pvParam,
33 UINT fWinIni)
34 {
35 return(SystemParametersInfoW(uiAction, uiParam, pvParam, fWinIni));
36 }
37
38
39 /*
40 * @implemented
41 */
42 WINBOOL STDCALL
43 SystemParametersInfoW(UINT uiAction,
44 UINT uiParam,
45 PVOID pvParam,
46 UINT fWinIni)
47 {
48 NONCLIENTMETRICS *nclm;
49
50 /* FIXME: This should be obtained from the registry */
51 static LOGFONT CaptionFont =
52 { 12, 0, 0, 0, FW_NORMAL, FALSE, FALSE, FALSE, OEM_CHARSET,
53 0, 0, DEFAULT_QUALITY, FF_MODERN, L"Bitstream Vera Sans Bold" };
54
55 switch (uiAction)
56 {
57 case SPI_GETWORKAREA:
58 {
59 ((PRECT)pvParam)->left = 0;
60 ((PRECT)pvParam)->top = 0;
61 ((PRECT)pvParam)->right = 640;
62 ((PRECT)pvParam)->bottom = 480;
63 return(TRUE);
64 }
65 case SPI_GETNONCLIENTMETRICS:
66 {
67 nclm = pvParam;
68 memcpy(&nclm->lfCaptionFont, &CaptionFont, sizeof(LOGFONT));
69 memcpy(&nclm->lfSmCaptionFont, &CaptionFont, sizeof(LOGFONT));
70 return(TRUE);
71 }
72 }
73 return(FALSE);
74 }
75
76
77 /*
78 * @implemented
79 */
80 WINBOOL
81 STDCALL
82 CloseDesktop(
83 HDESK hDesktop)
84 {
85 return NtUserCloseDesktop(hDesktop);
86 }
87
88
89 /*
90 * @implemented
91 */
92 HDESK STDCALL
93 CreateDesktopA(LPCSTR lpszDesktop,
94 LPCSTR lpszDevice,
95 LPDEVMODEA pDevmode,
96 DWORD dwFlags,
97 ACCESS_MASK dwDesiredAccess,
98 LPSECURITY_ATTRIBUTES lpsa)
99 {
100 ANSI_STRING DesktopNameA;
101 UNICODE_STRING DesktopNameU;
102 HDESK hDesktop;
103 DEVMODEW DevmodeW;
104
105 if (lpszDesktop != NULL)
106 {
107 RtlInitAnsiString(&DesktopNameA, (LPSTR)lpszDesktop);
108 RtlAnsiStringToUnicodeString(&DesktopNameU, &DesktopNameA, TRUE);
109 }
110 else
111 {
112 RtlInitUnicodeString(&DesktopNameU, NULL);
113 }
114
115 USER32_DevModeA2W ( &DevmodeW, pDevmode );
116
117 hDesktop = CreateDesktopW(DesktopNameU.Buffer,
118 NULL,
119 &DevmodeW,
120 dwFlags,
121 dwDesiredAccess,
122 lpsa);
123
124 RtlFreeUnicodeString(&DesktopNameU);
125 return(hDesktop);
126 }
127
128
129 /*
130 * @implemented
131 */
132 HDESK STDCALL
133 CreateDesktopW(LPCWSTR lpszDesktop,
134 LPCWSTR lpszDevice,
135 LPDEVMODEW pDevmode,
136 DWORD dwFlags,
137 ACCESS_MASK dwDesiredAccess,
138 LPSECURITY_ATTRIBUTES lpsa)
139 {
140 UNICODE_STRING DesktopName;
141 HWINSTA hWinSta;
142 HDESK hDesktop;
143
144 hWinSta = NtUserGetProcessWindowStation();
145
146 RtlInitUnicodeString(&DesktopName, lpszDesktop);
147
148 hDesktop = NtUserCreateDesktop(&DesktopName,
149 dwFlags,
150 dwDesiredAccess,
151 lpsa,
152 hWinSta);
153
154 return(hDesktop);
155 }
156
157
158 /*
159 * @unimplemented
160 */
161 WINBOOL
162 STDCALL
163 EnumDesktopWindows(
164 HDESK hDesktop,
165 ENUMWINDOWSPROC lpfn,
166 LPARAM lParam)
167 {
168 UNIMPLEMENTED;
169 return FALSE;
170 }
171
172
173 /*
174 * @unimplemented
175 */
176 WINBOOL
177 STDCALL
178 EnumDesktopsA(
179 HWINSTA hwinsta,
180 DESKTOPENUMPROC lpEnumFunc,
181 LPARAM lParam)
182 {
183 UNIMPLEMENTED;
184 return FALSE;
185 }
186
187
188 /*
189 * @unimplemented
190 */
191 WINBOOL
192 STDCALL
193 EnumDesktopsW(
194 HWINSTA hwinsta,
195 DESKTOPENUMPROC lpEnumFunc,
196 LPARAM lParam)
197 {
198 UNIMPLEMENTED;
199 return FALSE;
200 }
201
202
203 /*
204 * @implemented
205 */
206 HDESK
207 STDCALL
208 GetThreadDesktop(
209 DWORD dwThreadId)
210 {
211 return NtUserGetThreadDesktop(dwThreadId, 0);
212 }
213
214
215 /*
216 * @implemented
217 */
218 HDESK
219 STDCALL
220 OpenDesktopA(
221 LPSTR lpszDesktop,
222 DWORD dwFlags,
223 WINBOOL fInherit,
224 ACCESS_MASK dwDesiredAccess)
225 {
226 ANSI_STRING DesktopNameA;
227 UNICODE_STRING DesktopNameU;
228 HDESK hDesktop;
229
230 if (lpszDesktop != NULL) {
231 RtlInitAnsiString(&DesktopNameA, lpszDesktop);
232 RtlAnsiStringToUnicodeString(&DesktopNameU, &DesktopNameA, TRUE);
233 } else {
234 RtlInitUnicodeString(&DesktopNameU, NULL);
235 }
236
237 hDesktop = OpenDesktopW(
238 DesktopNameU.Buffer,
239 dwFlags,
240 fInherit,
241 dwDesiredAccess);
242
243 RtlFreeUnicodeString(&DesktopNameU);
244
245 return hDesktop;
246 }
247
248
249 /*
250 * @implemented
251 */
252 HDESK
253 STDCALL
254 OpenDesktopW(
255 LPWSTR lpszDesktop,
256 DWORD dwFlags,
257 WINBOOL fInherit,
258 ACCESS_MASK dwDesiredAccess)
259 {
260 UNICODE_STRING DesktopName;
261
262 RtlInitUnicodeString(&DesktopName, lpszDesktop);
263
264 return NtUserOpenDesktop(
265 &DesktopName,
266 dwFlags,
267 dwDesiredAccess);
268 }
269
270
271 /*
272 * @implemented
273 */
274 HDESK
275 STDCALL
276 OpenInputDesktop(
277 DWORD dwFlags,
278 WINBOOL fInherit,
279 ACCESS_MASK dwDesiredAccess)
280 {
281 return NtUserOpenInputDesktop(
282 dwFlags,
283 fInherit,
284 dwDesiredAccess);
285 }
286
287
288 /*
289 * @implemented
290 */
291 WINBOOL
292 STDCALL
293 PaintDesktop(
294 HDC hdc)
295 {
296 return NtUserPaintDesktop(hdc);
297 }
298
299
300 /*
301 * @implemented
302 */
303 WINBOOL
304 STDCALL
305 SetThreadDesktop(
306 HDESK hDesktop)
307 {
308 return NtUserSetThreadDesktop(hDesktop);
309 }
310
311
312 /*
313 * @implemented
314 */
315 WINBOOL
316 STDCALL
317 SwitchDesktop(
318 HDESK hDesktop)
319 {
320 return NtUserSwitchDesktop(hDesktop);
321 }
322
323 /* EOF */