Merged clipboard driver into USER driver.
[wine] / windows / sysparams.c
1 /*
2  * System parameters functions
3  *
4  * Copyright 1994 Alexandre Julliard
5  */
6
7 #include "config.h"
8
9 #include "windef.h"
10 #include "winbase.h"
11 #include "wingdi.h"
12 #include "wine/winuser16.h"
13 #include "winerror.h"
14
15 #include "keyboard.h"
16 #include "tweak.h"
17 #include "user.h"
18 #include "desktop.h"
19 #include "debugtools.h"
20
21 DEFAULT_DEBUG_CHANNEL(system);
22
23 /***********************************************************************
24  *      GetTimerResolution (USER.14)
25  */
26 LONG WINAPI GetTimerResolution16(void)
27 {
28         return (1000);
29 }
30
31 /***********************************************************************
32  *      ControlPanelInfo16   (USER.273)
33  */
34 void WINAPI ControlPanelInfo16( INT16 nInfoType, WORD wData, LPSTR lpBuffer)
35 {
36         FIXME("(%d, %04x, %p): stub.\n", nInfoType, wData, lpBuffer);
37 }
38
39 /***********************************************************************
40  *      SystemParametersInfoA   (USER32.540)
41  */
42 BOOL WINAPI SystemParametersInfoA( UINT uAction, UINT uParam,
43                                        LPVOID lpvParam, UINT fuWinIni )
44 {
45         int timeout;
46
47         switch (uAction) {
48         case SPI_GETBEEP:
49                 *(BOOL *) lpvParam = KEYBOARD_GetBeepActive();
50                 break;
51         case SPI_SETBEEP:
52                KEYBOARD_SetBeepActive(uParam);
53                break;
54
55         case SPI_GETBORDER:
56                 *(INT *)lpvParam = GetSystemMetrics( SM_CXFRAME );
57                 break;
58
59         case SPI_GETDRAGFULLWINDOWS:
60                 *(BOOL *) lpvParam = FALSE;
61                 break;
62
63         case SPI_SETDRAGFULLWINDOWS:
64                 break;
65
66         case SPI_GETFASTTASKSWITCH:
67                 if ( GetProfileIntA( "windows", "CoolSwitch", 1 ) == 1 )
68                         *(BOOL *) lpvParam = TRUE;
69                 else
70                         *(BOOL *) lpvParam = FALSE;
71                 break;
72                 
73         case SPI_GETGRIDGRANULARITY:
74                 *(INT*)lpvParam=GetProfileIntA("desktop","GridGranularity",1);
75                 break;
76
77         case SPI_GETICONTITLEWRAP:
78                 *(BOOL*)lpvParam=GetProfileIntA("desktop","IconTitleWrap",TRUE);
79                 break;
80
81         case SPI_GETKEYBOARDDELAY:
82                 *(INT*)lpvParam=GetProfileIntA("keyboard","KeyboardDelay",1);
83                 break;
84
85         case SPI_GETKEYBOARDSPEED:
86                 *(DWORD*)lpvParam=GetProfileIntA("keyboard","KeyboardSpeed",30);
87                 break;
88
89         case SPI_GETMENUDROPALIGNMENT:
90                 *(BOOL*)lpvParam=GetSystemMetrics(SM_MENUDROPALIGNMENT); /* XXX check this */
91                 break;
92
93         case SPI_GETSCREENSAVEACTIVE:           
94                if(USER_Driver.pGetScreenSaveActive() || 
95                   GetProfileIntA( "windows", "ScreenSaveActive", 1 ) == 1)
96                         *(BOOL*)lpvParam = TRUE;
97                 else
98                         *(BOOL*)lpvParam = FALSE;
99                 break;
100
101         case SPI_GETSCREENSAVETIMEOUT:
102                 timeout = USER_Driver.pGetScreenSaveTimeout();
103                 if(!timeout)
104                         timeout = GetProfileIntA( "windows", "ScreenSaveTimeout", 300 );
105                 *(INT *) lpvParam = timeout * 1000;
106                 break;
107
108         case SPI_ICONHORIZONTALSPACING:
109                 /* FIXME Get/SetProfileInt */
110                 if (lpvParam == NULL)
111                         /*SetSystemMetrics( SM_CXICONSPACING, uParam )*/ ;
112                 else
113                         *(INT*)lpvParam=GetSystemMetrics(SM_CXICONSPACING);
114                 break;
115
116         case SPI_ICONVERTICALSPACING:
117                 /* FIXME Get/SetProfileInt */
118                 if (lpvParam == NULL)
119                         /*SetSystemMetrics( SM_CYICONSPACING, uParam )*/ ;
120                 else
121                         *(INT*)lpvParam=GetSystemMetrics(SM_CYICONSPACING);
122                 break;
123
124         case SPI_GETICONTITLELOGFONT: {
125                 LPLOGFONTA lpLogFont = (LPLOGFONTA)lpvParam;
126
127                 /* from now on we always have an alias for MS Sans Serif */
128
129                 GetProfileStringA("Desktop", "IconTitleFaceName", "MS Sans Serif", 
130                         lpLogFont->lfFaceName, LF_FACESIZE );
131                 lpLogFont->lfHeight = -GetProfileIntA("Desktop","IconTitleSize", 13);
132                 lpLogFont->lfWidth = 0;
133                 lpLogFont->lfEscapement = lpLogFont->lfOrientation = 0;
134                 lpLogFont->lfWeight = FW_NORMAL;
135                 lpLogFont->lfItalic = FALSE;
136                 lpLogFont->lfStrikeOut = FALSE;
137                 lpLogFont->lfUnderline = FALSE;
138                 lpLogFont->lfCharSet = ANSI_CHARSET;
139                 lpLogFont->lfOutPrecision = OUT_DEFAULT_PRECIS;
140                 lpLogFont->lfClipPrecision = CLIP_DEFAULT_PRECIS;
141                 lpLogFont->lfPitchAndFamily = DEFAULT_PITCH | FF_SWISS;
142                 break;
143         }
144
145         case SPI_GETICONMETRICS: {
146             LPICONMETRICSA lpIcon = lpvParam;
147             if(!lpIcon || lpIcon->cbSize != sizeof(*lpIcon))
148                 return FALSE;
149             SystemParametersInfoA( SPI_ICONHORIZONTALSPACING, 0,
150                                    &lpIcon->iHorzSpacing, FALSE );
151             SystemParametersInfoA( SPI_ICONVERTICALSPACING, 0,
152                                    &lpIcon->iVertSpacing, FALSE );
153             SystemParametersInfoA( SPI_GETICONTITLEWRAP, 0,
154                                    &lpIcon->iTitleWrap, FALSE );
155             SystemParametersInfoA( SPI_GETICONTITLELOGFONT, 0,
156                                    &lpIcon->lfFont, FALSE );
157             break;
158         }
159         case SPI_GETWORKAREA:
160                 SetRect( (RECT *)lpvParam, 0, 0,
161                         GetSystemMetrics( SM_CXSCREEN ),
162                         GetSystemMetrics( SM_CYSCREEN )
163                 );
164                 break;
165         case SPI_GETNONCLIENTMETRICS: 
166
167 #define lpnm ((LPNONCLIENTMETRICSA)lpvParam)
168                 
169                 if (lpnm->cbSize == sizeof(NONCLIENTMETRICSA))
170                 {
171                     LPLOGFONTA lpLogFont = &(lpnm->lfMenuFont);
172                 
173                     /* clear the struct, so we have 'sane' members */
174                     memset(
175                         (char*)lpvParam+sizeof(lpnm->cbSize),
176                         0,
177                         lpnm->cbSize-sizeof(lpnm->cbSize)
178                     );
179
180                     /* FIXME: initialize geometry entries */
181                     /* FIXME: As these values are presumably in device units,
182                      *  we should calculate the defaults based on the screen dpi
183                      */
184                     /* caption */
185                     lpnm->iCaptionWidth = ((TWEAK_WineLook > WIN31_LOOK)  ? 32 : 20);
186                     lpnm->iCaptionHeight = lpnm->iCaptionWidth;
187                     lpnm->lfCaptionFont.lfWeight = FW_BOLD;
188                     SystemParametersInfoA(SPI_GETICONTITLELOGFONT, 0, (LPVOID)&(lpnm->lfCaptionFont),0);
189
190                     /* small caption */
191                     lpnm->iSmCaptionWidth = ((TWEAK_WineLook > WIN31_LOOK)  ? 32 : 17);
192                     lpnm->iSmCaptionHeight = lpnm->iSmCaptionWidth;
193                     SystemParametersInfoA(SPI_GETICONTITLELOGFONT, 0, (LPVOID)&(lpnm->lfSmCaptionFont),0);
194
195                     /* menus, FIXME: names of wine.conf entrys are bogus */
196
197                     lpnm->iMenuWidth = GetProfileIntA("Desktop","MenuWidth", 13);       /* size of the menu buttons*/
198                     lpnm->iMenuHeight = GetProfileIntA("Desktop","MenuHeight", 
199                                                 (TWEAK_WineLook > WIN31_LOOK) ? 13 : 27);
200
201                     GetProfileStringA("Desktop", "MenuFont", 
202                         (TWEAK_WineLook > WIN31_LOOK) ? "MS Sans Serif": "System", 
203                         lpLogFont->lfFaceName, LF_FACESIZE );
204
205                     lpLogFont->lfHeight = -GetProfileIntA("Desktop","MenuFontSize", 13);
206                     lpLogFont->lfWidth = 0;
207                     lpLogFont->lfEscapement = lpLogFont->lfOrientation = 0;
208                     lpLogFont->lfWeight = (TWEAK_WineLook > WIN31_LOOK) ? FW_NORMAL : FW_BOLD;
209                     lpLogFont->lfItalic = FALSE;
210                     lpLogFont->lfStrikeOut = FALSE;
211                     lpLogFont->lfUnderline = FALSE;
212                     lpLogFont->lfCharSet = ANSI_CHARSET;
213                     lpLogFont->lfOutPrecision = OUT_DEFAULT_PRECIS;
214                     lpLogFont->lfClipPrecision = CLIP_DEFAULT_PRECIS;
215                     lpLogFont->lfPitchAndFamily = DEFAULT_PITCH | FF_SWISS;
216
217                     SystemParametersInfoA(SPI_GETICONTITLELOGFONT, 0,
218                                                         (LPVOID)&(lpnm->lfStatusFont),0);
219                     SystemParametersInfoA(SPI_GETICONTITLELOGFONT, 0,
220                                                         (LPVOID)&(lpnm->lfMessageFont),0);
221                 }
222                 else
223                 {
224                     WARN("size mismatch !! (is %d; should be %d)\n", lpnm->cbSize, sizeof(NONCLIENTMETRICSA));
225                     return FALSE;
226                 }
227 #undef lpnm
228                 break;
229
230         case SPI_GETANIMATION: {
231                 LPANIMATIONINFO lpAnimInfo = (LPANIMATIONINFO)lpvParam;
232  
233                 /* Tell it "disabled" */
234                 lpAnimInfo->cbSize = sizeof(ANIMATIONINFO);
235                 uParam = sizeof(ANIMATIONINFO);
236                 lpAnimInfo->iMinAnimate = 0; /* Minimise and restore animation is disabled (nonzero == enabled) */
237                 break;
238         }
239  
240         case SPI_SETANIMATION: {
241                 LPANIMATIONINFO lpAnimInfo = (LPANIMATIONINFO)lpvParam;
242  
243                 /* Do nothing */
244                 WARN("SPI_SETANIMATION ignored.\n");
245                 lpAnimInfo->cbSize = sizeof(ANIMATIONINFO);
246                 uParam = sizeof(ANIMATIONINFO);
247                 break;
248         }
249
250         case SPI_GETHIGHCONTRAST:
251         {
252                 LPHIGHCONTRASTA lpHighContrastA = (LPHIGHCONTRASTA)lpvParam;
253
254                 FIXME("SPI_GETHIGHCONTRAST not fully implemented\n");
255
256                 if ( lpHighContrastA->cbSize == sizeof( HIGHCONTRASTA ) )
257                 {
258                         /* Indicate that there is no high contrast available */
259                         lpHighContrastA->dwFlags = 0;
260                         lpHighContrastA->lpszDefaultScheme = NULL;
261                 }
262                 else
263                 {
264                         return FALSE;
265                 }
266
267                 break;
268         }
269
270         default:
271                 return SystemParametersInfo16(uAction,uParam,lpvParam,fuWinIni);
272         }
273         return TRUE;
274 }
275
276
277 /***********************************************************************
278  *      SystemParametersInfo16   (USER.483)
279  */
280 BOOL16 WINAPI SystemParametersInfo16( UINT16 uAction, UINT16 uParam,
281                                       LPVOID lpvParam, UINT16 fuWinIni )
282 {
283         int timeout; 
284         char buffer[256];
285
286         switch (uAction)
287         {
288                 case SPI_GETBEEP:
289                         *(BOOL *) lpvParam = KEYBOARD_GetBeepActive();
290                         break;
291                 
292                 case SPI_GETBORDER:
293                         *(INT16 *)lpvParam = GetSystemMetrics( SM_CXFRAME );
294                         break;
295
296                 case SPI_GETFASTTASKSWITCH:
297                     if ( GetProfileIntA( "windows", "CoolSwitch", 1 ) == 1 )
298                           *(BOOL16 *) lpvParam = TRUE;
299                         else
300                           *(BOOL16 *) lpvParam = FALSE;
301                         break;
302
303                 case SPI_GETGRIDGRANULARITY:
304                     *(INT16 *) lpvParam = GetProfileIntA( "desktop", 
305                                                           "GridGranularity",
306                                                           1 );
307                     break;
308
309                 case SPI_GETICONTITLEWRAP:
310                     *(BOOL16 *) lpvParam = GetProfileIntA( "desktop",
311                                                            "IconTitleWrap",
312                                                            TRUE );
313                     break;
314
315                 case SPI_GETKEYBOARDDELAY:
316                     *(INT16 *) lpvParam = GetProfileIntA( "keyboard",
317                                                           "KeyboardDelay", 1 );
318                     break;
319
320                 case SPI_GETKEYBOARDSPEED:
321                     *(WORD *) lpvParam = GetProfileIntA( "keyboard",
322                                                            "KeyboardSpeed",
323                                                            30 );
324                     break;
325
326                 case SPI_GETMENUDROPALIGNMENT:
327                         *(BOOL16 *) lpvParam = GetSystemMetrics( SM_MENUDROPALIGNMENT ); /* XXX check this */
328                         break;
329
330                 case SPI_GETSCREENSAVEACTIVE:
331                   if(USER_Driver.pGetScreenSaveActive() ||
332                      GetProfileIntA( "windows", "ScreenSaveActive", 1 ) == 1)
333                         *(BOOL16 *) lpvParam = TRUE;
334                     else
335                         *(BOOL16 *) lpvParam = FALSE;
336                     break;
337
338                 case SPI_GETSCREENSAVETIMEOUT:
339                         timeout = USER_Driver.pGetScreenSaveTimeout();
340                         if(!timeout)
341                             timeout = GetProfileIntA( "windows", "ScreenSaveTimeout", 300 );
342                         *(INT16 *) lpvParam = timeout;
343                         break;
344
345                 case SPI_ICONHORIZONTALSPACING:
346                     /* FIXME Get/SetProfileInt */
347                         if (lpvParam == NULL)
348                             /*SetSystemMetrics( SM_CXICONSPACING, uParam )*/ ;
349                         else
350                             *(INT16 *)lpvParam = GetSystemMetrics( SM_CXICONSPACING );
351                         break;
352
353                 case SPI_ICONVERTICALSPACING:
354                     /* FIXME Get/SetProfileInt */
355                     if (lpvParam == NULL)
356                         /*SetSystemMetrics( SM_CYICONSPACING, uParam )*/ ;
357                     else
358                         *(INT16 *)lpvParam = GetSystemMetrics(SM_CYICONSPACING);
359                     break;
360
361                 case SPI_SETBEEP:
362                         KEYBOARD_SetBeepActive(uParam);
363                         break;
364
365                 case SPI_SETSCREENSAVEACTIVE:
366                         USER_Driver.pSetScreenSaveActive(uParam);
367                         break;
368
369                 case SPI_SETSCREENSAVETIMEOUT:
370                         USER_Driver.pSetScreenSaveTimeout(uParam);
371                         break;
372
373                 case SPI_SETDESKWALLPAPER:
374                         return (SetDeskWallPaper((LPSTR) lpvParam));
375                         break;
376
377                 case SPI_SETDESKPATTERN:
378                         if ((INT16)uParam == -1) {
379                                 GetProfileStringA("Desktop", "Pattern", 
380                                                 "170 85 170 85 170 85 170 85", 
381                                                 buffer, sizeof(buffer) );
382                                 return (DESKTOP_SetPattern((LPSTR) buffer));
383                         } else
384                                 return (DESKTOP_SetPattern((LPSTR) lpvParam));
385                         break;
386
387                 case SPI_GETICONTITLELOGFONT: 
388                 {
389                     LPLOGFONT16 lpLogFont = (LPLOGFONT16)lpvParam;
390                     GetProfileStringA("Desktop", "IconTitleFaceName", "MS Sans Serif", 
391                                         lpLogFont->lfFaceName, LF_FACESIZE );
392                     lpLogFont->lfHeight = -GetProfileIntA("Desktop","IconTitleSize", 13);
393                     lpLogFont->lfWidth = 0;
394                     lpLogFont->lfEscapement = lpLogFont->lfOrientation = 0;
395                     lpLogFont->lfWeight = FW_NORMAL;
396                     lpLogFont->lfItalic = FALSE;
397                     lpLogFont->lfStrikeOut = FALSE;
398                     lpLogFont->lfUnderline = FALSE;
399                     lpLogFont->lfCharSet = ANSI_CHARSET;
400                     lpLogFont->lfOutPrecision = OUT_DEFAULT_PRECIS;
401                     lpLogFont->lfClipPrecision = CLIP_DEFAULT_PRECIS;
402                     lpLogFont->lfPitchAndFamily = DEFAULT_PITCH | FF_SWISS;
403                     break;
404                 }
405                 case SPI_GETNONCLIENTMETRICS:
406
407 #define lpnm ((LPNONCLIENTMETRICS16)lpvParam)
408                     if( lpnm->cbSize == sizeof(NONCLIENTMETRICS16) )
409                     {
410                         /* clear the struct, so we have 'sane' members */
411                         memset(
412                             (char*)lpvParam+sizeof(lpnm->cbSize),
413                             0,
414                             lpnm->cbSize-sizeof(lpnm->cbSize)
415                         );
416                         /* FIXME: initialize geometry entries */
417                         SystemParametersInfo16( SPI_GETICONTITLELOGFONT, 0, 
418                                                         (LPVOID)&(lpnm->lfCaptionFont),0);
419                         lpnm->lfCaptionFont.lfWeight = FW_BOLD;
420                         SystemParametersInfo16( SPI_GETICONTITLELOGFONT, 0,
421                                                         (LPVOID)&(lpnm->lfSmCaptionFont),0);
422                         SystemParametersInfo16( SPI_GETICONTITLELOGFONT, 0,
423                                                         (LPVOID)&(lpnm->lfMenuFont),0);
424                         SystemParametersInfo16( SPI_GETICONTITLELOGFONT, 0,
425                                                         (LPVOID)&(lpnm->lfStatusFont),0);
426                         SystemParametersInfo16( SPI_GETICONTITLELOGFONT, 0,
427                                                         (LPVOID)&(lpnm->lfMessageFont),0);
428                     }
429                     else /* winfile 95 sets sbSize to 340 */
430                         SystemParametersInfoA( uAction, uParam, lpvParam, fuWinIni );
431 #undef lpnm
432                     break;
433
434                 case SPI_LANGDRIVER:
435                 case SPI_SETBORDER:
436                 case SPI_SETDOUBLECLKHEIGHT:
437                 case SPI_SETDOUBLECLICKTIME:
438                 case SPI_SETDOUBLECLKWIDTH:
439                 case SPI_SETFASTTASKSWITCH:
440                 case SPI_SETKEYBOARDDELAY:
441                 case SPI_SETKEYBOARDSPEED:
442                         WARN("Option %d ignored.\n", uAction);
443                         break;
444
445                 case SPI_GETWORKAREA:
446                     SetRect16( (RECT16 *)lpvParam, 0, 0,
447                                GetSystemMetrics( SM_CXSCREEN ),
448                                GetSystemMetrics( SM_CYSCREEN ) );
449                     break;
450
451                 /* FIXME need to implement SPI_SETMOUSEHOVER... */
452                 case SPI_GETMOUSEHOVERWIDTH:
453                     *(INT16 *)lpvParam = 4;
454                     break;
455
456                 case SPI_GETMOUSEHOVERHEIGHT:
457                     *(INT16 *)lpvParam = 4;
458                     break;
459
460                 case SPI_GETMOUSEHOVERTIME:
461                     *(INT16 *)lpvParam = 400; /* default for menu dropdowns */
462                     break;
463                 
464                 default:
465                         FIXME("Unknown option %d.\n", uAction);
466                         SetLastError(ERROR_INVALID_SPI_VALUE);
467                         return 0;
468         }
469         return 1;
470 }
471
472 /***********************************************************************
473  *      SystemParametersInfoW   (USER32.541)
474  */
475 BOOL WINAPI SystemParametersInfoW( UINT uAction, UINT uParam,
476                                        LPVOID lpvParam, UINT fuWinIni )
477 {
478     char buffer[256];
479
480     switch (uAction)
481     {
482     case SPI_SETDESKWALLPAPER:
483         if (lpvParam)
484         {
485             lstrcpynWtoA(buffer,(LPWSTR)lpvParam,sizeof(buffer));
486             return SetDeskWallPaper(buffer);
487         }
488         return SetDeskWallPaper(NULL);
489
490     case SPI_SETDESKPATTERN:
491         if ((INT) uParam == -1)
492         {
493             GetProfileStringA("Desktop", "Pattern", 
494                                 "170 85 170 85 170 85 170 85", 
495                                 buffer, sizeof(buffer) );
496             return (DESKTOP_SetPattern((LPSTR) buffer));
497         }
498         if (lpvParam)
499         {
500             lstrcpynWtoA(buffer,(LPWSTR)lpvParam,sizeof(buffer));
501             return DESKTOP_SetPattern(buffer);
502         }
503         return DESKTOP_SetPattern(NULL);
504
505     case SPI_GETICONTITLELOGFONT:
506         {
507             LPLOGFONTW lpLogFont = (LPLOGFONTW)lpvParam;
508
509             GetProfileStringA("Desktop", "IconTitleFaceName", "MS Sans Serif", 
510                          buffer, sizeof(buffer) );
511             lstrcpynAtoW(lpLogFont->lfFaceName, buffer, LF_FACESIZE);
512             lpLogFont->lfHeight = 17;
513             lpLogFont->lfWidth = 0;
514             lpLogFont->lfEscapement = lpLogFont->lfOrientation = 0;
515             lpLogFont->lfWeight = FW_NORMAL;
516             lpLogFont->lfItalic = lpLogFont->lfStrikeOut = lpLogFont->lfUnderline = FALSE;
517             lpLogFont->lfCharSet = ANSI_CHARSET;
518             lpLogFont->lfOutPrecision = OUT_DEFAULT_PRECIS;
519             lpLogFont->lfClipPrecision = CLIP_DEFAULT_PRECIS;
520             lpLogFont->lfPitchAndFamily = DEFAULT_PITCH | FF_SWISS;
521         }
522         break;
523         case SPI_GETICONMETRICS: {
524             LPICONMETRICSW lpIcon = lpvParam;
525             if(!lpIcon || lpIcon->cbSize != sizeof(*lpIcon))
526                 return FALSE;
527             SystemParametersInfoW( SPI_ICONHORIZONTALSPACING, 0,
528                                    &lpIcon->iHorzSpacing, FALSE );
529             SystemParametersInfoW( SPI_ICONVERTICALSPACING, 0,
530                                    &lpIcon->iVertSpacing, FALSE );
531             SystemParametersInfoW( SPI_GETICONTITLEWRAP, 0,
532                                    &lpIcon->iTitleWrap, FALSE );
533             SystemParametersInfoW( SPI_GETICONTITLELOGFONT, 0,
534                                    &lpIcon->lfFont, FALSE );
535             break;
536         }
537     case SPI_GETNONCLIENTMETRICS: {
538         /* FIXME: implement correctly */
539         LPNONCLIENTMETRICSW     lpnm=(LPNONCLIENTMETRICSW)lpvParam;
540
541         /* clear the struct, so we have 'sane' members */
542         memset((char*)lpvParam+sizeof(lpnm->cbSize),
543                 0,
544                 lpnm->cbSize-sizeof(lpnm->cbSize)
545         );
546         SystemParametersInfoW(SPI_GETICONTITLELOGFONT,0,(LPVOID)&(lpnm->lfCaptionFont),0);
547         lpnm->lfCaptionFont.lfWeight = FW_BOLD;
548         SystemParametersInfoW(SPI_GETICONTITLELOGFONT,0,(LPVOID)&(lpnm->lfSmCaptionFont),0);
549         SystemParametersInfoW(SPI_GETICONTITLELOGFONT,0,(LPVOID)&(lpnm->lfMenuFont),0);
550         SystemParametersInfoW(SPI_GETICONTITLELOGFONT,0,(LPVOID)&(lpnm->lfStatusFont),0);
551         SystemParametersInfoW(SPI_GETICONTITLELOGFONT,0,(LPVOID)&(lpnm->lfMessageFont),0);
552         break;
553     }
554
555     case SPI_GETHIGHCONTRAST:
556     {
557        LPHIGHCONTRASTW lpHighContrastW = (LPHIGHCONTRASTW)lpvParam;
558
559        FIXME("SPI_GETHIGHCONTRAST not fully implemented\n");
560
561        if ( lpHighContrastW->cbSize == sizeof( HIGHCONTRASTW ) )
562        {
563           /* Indicate that there is no high contrast available */
564           lpHighContrastW->dwFlags = 0;
565           lpHighContrastW->lpszDefaultScheme = NULL;
566        }
567        else
568        {
569           return FALSE;
570        }
571
572        break;
573     }
574
575     default:
576         return SystemParametersInfoA(uAction,uParam,lpvParam,fuWinIni);
577         
578     }
579     return TRUE;
580 }