:pserver:cvsanon@mok.lvcm.com:/CVS/ReactOS reactos
[reactos.git] / lib / user32 / misc / desktop.c
1 /* $Id$
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 int STDCALL
17 GetSystemMetrics(int nIndex)
18 {
19   return(NtUserGetSystemMetrics(nIndex));
20 }
21
22 WINBOOL STDCALL
23 SystemParametersInfoA(UINT uiAction,
24                       UINT uiParam,
25                       PVOID pvParam,
26                       UINT fWinIni)
27 {
28   return(SystemParametersInfoW(uiAction, uiParam, pvParam, fWinIni));
29 }
30
31 WINBOOL STDCALL
32 SystemParametersInfoW(UINT uiAction,
33                       UINT uiParam,
34                       PVOID pvParam,
35                       UINT fWinIni)
36 {
37   NONCLIENTMETRICS *nclm;
38
39   /* FIXME: This should be obtained from the registry */
40   static LOGFONT CaptionFont =
41   { 12, 0, 0, 0, FW_NORMAL, FALSE, FALSE, FALSE, OEM_CHARSET,
42     0, 0, DEFAULT_QUALITY, FIXED_PITCH | FF_MODERN, L"Timmons" };
43
44   switch (uiAction)
45     {
46     case SPI_GETWORKAREA:
47       {
48         ((PRECT)pvParam)->left = 0;
49         ((PRECT)pvParam)->top = 0;
50         ((PRECT)pvParam)->right = 640;
51         ((PRECT)pvParam)->bottom = 480;
52         return(TRUE);
53       }
54     case SPI_GETNONCLIENTMETRICS:
55       {
56         nclm = pvParam;
57         memcpy(&nclm->lfCaptionFont, &CaptionFont, sizeof(LOGFONT));
58         memcpy(&nclm->lfSmCaptionFont, &CaptionFont, sizeof(LOGFONT));
59         return(TRUE);
60       }
61     }
62   return(FALSE);
63 }
64
65
66 WINBOOL
67 STDCALL
68 CloseDesktop(
69   HDESK hDesktop)
70 {
71   return NtUserCloseDesktop(hDesktop);
72 }
73
74 HDESK STDCALL
75 CreateDesktopA(LPCSTR lpszDesktop,
76                LPCSTR lpszDevice,
77                LPDEVMODEA pDevmode,
78                DWORD dwFlags,
79                ACCESS_MASK dwDesiredAccess,
80                LPSECURITY_ATTRIBUTES lpsa)
81 {
82   ANSI_STRING DesktopNameA;
83   UNICODE_STRING DesktopNameU;
84   HDESK hDesktop;
85
86   if (lpszDesktop != NULL) 
87     {
88       RtlInitAnsiString(&DesktopNameA, (LPSTR)lpszDesktop);
89       RtlAnsiStringToUnicodeString(&DesktopNameU, &DesktopNameA, TRUE);
90     } 
91   else 
92     {
93       RtlInitUnicodeString(&DesktopNameU, NULL);
94     }
95   /* FIXME: Need to convert the DEVMODE parameter. */
96   
97   hDesktop = CreateDesktopW(DesktopNameU.Buffer,
98                             NULL,
99                             (LPDEVMODEW)pDevmode,
100                             dwFlags,
101                             dwDesiredAccess,
102                             lpsa);
103   
104   RtlFreeUnicodeString(&DesktopNameU);
105   return(hDesktop);
106 }
107
108 HDESK STDCALL
109 CreateDesktopW(LPCWSTR lpszDesktop,
110                LPCWSTR lpszDevice,
111                LPDEVMODEW pDevmode,
112                DWORD dwFlags,
113                ACCESS_MASK dwDesiredAccess,
114                LPSECURITY_ATTRIBUTES lpsa)
115 {
116   UNICODE_STRING DesktopName;
117   HWINSTA hWinSta;
118   HDESK hDesktop;
119
120   hWinSta = NtUserGetProcessWindowStation();
121
122   RtlInitUnicodeString(&DesktopName, lpszDesktop);
123
124   hDesktop = NtUserCreateDesktop(&DesktopName,
125                                  dwFlags,
126                                  dwDesiredAccess,
127                                  lpsa,
128                                  hWinSta);
129
130   return(hDesktop);
131 }
132
133 WINBOOL
134 STDCALL
135 EnumDesktopWindows(
136   HDESK hDesktop,
137   ENUMWINDOWSPROC lpfn,
138   LPARAM lParam)
139 {
140   return FALSE;
141 }
142
143 WINBOOL
144 STDCALL
145 EnumDesktopsA(
146   HWINSTA hwinsta,
147   DESKTOPENUMPROC lpEnumFunc,
148   LPARAM lParam)
149 {
150   return FALSE;
151 }
152
153 WINBOOL
154 STDCALL
155 EnumDesktopsW(
156   HWINSTA hwinsta,
157   DESKTOPENUMPROC lpEnumFunc,
158   LPARAM lParam)
159 {
160   return FALSE;
161 }
162
163 HDESK
164 STDCALL
165 GetThreadDesktop(
166   DWORD dwThreadId)
167 {
168   return NtUserGetThreadDesktop(dwThreadId, 0);
169 }
170
171 HDESK
172 STDCALL
173 OpenDesktopA(
174   LPSTR lpszDesktop,
175   DWORD dwFlags,
176   WINBOOL fInherit,
177   ACCESS_MASK dwDesiredAccess)
178 {
179   ANSI_STRING DesktopNameA;
180   UNICODE_STRING DesktopNameU;
181   HDESK hDesktop;
182
183         if (lpszDesktop != NULL) {
184                 RtlInitAnsiString(&DesktopNameA, lpszDesktop);
185                 RtlAnsiStringToUnicodeString(&DesktopNameU, &DesktopNameA, TRUE);
186   } else {
187     RtlInitUnicodeString(&DesktopNameU, NULL);
188   }
189
190   hDesktop = OpenDesktopW(
191     DesktopNameU.Buffer,
192     dwFlags,
193     fInherit,
194     dwDesiredAccess);
195
196         RtlFreeUnicodeString(&DesktopNameU);
197
198   return hDesktop;
199 }
200
201 HDESK
202 STDCALL
203 OpenDesktopW(
204   LPWSTR lpszDesktop,
205   DWORD dwFlags,
206   WINBOOL fInherit,
207   ACCESS_MASK dwDesiredAccess)
208 {
209   UNICODE_STRING DesktopName;
210
211   RtlInitUnicodeString(&DesktopName, lpszDesktop);
212
213   return NtUserOpenDesktop(
214     &DesktopName,
215     dwFlags,
216     dwDesiredAccess);
217 }
218
219 HDESK
220 STDCALL
221 OpenInputDesktop(
222   DWORD dwFlags,
223   WINBOOL fInherit,
224   ACCESS_MASK dwDesiredAccess)
225 {
226   return NtUserOpenInputDesktop(
227     dwFlags,
228     fInherit,
229     dwDesiredAccess);
230 }
231
232 WINBOOL
233 STDCALL
234 PaintDesktop(
235   HDC hdc)
236 {
237   return NtUserPaintDesktop(hdc);
238 }
239
240 WINBOOL
241 STDCALL
242 SetThreadDesktop(
243   HDESK hDesktop)
244 {
245   return NtUserSetThreadDesktop(hDesktop);
246 }
247
248 WINBOOL
249 STDCALL
250 SwitchDesktop(
251   HDESK hDesktop)
252 {
253   return NtUserSwitchDesktop(hDesktop);
254 }
255
256 /* EOF */