+++ /dev/null
-/* Unit test suite for functions SystemParametersInfo and GetSystemMetrics.
- *
- * Copyright 2002 Andriy Palamarchuk
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
- */
-#undef _WIN32_WINNT
-#define _WIN32_WINNT 0x0600 /* For SPI_GETMOUSEHOVERWIDTH and more */
-//#define _WIN32_IE 0x0700
-#undef WINVER
-#define WINVER 0x0600 /* For COLOR_MENUBAR, NONCLIENTMETRICS with padding */
-
-#include <assert.h>
-#include <stdlib.h>
-#include <stdarg.h>
-#include <stdio.h>
-
-#include "wine/test.h"
-#include "windef.h"
-#include "winbase.h"
-#include "wingdi.h"
-#include "winreg.h"
-#include "winuser.h"
-#include "winnls.h"
-
-#ifndef SPI_GETDESKWALLPAPER
-# define SPI_GETDESKWALLPAPER 0x0073
-#endif
-
-static LONG (WINAPI *pChangeDisplaySettingsExA)(LPCSTR, LPDEVMODEA, HWND, DWORD, LPVOID);
-static BOOL (WINAPI *pIsProcessDPIAware)(void);
-static BOOL (WINAPI *pSetProcessDPIAware)(void);
-static LONG (WINAPI *pGetAutoRotationState)(PAR_STATE);
-
-static BOOL strict;
-static int dpi, real_dpi;
-static BOOL iswin9x;
-static HDC hdc;
-
-#define eq(received, expected, label, type) \
- ok((received) == (expected), "%s: got " type " instead of " type "\n", (label),(received),(expected))
-
-
-#define SPI_SETBEEP_REGKEY "Control Panel\\Sound"
-#define SPI_SETBEEP_VALNAME "Beep"
-#define SPI_SETMOUSE_REGKEY "Control Panel\\Mouse"
-#define SPI_SETMOUSE_VALNAME1 "MouseThreshold1"
-#define SPI_SETMOUSE_VALNAME2 "MouseThreshold2"
-#define SPI_SETMOUSE_VALNAME3 "MouseSpeed"
-#define SPI_SETBORDER_REGKEY "Control Panel\\Desktop\\WindowMetrics"
-#define SPI_SETBORDER_REGKEY2 "Control Panel\\Desktop"
-#define SPI_SETBORDER_VALNAME "BorderWidth"
-#define SPI_METRIC_REGKEY "Control Panel\\Desktop\\WindowMetrics"
-#define SPI_SCROLLWIDTH_VALNAME "ScrollWidth"
-#define SPI_SCROLLHEIGHT_VALNAME "ScrollHeight"
-#define SPI_CAPTIONWIDTH_VALNAME "CaptionWidth"
-#define SPI_CAPTIONHEIGHT_VALNAME "CaptionHeight"
-#define SPI_CAPTIONFONT_VALNAME "CaptionFont"
-#define SPI_SMCAPTIONWIDTH_VALNAME "SmCaptionWidth"
-#define SPI_SMCAPTIONHEIGHT_VALNAME "SmCaptionHeight"
-#define SPI_SMCAPTIONFONT_VALNAME "SmCaptionFont"
-#define SPI_MENUWIDTH_VALNAME "MenuWidth"
-#define SPI_MENUHEIGHT_VALNAME "MenuHeight"
-#define SPI_MENUFONT_VALNAME "MenuFont"
-#define SPI_STATUSFONT_VALNAME "StatusFont"
-#define SPI_MESSAGEFONT_VALNAME "MessageFont"
-
-#define SPI_SETKEYBOARDSPEED_REGKEY "Control Panel\\Keyboard"
-#define SPI_SETKEYBOARDSPEED_VALNAME "KeyboardSpeed"
-#define SPI_ICONHORIZONTALSPACING_REGKEY "Control Panel\\Desktop\\WindowMetrics"
-#define SPI_ICONHORIZONTALSPACING_REGKEY2 "Control Panel\\Desktop"
-#define SPI_ICONHORIZONTALSPACING_VALNAME "IconSpacing"
-#define SPI_ICONVERTICALSPACING_REGKEY "Control Panel\\Desktop\\WindowMetrics"
-#define SPI_ICONVERTICALSPACING_REGKEY2 "Control Panel\\Desktop"
-#define SPI_ICONVERTICALSPACING_VALNAME "IconVerticalSpacing"
-#define SPI_MINIMIZEDMETRICS_REGKEY "Control Panel\\Desktop\\WindowMetrics"
-#define SPI_MINWIDTH_VALNAME "MinWidth"
-#define SPI_MINHORZGAP_VALNAME "MinHorzGap"
-#define SPI_MINVERTGAP_VALNAME "MinVertGap"
-#define SPI_MINARRANGE_VALNAME "MinArrange"
-#define SPI_SETSCREENSAVETIMEOUT_REGKEY "Control Panel\\Desktop"
-#define SPI_SETSCREENSAVETIMEOUT_VALNAME "ScreenSaveTimeOut"
-#define SPI_SETSCREENSAVEACTIVE_REGKEY "Control Panel\\Desktop"
-#define SPI_SETSCREENSAVEACTIVE_VALNAME "ScreenSaveActive"
-#define SPI_SETGRIDGRANULARITY_REGKEY "Control Panel\\Desktop"
-#define SPI_SETGRIDGRANULARITY_VALNAME "GridGranularity"
-#define SPI_SETKEYBOARDDELAY_REGKEY "Control Panel\\Keyboard"
-#define SPI_SETKEYBOARDDELAY_VALNAME "KeyboardDelay"
-#define SPI_SETICONTITLEWRAP_REGKEY1 "Control Panel\\Desktop\\WindowMetrics"
-#define SPI_SETICONTITLEWRAP_REGKEY2 "Control Panel\\Desktop"
-#define SPI_SETICONTITLEWRAP_VALNAME "IconTitleWrap"
-#define SPI_SETMENUDROPALIGNMENT_REGKEY1 "Software\\Microsoft\\Windows NT\\CurrentVersion\\Windows"
-#define SPI_SETMENUDROPALIGNMENT_REGKEY2 "Control Panel\\Desktop"
-#define SPI_SETMENUDROPALIGNMENT_VALNAME "MenuDropAlignment"
-#define SPI_SETDOUBLECLKWIDTH_REGKEY1 "Control Panel\\Mouse"
-#define SPI_SETDOUBLECLKWIDTH_REGKEY2 "Control Panel\\Desktop"
-#define SPI_SETDOUBLECLKWIDTH_VALNAME "DoubleClickWidth"
-#define SPI_SETDOUBLECLKHEIGHT_REGKEY1 "Control Panel\\Mouse"
-#define SPI_SETDOUBLECLKHEIGHT_REGKEY2 "Control Panel\\Desktop"
-#define SPI_SETDOUBLECLKHEIGHT_VALNAME "DoubleClickHeight"
-#define SPI_SETDOUBLECLICKTIME_REGKEY "Control Panel\\Mouse"
-#define SPI_SETDOUBLECLICKTIME_VALNAME "DoubleClickSpeed"
-#define SPI_SETMOUSEBUTTONSWAP_REGKEY "Control Panel\\Mouse"
-#define SPI_SETMOUSEBUTTONSWAP_VALNAME "SwapMouseButtons"
-#define SPI_SETWORKAREA_REGKEY "Control Panel\\Desktop"
-#define SPI_SETWORKAREA_VALNAME "WINE_WorkArea"
-#define SPI_SETSHOWSOUNDS_REGKEY "Control Panel\\Accessibility\\ShowSounds"
-#define SPI_SETSHOWSOUNDS_VALNAME "On"
-#define SPI_SETKEYBOARDPREF_REGKEY "Control Panel\\Accessibility\\Keyboard Preference"
-#define SPI_SETKEYBOARDPREF_VALNAME "On"
-#define SPI_SETKEYBOARDPREF_REGKEY_LEGACY "Control Panel\\Accessibility"
-#define SPI_SETKEYBOARDPREF_VALNAME_LEGACY "Keyboard Preference"
-#define SPI_SETSCREENREADER_REGKEY "Control Panel\\Accessibility\\Blind Access"
-#define SPI_SETSCREENREADER_VALNAME "On"
-#define SPI_SETSCREENREADER_REGKEY_LEGACY "Control Panel\\Accessibility"
-#define SPI_SETSCREENREADER_VALNAME_LEGACY "Blind Access"
-#define SPI_SETFONTSMOOTHING_REGKEY "Control Panel\\Desktop"
-#define SPI_SETFONTSMOOTHING_VALNAME "FontSmoothing"
-#define SPI_SETFONTSMOOTHINGTYPE_VALNAME "FontSmoothingType"
-#define SPI_SETFONTSMOOTHINGCONTRAST_VALNAME "FontSmoothingGamma"
-#define SPI_SETFONTSMOOTHINGORIENTATION_VALNAME "FontSmoothingOrientation"
-#define SPI_SETLOWPOWERACTIVE_REGKEY "Control Panel\\Desktop"
-#define SPI_SETLOWPOWERACTIVE_VALNAME "LowPowerActive"
-#define SPI_SETPOWEROFFACTIVE_REGKEY "Control Panel\\Desktop"
-#define SPI_SETPOWEROFFACTIVE_VALNAME "PowerOffActive"
-#define SPI_SETDRAGFULLWINDOWS_REGKEY "Control Panel\\Desktop"
-#define SPI_SETDRAGFULLWINDOWS_VALNAME "DragFullWindows"
-#define SPI_SETSNAPTODEFBUTTON_REGKEY "Control Panel\\Mouse"
-#define SPI_SETSNAPTODEFBUTTON_VALNAME "SnapToDefaultButton"
-#define SPI_SETMOUSEHOVERWIDTH_REGKEY "Control Panel\\Mouse"
-#define SPI_SETMOUSEHOVERWIDTH_VALNAME "MouseHoverWidth"
-#define SPI_SETMOUSEHOVERHEIGHT_REGKEY "Control Panel\\Mouse"
-#define SPI_SETMOUSEHOVERHEIGHT_VALNAME "MouseHoverHeight"
-#define SPI_SETMOUSEHOVERTIME_REGKEY "Control Panel\\Mouse"
-#define SPI_SETMOUSEHOVERTIME_VALNAME "MouseHoverTime"
-#define SPI_SETMOUSESCROLLCHARS_REGKEY "Control Panel\\Desktop"
-#define SPI_SETMOUSESCROLLCHARS_VALNAME "WheelScrollChars"
-#define SPI_SETMOUSESCROLLLINES_REGKEY "Control Panel\\Desktop"
-#define SPI_SETMOUSESCROLLLINES_VALNAME "WheelScrollLines"
-#define SPI_SETMENUSHOWDELAY_REGKEY "Control Panel\\Desktop"
-#define SPI_SETMENUSHOWDELAY_VALNAME "MenuShowDelay"
-#define SPI_SETDESKWALLPAPER_REGKEY "Control Panel\\Desktop"
-#define SPI_SETDESKWALLPAPER_VALNAME "Wallpaper"
-
-/* volatile registry branch under CURRENT_USER_REGKEY for temporary values storage */
-#define WINE_CURRENT_USER_REGKEY "Wine"
-
-static HWND ghTestWnd;
-
-static DWORD WINAPI SysParamsThreadFunc( LPVOID lpParam );
-static LRESULT CALLBACK SysParamsTestWndProc( HWND hWnd, UINT msg, WPARAM wParam,
- LPARAM lParam );
-static int change_counter;
-static int change_setworkarea_param, change_iconverticalspacing_param;
-static int change_last_param;
-static int last_bpp;
-static BOOL displaychange_ok = FALSE, displaychange_test_active = FALSE;
-static HANDLE displaychange_sem = 0;
-
-static BOOL get_reg_dword(HKEY base, const char *key_name, const char *value_name, DWORD *value)
-{
- HKEY key;
- DWORD type, data, size = sizeof(data);
- BOOL ret = FALSE;
-
- if (RegOpenKeyA(base, key_name, &key) == ERROR_SUCCESS)
- {
- if (RegQueryValueExA(key, value_name, NULL, &type, (void *)&data, &size) == ERROR_SUCCESS &&
- type == REG_DWORD)
- {
- *value = data;
- ret = TRUE;
- }
- RegCloseKey(key);
- }
- return ret;
-}
-
-static DWORD get_real_dpi(void)
-{
- DWORD dpi;
-
- if (get_reg_dword(HKEY_CURRENT_USER, "Control Panel\\Desktop", "LogPixels", &dpi))
- return dpi;
- if (get_reg_dword(HKEY_CURRENT_CONFIG, "Software\\Fonts", "LogPixels", &dpi))
- return dpi;
- return USER_DEFAULT_SCREEN_DPI;
-}
-
-static LRESULT CALLBACK SysParamsTestWndProc( HWND hWnd, UINT msg, WPARAM wParam,
- LPARAM lParam )
-{
- switch (msg) {
-
- case WM_DISPLAYCHANGE:
- ok(displaychange_ok, "Unexpected WM_DISPLAYCHANGE message\n");
- last_bpp = wParam;
- displaychange_ok = FALSE;
- ReleaseSemaphore(displaychange_sem, 1, 0);
- break;
-
- case WM_SETTINGCHANGE:
- if (change_counter>0) {
- /* ignore these messages caused by resizing of toolbars */
- if( wParam == SPI_SETWORKAREA){
- change_setworkarea_param = 1;
- break;
- } else if( wParam == SPI_ICONVERTICALSPACING) {
- change_iconverticalspacing_param = 1;
- break;
- } else if( displaychange_test_active)
- break;
- if( !change_last_param){
- change_last_param = wParam;
- break;
- }
- ok(0,"too many changes counter=%d last change=%d\n",
- change_counter,change_last_param);
- change_counter++;
- change_last_param = wParam;
- break;
- }
- change_counter++;
- change_last_param = change_setworkarea_param = change_iconverticalspacing_param =0;
- if( wParam == SPI_SETWORKAREA)
- change_setworkarea_param = 1;
- else if( wParam == SPI_ICONVERTICALSPACING)
- change_iconverticalspacing_param = 1;
- else
- change_last_param = wParam;
- break;
-
- case WM_DESTROY:
- PostQuitMessage( 0 );
- break;
-
- /* drop through */
- default:
- return( DefWindowProcA( hWnd, msg, wParam, lParam ) );
- }
-
- return 0;
-}
-
-/*
-Performs testing for system parameters messages
-params:
- - system parameter id
- - supposed value of the registry key
-*/
-static void test_change_message( int action, int optional )
-{
- if (change_counter==0 && optional==1)
- return;
- ok( 1 == change_counter,
- "Missed a message: change_counter=%d\n", change_counter );
- change_counter = 0;
- ok( action == change_last_param ||
- ( change_setworkarea_param && action == SPI_SETWORKAREA) ||
- ( change_iconverticalspacing_param && action == SPI_ICONVERTICALSPACING),
- "Wrong action got %d expected %d\n", change_last_param, action );
- change_last_param = 0;
-}
-
-static BOOL test_error_msg ( int rc, const char *name )
-{
- DWORD last_error = GetLastError();
-
- if (rc==0)
- {
- if (last_error==0xdeadbeef || last_error==ERROR_INVALID_SPI_VALUE || last_error==ERROR_INVALID_PARAMETER)
- {
- skip("%s not supported on this platform\n", name);
- }
- else if (last_error==ERROR_ACCESS_DENIED)
- {
- skip("%s does not have privileges to run\n", name);
- }
- else
- {
- trace("%s failed for reason: %d. Indicating test failure and skipping remainder of test\n",name,last_error);
- ok(rc!=0,"SystemParametersInfoA: rc=%d err=%d\n",rc,last_error);
- }
- return FALSE;
- }
- else
- {
- ok(rc!=0,"SystemParametersInfoA: rc=%d err=%d\n",rc,last_error);
- return TRUE;
- }
-}
-
-/*
- * Tests the HKEY_CURRENT_USER subkey value.
- * The value should contain string value.
- */
-static void _test_reg_key( LPCSTR subKey1, LPCSTR subKey2, LPCSTR valName1, LPCSTR valName2,
- const void *exp_value, DWORD exp_type, BOOL optional )
-{
- CHAR value[MAX_PATH];
- DWORD valueLen;
- DWORD type;
- HKEY hKey;
- LONG rc;
- int found=0;
-
- *value='\0';
- valueLen=sizeof(value);
- RegOpenKeyA( HKEY_CURRENT_USER, subKey1, &hKey );
- rc=RegQueryValueExA( hKey, valName1, NULL, &type, (LPBYTE)value, &valueLen );
- RegCloseKey( hKey );
- if (rc==ERROR_SUCCESS)
- {
- ok( type == exp_type, "wrong type %u/%u\n", type, exp_type );
- switch (exp_type)
- {
- case REG_DWORD:
- ok( *(DWORD *)value == *(DWORD *)exp_value,
- "Wrong value in registry: %s %s %08x/%08x\n",
- subKey1, valName1, *(DWORD *)value, *(DWORD *)exp_value );
- break;
- case REG_SZ:
- ok( !strcmp( exp_value, value ),
- "Wrong value in registry: %s %s '%s' instead of '%s'\n",
- subKey1, valName1, value, (const char *)exp_value );
- break;
- }
- found++;
- }
- else if (strict)
- {
- ok(0,"Missing registry entry: subKey=%s, valName=%s\n",
- subKey1, valName1);
- }
- if (valName2)
- {
- *value='\0';
- valueLen=sizeof(value);
- RegOpenKeyA( HKEY_CURRENT_USER, subKey1, &hKey );
- rc=RegQueryValueExA( hKey, valName2, NULL, &type, (LPBYTE)value, &valueLen );
- RegCloseKey( hKey );
- if (rc==ERROR_SUCCESS)
- {
- ok( type == exp_type, "wrong type %u/%u\n", type, exp_type );
- switch (exp_type)
- {
- case REG_DWORD:
- ok( *(DWORD *)value == *(DWORD *)exp_value,
- "Wrong value in registry: %s %s %08x/%08x\n",
- subKey1, valName1, *(DWORD *)value, *(DWORD *)exp_value );
- break;
- case REG_SZ:
- ok( !strcmp( exp_value, value ),
- "Wrong value in registry: %s %s '%s' instead of '%s'\n",
- subKey1, valName1, value, (const char *)exp_value );
- break;
- }
- found++;
- }
- else if (strict)
- {
- ok( 0,"Missing registry entry: subKey=%s, valName=%s\n",
- subKey1, valName2 );
- }
- }
- if (subKey2 && !strict)
- {
- *value='\0';
- valueLen=sizeof(value);
- RegOpenKeyA( HKEY_CURRENT_USER, subKey2, &hKey );
- rc=RegQueryValueExA( hKey, valName1, NULL, &type, (LPBYTE)value, &valueLen );
- RegCloseKey( hKey );
- if (rc==ERROR_SUCCESS)
- {
- ok( type == exp_type, "wrong type %u/%u\n", type, exp_type );
- switch (exp_type)
- {
- case REG_DWORD:
- ok( *(DWORD *)value == *(DWORD *)exp_value,
- "Wrong value in registry: %s %s %08x/%08x\n",
- subKey1, valName1, *(DWORD *)value, *(DWORD *)exp_value );
- break;
- case REG_SZ:
- ok( !strcmp( exp_value, value ),
- "Wrong value in registry: %s %s '%s' instead of '%s'\n",
- subKey1, valName1, value, (const char *)exp_value );
- break;
- }
- found++;
- }
- else if (strict)
- {
- ok( 0,"Missing registry entry: subKey=%s, valName=%s\n",
- subKey2, valName1 );
- }
- if (valName2)
- {
- *value='\0';
- valueLen=sizeof(value);
- RegOpenKeyA( HKEY_CURRENT_USER, subKey2, &hKey );
- rc=RegQueryValueExA( hKey, valName2, NULL, &type, (LPBYTE)value, &valueLen );
- RegCloseKey( hKey );
- if (rc==ERROR_SUCCESS)
- {
- ok( type == exp_type, "wrong type %u/%u\n", type, exp_type );
- switch (exp_type)
- {
- case REG_DWORD:
- ok( *(DWORD *)value == *(DWORD *)exp_value,
- "Wrong value in registry: %s %s %08x/%08x\n",
- subKey1, valName1, *(DWORD *)value, *(DWORD *)exp_value );
- break;
- case REG_SZ:
- ok( !strcmp( exp_value, value ),
- "Wrong value in registry: %s %s '%s' instead of '%s'\n",
- subKey1, valName1, value, (const char *)exp_value );
- break;
- }
- found++;
- }
- else if (strict)
- {
- ok( 0,"Missing registry entry: subKey=%s, valName=%s\n",
- subKey2, valName2 );
- }
- }
- }
- ok(found || optional,
- "Missing registry values: %s or %s in keys: %s or %s\n",
- valName1, (valName2?valName2:"<n/a>"), subKey1, (subKey2?subKey2:"<n/a>") );
-}
-
-#define test_reg_key( subKey, valName, testValue ) \
- _test_reg_key( subKey, NULL, valName, NULL, testValue, REG_SZ, FALSE )
-#define test_reg_key_optional( subKey, valName, testValue ) \
- _test_reg_key( subKey, NULL, valName, NULL, testValue, REG_SZ, TRUE )
-#define test_reg_key_ex( subKey1, subKey2, valName, testValue ) \
- _test_reg_key( subKey1, subKey2, valName, NULL, testValue, REG_SZ, FALSE )
-#define test_reg_key_ex2( subKey1, subKey2, valName1, valName2, testValue ) \
- _test_reg_key( subKey1, subKey2, valName1, valName2, testValue, REG_SZ, FALSE )
-#define test_reg_key_ex2_optional( subKey1, subKey2, valName1, valName2, testValue ) \
- _test_reg_key( subKey1, subKey2, valName1, valName2, testValue, REG_SZ, TRUE )
-#define test_reg_key_dword( subKey, valName, testValue ) \
- _test_reg_key( subKey, NULL, valName, NULL, testValue, REG_DWORD, FALSE )
-
-/* get a metric from the registry. If the value is negative
- * it is assumed to be in twips and converted to pixels */
-static UINT metricfromreg( const char *keyname, const char *valname, int dpi)
-{
- HKEY hkey;
- char buf[64];
- DWORD ret;
- DWORD size, type;
- int value;
-
- RegOpenKeyA( HKEY_CURRENT_USER, keyname, &hkey );
- size = sizeof(buf);
- ret=RegQueryValueExA( hkey, valname, NULL, &type, (LPBYTE)buf, &size );
- RegCloseKey( hkey );
- if( ret != ERROR_SUCCESS) return -1;
- value = atoi( buf);
- if( value < 0)
- value = ( -value * dpi + 720) / 1440;
- return value;
-}
-
-typedef struct
-{
- INT16 lfHeight;
- INT16 lfWidth;
- INT16 lfEscapement;
- INT16 lfOrientation;
- INT16 lfWeight;
- BYTE lfItalic;
- BYTE lfUnderline;
- BYTE lfStrikeOut;
- BYTE lfCharSet;
- BYTE lfOutPrecision;
- BYTE lfClipPrecision;
- BYTE lfQuality;
- BYTE lfPitchAndFamily;
- CHAR lfFaceName[LF_FACESIZE];
-} LOGFONT16, *LPLOGFONT16;
-
-/* get logfont from the registry */
-static int lffromreg( const char *keyname, const char *valname, LOGFONTA *plf)
-{
- HKEY hkey;
- LOGFONTW lfw;
- DWORD ret, size, type;
-
- RegOpenKeyA( HKEY_CURRENT_USER, keyname, &hkey );
- size = sizeof( lfw);
- ret=RegQueryValueExA( hkey, valname, NULL, &type, (LPBYTE)&lfw, &size );
- RegCloseKey( hkey );
- ok( ret == ERROR_SUCCESS, "Key \"%s\" value \"%s\" not found\n", keyname, valname);
- if( ret != ERROR_SUCCESS)
- return FALSE;
- if( size <= sizeof( LOGFONT16)) {
- LOGFONT16 *plf16 = (LOGFONT16*) &lfw;
- plf->lfHeight = plf16->lfHeight;
- plf->lfWidth = plf16->lfWidth;
- plf->lfEscapement = plf16->lfEscapement;
- plf->lfOrientation = plf16->lfOrientation;
- plf->lfWeight = plf16->lfWeight;
- plf->lfItalic = plf16->lfItalic;
- plf->lfUnderline = plf16->lfUnderline;
- plf->lfStrikeOut = plf16->lfStrikeOut;
- plf->lfCharSet = plf16->lfCharSet;
- plf->lfOutPrecision = plf16->lfOutPrecision;
- plf->lfClipPrecision = plf16->lfClipPrecision;
- plf->lfQuality = plf16->lfQuality;
- plf->lfPitchAndFamily = plf16->lfPitchAndFamily;
- memcpy( plf->lfFaceName, plf16->lfFaceName, LF_FACESIZE );
- } else if( size <= sizeof( LOGFONTA)) {
- plf = (LOGFONTA*) &lfw;
- } else {
- plf->lfHeight = lfw.lfHeight;
- plf->lfWidth = lfw.lfWidth;
- plf->lfEscapement = lfw.lfEscapement;
- plf->lfOrientation = lfw.lfOrientation;
- plf->lfWeight = lfw.lfWeight;
- plf->lfItalic = lfw.lfItalic;
- plf->lfUnderline = lfw.lfUnderline;
- plf->lfStrikeOut = lfw.lfStrikeOut;
- plf->lfCharSet = lfw.lfCharSet;
- plf->lfOutPrecision = lfw.lfOutPrecision;
- plf->lfClipPrecision = lfw.lfClipPrecision;
- plf->lfQuality = lfw.lfQuality;
- plf->lfPitchAndFamily = lfw.lfPitchAndFamily;
- WideCharToMultiByte( CP_ACP, 0, lfw.lfFaceName, -1, plf->lfFaceName,
- LF_FACESIZE, NULL, NULL);
-
- }
- return TRUE;
-}
-
-static void test_SPI_SETBEEP( void ) /* 2 */
-{
- BOOL rc;
- BOOL old_b;
- BOOL b;
- BOOL curr_val;
-
- trace("testing SPI_{GET,SET}BEEP\n");
- SetLastError(0xdeadbeef);
- rc=SystemParametersInfoA( SPI_GETBEEP, 0, &old_b, 0 );
- if (!test_error_msg(rc,"SPI_{GET,SET}BEEP"))
- return;
-
- curr_val = TRUE;
- rc=SystemParametersInfoA( SPI_SETBEEP, curr_val, 0, SPIF_UPDATEINIFILE | SPIF_SENDCHANGE );
- if (!test_error_msg(rc,"SPI_SETBEEP")) return;
- ok(rc, "SystemParametersInfoA: rc=%d err=%d\n", rc, GetLastError());
- test_change_message( SPI_SETBEEP, 0 );
- test_reg_key( SPI_SETBEEP_REGKEY,
- SPI_SETBEEP_VALNAME,
- curr_val ? "Yes" : "No" );
- rc=SystemParametersInfoA( SPI_GETBEEP, 0, &b, 0 );
- ok(rc, "SystemParametersInfoA: rc=%d err=%d\n", rc, GetLastError());
- eq( b, curr_val, "SPI_{GET,SET}BEEP", "%d" );
- rc=SystemParametersInfoW( SPI_GETBEEP, 0, &b, 0 );
- if (rc || GetLastError() != ERROR_CALL_NOT_IMPLEMENTED)
- {
- ok(rc, "SystemParametersInfoW: rc=%d err=%d\n", rc, GetLastError());
- eq( b, curr_val, "SystemParametersInfoW", "%d" );
- }
-
- /* is a message sent for the second change? */
- rc=SystemParametersInfoA( SPI_SETBEEP, curr_val, 0, SPIF_UPDATEINIFILE | SPIF_SENDCHANGE );
- ok(rc, "SystemParametersInfoA: rc=%d err=%d\n", rc, GetLastError());
- test_change_message( SPI_SETBEEP, 0 );
-
- curr_val = FALSE;
- rc=SystemParametersInfoW( SPI_SETBEEP, curr_val, 0, SPIF_UPDATEINIFILE | SPIF_SENDCHANGE );
- if (rc == FALSE && GetLastError() == ERROR_CALL_NOT_IMPLEMENTED)
- rc=SystemParametersInfoA( SPI_SETBEEP, curr_val, 0, SPIF_UPDATEINIFILE | SPIF_SENDCHANGE );
- ok(rc, "SystemParametersInfo: rc=%d err=%d\n", rc, GetLastError());
- test_change_message( SPI_SETBEEP, 0 );
- test_reg_key( SPI_SETBEEP_REGKEY,
- SPI_SETBEEP_VALNAME,
- curr_val ? "Yes" : "No" );
- rc=SystemParametersInfoA( SPI_GETBEEP, 0, &b, 0 );
- ok(rc, "SystemParametersInfoA: rc=%d err=%d\n", rc, GetLastError());
- eq( b, curr_val, "SPI_{GET,SET}BEEP", "%d" );
- rc=SystemParametersInfoW( SPI_GETBEEP, 0, &b, 0 );
- if (rc || GetLastError() != ERROR_CALL_NOT_IMPLEMENTED)
- {
- ok(rc, "SystemParametersInfoW: rc=%d err=%d\n", rc, GetLastError());
- eq( b, curr_val, "SystemParametersInfoW", "%d" );
- }
- ok( MessageBeep( MB_OK ), "Return value of MessageBeep when sound is disabled\n" );
-
- rc=SystemParametersInfoA( SPI_SETBEEP, old_b, 0, SPIF_UPDATEINIFILE );
- ok(rc, "***warning*** failed to restore the original value: rc=%d err=%d\n", rc, GetLastError());
-}
-
-static const char *setmouse_valuenames[3] = {
- SPI_SETMOUSE_VALNAME1,
- SPI_SETMOUSE_VALNAME2,
- SPI_SETMOUSE_VALNAME3
-};
-
-/*
- * Runs check for one setting of spi_setmouse.
- */
-static BOOL run_spi_setmouse_test( int curr_val[], POINT *req_change, POINT *proj_change, int nchange )
-{
- BOOL rc;
- INT mi[3];
- static int aw_turn = 0;
- static BOOL w_implemented = TRUE;
-
- char buf[20];
- int i;
-
- aw_turn++;
- rc = FALSE;
- if ((aw_turn % 2!=0) && (w_implemented))
- {
- /* call unicode on odd (non even) calls */
- SetLastError(0xdeadbeef);
- rc=SystemParametersInfoW( SPI_SETMOUSE, 0, curr_val, SPIF_UPDATEINIFILE | SPIF_SENDCHANGE );
- if (rc == FALSE && GetLastError() == ERROR_CALL_NOT_IMPLEMENTED)
- {
- w_implemented = FALSE;
- trace("SystemParametersInfoW not supported on this platform\n");
- }
- }
-
- if ((aw_turn % 2==0) || (!w_implemented))
- {
- /* call ascii version on even calls or if unicode is not available */
- rc=SystemParametersInfoA( SPI_SETMOUSE, 0, curr_val, SPIF_UPDATEINIFILE | SPIF_SENDCHANGE );
- }
- if (!test_error_msg(rc,"SPI_SETMOUSE")) return FALSE;
-
- ok(rc, "SystemParametersInfo: rc=%d err=%d\n", rc, GetLastError());
- test_change_message( SPI_SETMOUSE, 0 );
- for (i = 0; i < 3; i++)
- {
- sprintf( buf, "%d", curr_val[i] );
- test_reg_key( SPI_SETMOUSE_REGKEY, setmouse_valuenames[i], buf );
- }
-
- rc=SystemParametersInfoA( SPI_GETMOUSE, 0, mi, 0 );
- ok(rc, "SystemParametersInfoA: rc=%d err=%d\n", rc, GetLastError());
- for (i = 0; i < 3; i++)
- {
- ok(mi[i] == curr_val[i],
- "incorrect value for %d: %d != %d\n", i, mi[i], curr_val[i]);
- }
-
- if (w_implemented)
- {
- rc=SystemParametersInfoW( SPI_GETMOUSE, 0, mi, 0 );
- ok(rc, "SystemParametersInfoW: rc=%d err=%d\n", rc, GetLastError());
- for (i = 0; i < 3; i++)
- {
- ok(mi[i] == curr_val[i],
- "incorrect value for %d: %d != %d\n", i, mi[i], curr_val[i]);
- }
- }
-
- if (0)
- {
- /* FIXME: this always fails for me - AJ */
- for (i = 0; i < nchange; i++)
- {
- POINT mv;
- mouse_event( MOUSEEVENTF_ABSOLUTE | MOUSEEVENTF_MOVE, 0, 0, 0, 0 );
- mouse_event( MOUSEEVENTF_MOVE, req_change[i].x, req_change[i].y, 0, 0 );
- GetCursorPos( &mv );
- ok( proj_change[i].x == mv.x, "Projected dx and real dx comparison. May fail under high load.\n" );
- ok( proj_change[i].y == mv.y, "Projected dy equals real dy. May fail under high load.\n" );
- }
- }
- return TRUE;
-}
-
-static void test_SPI_SETMOUSE( void ) /* 4 */
-{
- BOOL rc;
- INT old_mi[3];
-
- /* win nt default values - 6, 10, 1 */
- INT curr_val[3] = {6, 10, 1};
-
- /* requested and projected mouse movements */
- POINT req_change[] = { {6, 6}, { 7, 6}, { 8, 6}, {10, 10}, {11, 10}, {100, 100} };
- POINT proj_change1[] = { {6, 6}, {14, 6}, {16, 6}, {20, 20}, {22, 20}, {200, 200} };
- POINT proj_change2[] = { {6, 6}, {14, 6}, {16, 6}, {20, 20}, {44, 20}, {400, 400} };
- POINT proj_change3[] = { {6, 6}, {14, 6}, {16, 6}, {20, 20}, {22, 20}, {200, 200} };
- POINT proj_change4[] = { {6, 6}, { 7, 6}, { 8, 6}, {10, 10}, {11, 10}, {100, 100} };
- POINT proj_change5[] = { {6, 6}, { 7, 6}, {16, 6}, {20, 20}, {22, 20}, {200, 200} };
- POINT proj_change6[] = { {6, 6}, {28, 6}, {32, 6}, {40, 40}, {44, 40}, {400, 400} };
- POINT proj_change7[] = { {6, 6}, {14, 6}, {32, 6}, {40, 40}, {44, 40}, {400, 400} };
- POINT proj_change8[] = { {6, 6}, {28, 6}, {32, 6}, {40, 40}, {44, 40}, {400, 400} };
-
- int nchange = sizeof( req_change ) / sizeof( POINT );
-
- trace("testing SPI_{GET,SET}MOUSE\n");
- SetLastError(0xdeadbeef);
- rc=SystemParametersInfoA( SPI_GETMOUSE, 0, old_mi, 0 );
- if (!test_error_msg(rc,"SPI_{GET,SET}MOUSE"))
- return;
-
- if (!run_spi_setmouse_test( curr_val, req_change, proj_change1, nchange )) return;
-
- /* acceleration change */
- curr_val[2] = 2;
- run_spi_setmouse_test( curr_val, req_change, proj_change2, nchange );
-
- /* acceleration change */
- curr_val[2] = 3;
- run_spi_setmouse_test( curr_val, req_change, proj_change3, nchange );
-
- /* acceleration change */
- curr_val[2] = 0;
- run_spi_setmouse_test( curr_val, req_change, proj_change4, nchange );
-
- /* threshold change */
- curr_val[2] = 1;
- curr_val[0] = 7;
- run_spi_setmouse_test( curr_val, req_change, proj_change5, nchange );
-
- /* threshold change */
- curr_val[2] = 2;
- curr_val[0] = 6;
- curr_val[1] = 6;
- run_spi_setmouse_test( curr_val, req_change, proj_change6, nchange );
-
- /* threshold change */
- curr_val[1] = 7;
- run_spi_setmouse_test( curr_val, req_change, proj_change7, nchange );
-
- /* threshold change */
- curr_val[1] = 5;
- run_spi_setmouse_test( curr_val, req_change, proj_change8, nchange );
-
- rc=SystemParametersInfoA( SPI_SETMOUSE, 0, old_mi, SPIF_UPDATEINIFILE );
- ok(rc, "***warning*** failed to restore the original value: rc=%d err=%d\n", rc, GetLastError());
-}
-
-static BOOL test_setborder(UINT curr_val, int usesetborder, int dpi)
-{
- BOOL rc;
- UINT border, regval;
- INT frame;
- NONCLIENTMETRICSA ncm;
-
- ncm.cbSize = FIELD_OFFSET(NONCLIENTMETRICSA, iPaddedBorderWidth);
- rc=SystemParametersInfoA( SPI_GETNONCLIENTMETRICS, 0, &ncm, 0);
- ok(rc, "SystemParametersInfoA: rc=%d err=%d\n", rc, GetLastError());
- if( usesetborder) {
- rc=SystemParametersInfoA( SPI_SETBORDER, curr_val, 0, SPIF_UPDATEINIFILE | SPIF_SENDCHANGE );
- if (!test_error_msg(rc,"SPI_SETBORDER")) return FALSE;
- ok(rc, "SystemParametersInfoA: rc=%d err=%d\n", rc, GetLastError());
- test_change_message( SPI_SETBORDER, 1 );
- } else { /* set non client metrics */
- ncm.iBorderWidth = curr_val;
- rc=SystemParametersInfoA( SPI_SETNONCLIENTMETRICS, 0, &ncm, SPIF_UPDATEINIFILE|
- SPIF_SENDCHANGE);
- if (!test_error_msg(rc,"SPI_SETNONCLIENTMETRICS")) return FALSE;
- ok(rc, "SystemParametersInfoA: rc=%d err=%d\n", rc, GetLastError());
- test_change_message( SPI_SETNONCLIENTMETRICS, 1 );
- }
- if( curr_val) { /* skip if 0, some windows versions return 0 others 1 */
- regval = metricfromreg( SPI_SETBORDER_REGKEY2, SPI_SETBORDER_VALNAME, dpi);
- if( regval != curr_val)
- regval = metricfromreg( SPI_SETBORDER_REGKEY, SPI_SETBORDER_VALNAME, dpi);
- ok( regval==curr_val, "wrong value in registry %d, expected %d\n", regval, curr_val);
- }
- /* minimum border width is 1 */
- if (curr_val == 0) curr_val = 1;
- /* should be the same as the non client metrics */
- rc=SystemParametersInfoA( SPI_GETNONCLIENTMETRICS, 0, &ncm, 0);
- ok(rc, "SystemParametersInfoA: rc=%d err=%d\n", rc, GetLastError());
- eq( (UINT)ncm.iBorderWidth, curr_val, "NonClientMetric.iBorderWidth", "%d");
- /* and from SPI_GETBORDER */
- rc=SystemParametersInfoA( SPI_GETBORDER, 0, &border, 0 );
- ok(rc, "SystemParametersInfoA: rc=%d err=%d\n", rc, GetLastError());
- eq( border, curr_val, "SPI_{GET,SET}BORDER", "%d");
- /* test some SystemMetrics */
- frame = curr_val + GetSystemMetrics( SM_CXDLGFRAME );
- eq( frame, GetSystemMetrics( SM_CXFRAME ), "SM_CXFRAME", "%d" );
- eq( frame, GetSystemMetrics( SM_CYFRAME ), "SM_CYFRAME", "%d" );
- eq( frame, GetSystemMetrics( SM_CXSIZEFRAME ), "SM_CXSIZEFRAME", "%d" );
- eq( frame, GetSystemMetrics( SM_CYSIZEFRAME ), "SM_CYSIZEFRAME", "%d" );
- return TRUE;
-}
-
-static void test_SPI_SETBORDER( void ) /* 6 */
-{
- BOOL rc;
- UINT old_border;
- NONCLIENTMETRICSA ncmsave;
- INT CaptionWidth,
- PaddedBorderWidth;
-
- ncmsave.cbSize = FIELD_OFFSET(NONCLIENTMETRICSA, iPaddedBorderWidth);
- rc=SystemParametersInfoA( SPI_GETNONCLIENTMETRICS, 0, &ncmsave, 0);
- if( !rc) {
- win_skip("SPI_GETNONCLIENTMETRICS is not available\n");
- return;
- }
- /* CaptionWidth from the registry may have different value of iCaptionWidth
- * from the non client metrics (observed on WinXP).
- * Fix this so we can safely restore settings with the nonclientmetrics */
- CaptionWidth = metricfromreg(
- "Control Panel\\Desktop\\WindowMetrics","CaptionWidth", dpi);
- ncmsave.iCaptionWidth = CaptionWidth;
-
- /* These tests hang when XFree86 4.0 for Windows is running (tested on
- * WinNT, SP2, Cygwin/XFree 4.1.0. Skip the test when XFree86 is
- * running.
- */
- if (FindWindowA( NULL, "Cygwin/XFree86" ))
- return;
-
- trace("testing SPI_{GET,SET}BORDER\n");
-
- SetLastError(0xdeadbeef);
- rc=SystemParametersInfoA( SPI_GETBORDER, 0, &old_border, 0 );
- if (!test_error_msg(rc,"SPI_{GET,SET}BORDER"))
- return;
- /* FIXME: include new PaddedBorderWidth parameter */
- PaddedBorderWidth = ncmsave.iBorderWidth - old_border;
- if( PaddedBorderWidth){
- win_skip( "Cannot reliably restore border width yet (PaddedBorderWidth = %d)\n",
- PaddedBorderWidth);
- return;
- }
- /* This will restore sane values if the test hang previous run. */
- if ( old_border == 7 || old_border == 20 )
- old_border = 1;
-
- /* The SPI_SETBORDER seems to be buggy on Win9x/ME (looks like you need to
- * do it twice to make the intended change). So skip parts of the tests on
- * those platforms */
- if( !iswin9x) {
- /* win2k3 fails if you set the same border twice, or if size is 0 */
- if (!test_setborder(2, 1, dpi)) return;
- test_setborder(1, 1, dpi);
- test_setborder(3, 1, dpi);
- }
- if (!test_setborder(1, 0, dpi)) return;
- test_setborder(0, 0, dpi);
- test_setborder(3, 0, dpi);
-
- rc=SystemParametersInfoA( SPI_SETNONCLIENTMETRICS, 0, &ncmsave,
- SPIF_UPDATEINIFILE| SPIF_SENDCHANGE);
- test_change_message( SPI_SETNONCLIENTMETRICS, 1 );
- ok(rc, "***warning*** failed to restore the original value: rc=%d err=%d\n", rc, GetLastError());
-}
-
-static void test_SPI_SETKEYBOARDSPEED( void ) /* 10 */
-{
- BOOL rc;
- UINT old_speed;
- const UINT vals[]={0,20,31};
- unsigned int i;
-
- trace("testing SPI_{GET,SET}KEYBOARDSPEED\n");
- SetLastError(0xdeadbeef);
- rc=SystemParametersInfoA( SPI_GETKEYBOARDSPEED, 0, &old_speed, 0 );
- if (!test_error_msg(rc,"SPI_{GET,SET}KEYBOARDSPEED"))
- return;
-
- for (i=0;i<sizeof(vals)/sizeof(*vals);i++)
- {
- UINT v;
- char buf[10];
-
- rc=SystemParametersInfoA( SPI_SETKEYBOARDSPEED, vals[i], 0,
- SPIF_UPDATEINIFILE | SPIF_SENDCHANGE );
- if (!test_error_msg(rc,"SPI_SETKEYBOARDSPEED")) return;
- ok(rc, "%d: rc=%d err=%d\n", i, rc, GetLastError());
- test_change_message( SPI_SETKEYBOARDSPEED, 0 );
- sprintf( buf, "%d", vals[i] );
- test_reg_key( SPI_SETKEYBOARDSPEED_REGKEY, SPI_SETKEYBOARDSPEED_VALNAME, buf );
-
- rc=SystemParametersInfoA( SPI_GETKEYBOARDSPEED, 0, &v, 0 );
- ok(rc, "%d: rc=%d err=%d\n", i, rc, GetLastError());
- eq( v, vals[i], "SPI_{GET,SET}KEYBOARDSPEED", "%d" );
- }
-
- rc=SystemParametersInfoA( SPI_SETKEYBOARDSPEED, old_speed, 0, SPIF_UPDATEINIFILE );
- ok(rc, "***warning*** failed to restore the original value: rc=%d err=%d\n", rc, GetLastError());
-}
-
-/* test_SPI_ICONHORIZONTALSPACING helper */
-static BOOL dotest_spi_iconhorizontalspacing( INT curr_val)
-{
- BOOL rc;
- INT spacing, regval, min_val = MulDiv( 32, dpi, USER_DEFAULT_SCREEN_DPI );
- ICONMETRICSA im;
-
- rc=SystemParametersInfoA( SPI_ICONHORIZONTALSPACING, curr_val, 0,
- SPIF_UPDATEINIFILE | SPIF_SENDCHANGE);
- if (!test_error_msg(rc,"SPI_ICONHORIZONTALSPACING")) return FALSE;
- ok(rc, "SystemParametersInfoA: rc=%d err=%d\n", rc, GetLastError());
- test_change_message( SPI_ICONHORIZONTALSPACING, 0 );
- curr_val = max( curr_val, min_val );
- /* The registry keys depend on the Windows version and the values too
- * let's test (works on win95,ME,NT4,2k,XP)
- */
- regval = metricfromreg( SPI_ICONHORIZONTALSPACING_REGKEY2, SPI_ICONHORIZONTALSPACING_VALNAME, dpi);
- if( regval != curr_val)
- regval = metricfromreg( SPI_ICONHORIZONTALSPACING_REGKEY, SPI_ICONHORIZONTALSPACING_VALNAME, dpi);
- ok( curr_val == regval,
- "wrong value in registry %d, expected %d\n", regval, curr_val);
- /* compare with what SPI_ICONHORIZONTALSPACING returns */
- rc=SystemParametersInfoA( SPI_ICONHORIZONTALSPACING, 0, &spacing, 0 );
- ok(rc, "SystemParametersInfoA: rc=%d err=%d\n", rc, GetLastError());
- eq( spacing, curr_val, "ICONHORIZONTALSPACING", "%d");
- /* and with a system metrics */
- eq( GetSystemMetrics( SM_CXICONSPACING ), curr_val, "SM_CXICONSPACING", "%d" );
- /* and with what SPI_GETICONMETRICS returns */
- im.cbSize = sizeof(ICONMETRICSA);
- rc=SystemParametersInfoA( SPI_GETICONMETRICS, sizeof(ICONMETRICSA), &im, FALSE );
- ok(rc, "SystemParametersInfoA: rc=%d err=%d\n", rc, GetLastError());
- eq( im.iHorzSpacing, curr_val, "SPI_GETICONMETRICS", "%d" );
- return TRUE;
-}
-
-static void test_SPI_ICONHORIZONTALSPACING( void ) /* 13 */
-{
- BOOL rc;
- INT old_spacing;
-
- trace("testing SPI_ICONHORIZONTALSPACING\n");
- SetLastError(0xdeadbeef);
- /* default value: 75 */
- rc=SystemParametersInfoA( SPI_ICONHORIZONTALSPACING, 0, &old_spacing, 0 );
- if (!test_error_msg(rc,"SPI_ICONHORIZONTALSPACING"))
- return;
- /* do not increase the value as it would upset the user's icon layout */
- if (!dotest_spi_iconhorizontalspacing( old_spacing - 1)) return;
- dotest_spi_iconhorizontalspacing( 10); /* minimum is 32 */
- /* restore */
- rc=SystemParametersInfoA( SPI_ICONHORIZONTALSPACING, old_spacing, 0, SPIF_UPDATEINIFILE );
- ok(rc, "***warning*** failed to restore the original value: rc=%d err=%d\n", rc, GetLastError());
-}
-
-static void test_SPI_SETSCREENSAVETIMEOUT( void ) /* 14 */
-{
- BOOL rc;
- UINT old_timeout;
- const UINT vals[]={0,32767};
- unsigned int i;
-
- trace("testing SPI_{GET,SET}SCREENSAVETIMEOUT\n");
- SetLastError(0xdeadbeef);
- rc=SystemParametersInfoA( SPI_GETSCREENSAVETIMEOUT, 0, &old_timeout, 0 );
- if (!test_error_msg(rc,"SPI_{GET,SET}SCREENSAVETIMEOUT"))
- return;
-
- for (i=0;i<sizeof(vals)/sizeof(*vals);i++)
- {
- UINT v;
- char buf[10];
-
- rc=SystemParametersInfoA( SPI_SETSCREENSAVETIMEOUT, vals[i], 0,
- SPIF_UPDATEINIFILE | SPIF_SENDCHANGE );
- if (!test_error_msg(rc,"SPI_SETSCREENSAVETIMEOUT")) return;
- ok(rc, "%d: rc=%d err=%d\n", i, rc, GetLastError());
- test_change_message( SPI_SETSCREENSAVETIMEOUT, 0 );
- sprintf( buf, "%d", vals[i] );
- test_reg_key( SPI_SETSCREENSAVETIMEOUT_REGKEY,
- SPI_SETSCREENSAVETIMEOUT_VALNAME, buf );
-
- rc = SystemParametersInfoA( SPI_GETSCREENSAVETIMEOUT, 0, &v, 0 );
- ok(rc, "%d: rc=%d err=%d\n", i, rc, GetLastError());
- eq( v, vals[i], "SPI_{GET,SET}SCREENSAVETIMEOUT", "%d" );
- }
-
- rc=SystemParametersInfoA( SPI_SETSCREENSAVETIMEOUT, old_timeout, 0,
- SPIF_UPDATEINIFILE );
- ok(rc, "***warning*** failed to restore the original value: rc=%d err=%d\n", rc, GetLastError());
-}
-
-static void test_SPI_SETSCREENSAVEACTIVE( void ) /* 17 */
-{
- BOOL rc;
- BOOL old_b;
- const UINT vals[]={TRUE,FALSE};
- unsigned int i;
-
- trace("testing SPI_{GET,SET}SCREENSAVEACTIVE\n");
- SetLastError(0xdeadbeef);
- rc=SystemParametersInfoA( SPI_GETSCREENSAVEACTIVE, 0, &old_b, 0 );
- if (!test_error_msg(rc,"SPI_{GET,SET}SCREENSAVEACTIVE"))
- return;
-
- for (i=0;i<sizeof(vals)/sizeof(*vals);i++)
- {
- UINT v;
-
- rc=SystemParametersInfoA( SPI_SETSCREENSAVEACTIVE, vals[i], 0,
- SPIF_UPDATEINIFILE | SPIF_SENDCHANGE );
- if (!test_error_msg(rc,"SPI_SETSCREENSAVEACTIVE")) return;
- ok(rc, "%d: rc=%d err=%d\n", i, rc, GetLastError());
- test_change_message( SPI_SETSCREENSAVEACTIVE, 0 );
- test_reg_key( SPI_SETSCREENSAVEACTIVE_REGKEY,
- SPI_SETSCREENSAVEACTIVE_VALNAME,
- vals[i] ? "1" : "0" );
-
- rc=SystemParametersInfoA( SPI_GETSCREENSAVEACTIVE, 0, &v, 0 );
- ok(rc, "%d: rc=%d err=%d\n", i, rc, GetLastError());
- ok(v == vals[i] || broken(! v) /* Win 7 */,
- "SPI_{GET,SET}SCREENSAVEACTIVE: got %d instead of %d\n", v, vals[i]);
- }
-
- rc=SystemParametersInfoA( SPI_SETSCREENSAVEACTIVE, old_b, 0, SPIF_UPDATEINIFILE );
- ok(rc, "***warning*** failed to restore the original value: rc=%d err=%d\n", rc, GetLastError());
-}
-
-static void test_SPI_SETGRIDGRANULARITY( void ) /* 19 */
-{
- /* ??? */;
-}
-
-static void test_SPI_SETKEYBOARDDELAY( void ) /* 23 */
-{
- BOOL rc;
- UINT old_delay;
- const UINT vals[]={0,3};
- unsigned int i;
-
- trace("testing SPI_{GET,SET}KEYBOARDDELAY\n");
- SetLastError(0xdeadbeef);
- rc=SystemParametersInfoA( SPI_GETKEYBOARDDELAY, 0, &old_delay, 0 );
- if (!test_error_msg(rc,"SPI_{GET,SET}KEYBOARDDELAY"))
- return;
-
- for (i=0;i<sizeof(vals)/sizeof(*vals);i++)
- {
- UINT delay;
- char buf[10];
-
- rc=SystemParametersInfoA( SPI_SETKEYBOARDDELAY, vals[i], 0,
- SPIF_UPDATEINIFILE | SPIF_SENDCHANGE );
- if (!test_error_msg(rc,"SPI_SETKEYBOARDDELAY")) return;
- ok(rc, "%d: rc=%d err=%d\n", i, rc, GetLastError());
- test_change_message( SPI_SETKEYBOARDDELAY, 0 );
- sprintf( buf, "%d", vals[i] );
- test_reg_key( SPI_SETKEYBOARDDELAY_REGKEY,
- SPI_SETKEYBOARDDELAY_VALNAME, buf );
-
- rc=SystemParametersInfoA( SPI_GETKEYBOARDDELAY, 0, &delay, 0 );
- ok(rc, "%d: rc=%d err=%d\n", i, rc, GetLastError());
- eq( delay, vals[i], "SPI_{GET,SET}KEYBOARDDELAY", "%d" );
- }
-
- rc=SystemParametersInfoA( SPI_SETKEYBOARDDELAY, old_delay, 0, SPIF_UPDATEINIFILE );
- ok(rc, "***warning*** failed to restore the original value: rc=%d err=%d\n", rc, GetLastError());
-}
-
-
-/* test_SPI_ICONVERTICALSPACING helper */
-static BOOL dotest_spi_iconverticalspacing( INT curr_val)
-{
- BOOL rc;
- INT spacing, regval, min_val = MulDiv( 32, dpi, USER_DEFAULT_SCREEN_DPI );
- ICONMETRICSA im;
-
- rc=SystemParametersInfoA( SPI_ICONVERTICALSPACING, curr_val, 0,
- SPIF_UPDATEINIFILE | SPIF_SENDCHANGE);
- if (!test_error_msg(rc,"SPI_ICONVERTICALSPACING")) return FALSE;
- ok(rc, "SystemParametersInfoA: rc=%d err=%d\n", rc, GetLastError());
- test_change_message( SPI_ICONVERTICALSPACING, 0 );
- curr_val = max( curr_val, min_val );
- /* The registry keys depend on the Windows version and the values too
- * let's test (works on win95,ME,NT4,2k,XP)
- */
- regval = metricfromreg( SPI_ICONVERTICALSPACING_REGKEY2, SPI_ICONVERTICALSPACING_VALNAME, dpi);
- if( regval != curr_val)
- regval = metricfromreg( SPI_ICONVERTICALSPACING_REGKEY, SPI_ICONVERTICALSPACING_VALNAME, dpi);
- ok( curr_val == regval,
- "wrong value in registry %d, expected %d\n", regval, curr_val);
- /* compare with what SPI_ICONVERTICALSPACING returns */
- rc=SystemParametersInfoA( SPI_ICONVERTICALSPACING, 0, &spacing, 0 );
- ok(rc, "SystemParametersInfoA: rc=%d err=%d\n", rc, GetLastError());
- eq( spacing, curr_val, "ICONVERTICALSPACING", "%d" );
- /* and with a system metrics */
- eq( GetSystemMetrics( SM_CYICONSPACING ), curr_val, "SM_CYICONSPACING", "%d" );
- /* and with what SPI_GETICONMETRICS returns */
- im.cbSize = sizeof(ICONMETRICSA);
- rc=SystemParametersInfoA( SPI_GETICONMETRICS, sizeof(ICONMETRICSA), &im, FALSE );
- ok(rc, "SystemParametersInfoA: rc=%d err=%d\n", rc, GetLastError());
- eq( im.iVertSpacing, curr_val, "SPI_GETICONMETRICS", "%d" );
- return TRUE;
-}
-
-static void test_SPI_ICONVERTICALSPACING( void ) /* 24 */
-{
- BOOL rc;
- INT old_spacing;
-
- trace("testing SPI_ICONVERTICALSPACING\n");
- SetLastError(0xdeadbeef);
- /* default value: 75 */
- rc=SystemParametersInfoA( SPI_ICONVERTICALSPACING, 0, &old_spacing, 0 );
- if (!test_error_msg(rc,"SPI_ICONVERTICALSPACING"))
- return;
- /* do not increase the value as it would upset the user's icon layout */
- if (!dotest_spi_iconverticalspacing( old_spacing - 1)) return;
- /* same tests with a value less than the minimum 32 */
- dotest_spi_iconverticalspacing( 10);
- /* restore */
- rc=SystemParametersInfoA( SPI_ICONVERTICALSPACING, old_spacing, 0,
- SPIF_UPDATEINIFILE );
- ok(rc, "***warning*** failed to restore the original value: rc=%d err=%d\n", rc, GetLastError());
-}
-
-static void test_SPI_SETICONTITLEWRAP( void ) /* 26 */
-{
- BOOL rc;
- BOOL old_b;
- const UINT vals[]={TRUE,FALSE};
- unsigned int i;
- ICONMETRICSA im;
-
- /* These tests hang when XFree86 4.0 for Windows is running (tested on
- * WinNT, SP2, Cygwin/XFree 4.1.0. Skip the test when XFree86 is
- * running.
- */
- if (FindWindowA( NULL, "Cygwin/XFree86" ))
- return;
-
- trace("testing SPI_{GET,SET}ICONTITLEWRAP\n");
- SetLastError(0xdeadbeef);
- rc=SystemParametersInfoA( SPI_GETICONTITLEWRAP, 0, &old_b, 0 );
- if (!test_error_msg(rc,"SPI_{GET,SET}ICONTITLEWRAP"))
- return;
-
- for (i=0;i<sizeof(vals)/sizeof(*vals);i++)
- {
- UINT v;
- UINT regval;
-
- rc=SystemParametersInfoA( SPI_SETICONTITLEWRAP, vals[i], 0,
- SPIF_UPDATEINIFILE | SPIF_SENDCHANGE );
- if (!test_error_msg(rc,"SPI_SETICONTITLEWRAP")) return;
- ok(rc, "%d: rc=%d err=%d\n", i, rc, GetLastError());
- test_change_message( SPI_SETICONTITLEWRAP, 1 );
- regval = metricfromreg( SPI_SETICONTITLEWRAP_REGKEY2,
- SPI_SETICONTITLEWRAP_VALNAME, dpi);
- if( regval != vals[i])
- regval = metricfromreg( SPI_SETICONTITLEWRAP_REGKEY1,
- SPI_SETICONTITLEWRAP_VALNAME, dpi);
- ok( regval == vals[i] || broken(regval == -1), /* win9x */
- "wrong value in registry %d, expected %d\n", regval, vals[i] );
-
- rc=SystemParametersInfoA( SPI_GETICONTITLEWRAP, 0, &v, 0 );
- ok(rc, "%d: rc=%d err=%d\n", i, rc, GetLastError());
- eq( v, vals[i], "SPI_{GET,SET}ICONTITLEWRAP", "%d" );
- /* and test with what SPI_GETICONMETRICS returns */
- im.cbSize = sizeof(ICONMETRICSA);
- rc=SystemParametersInfoA( SPI_GETICONMETRICS, sizeof(ICONMETRICSA), &im, FALSE );
- ok(rc, "SystemParametersInfoA: rc=%d err=%d\n", rc, GetLastError());
- eq( im.iTitleWrap, (BOOL)vals[i], "SPI_GETICONMETRICS", "%d" );
- }
-
- rc=SystemParametersInfoA( SPI_SETICONTITLEWRAP, old_b, 0, SPIF_UPDATEINIFILE );
- ok(rc, "***warning*** failed to restore the original value: rc=%d err=%d\n", rc, GetLastError());
-}
-
-static void test_SPI_SETMENUDROPALIGNMENT( void ) /* 28 */
-{
- BOOL rc;
- BOOL old_b;
- const UINT vals[]={TRUE,FALSE};
- unsigned int i;
-
- trace("testing SPI_{GET,SET}MENUDROPALIGNMENT\n");
- SetLastError(0xdeadbeef);
- rc=SystemParametersInfoA( SPI_GETMENUDROPALIGNMENT, 0, &old_b, 0 );
- if (!test_error_msg(rc,"SPI_{GET,SET}MENUDROPALIGNMENT"))
- return;
-
- for (i=0;i<sizeof(vals)/sizeof(*vals);i++)
- {
- UINT v;
-
- rc=SystemParametersInfoA( SPI_SETMENUDROPALIGNMENT, vals[i], 0,
- SPIF_UPDATEINIFILE | SPIF_SENDCHANGE );
- if (!test_error_msg(rc,"SPI_SETMENUDROPALIGNMENT")) return;
- ok(rc, "%d: rc=%d err=%d\n", i, rc, GetLastError());
- test_change_message( SPI_SETMENUDROPALIGNMENT, 0 );
- test_reg_key_ex( SPI_SETMENUDROPALIGNMENT_REGKEY1,
- SPI_SETMENUDROPALIGNMENT_REGKEY2,
- SPI_SETMENUDROPALIGNMENT_VALNAME,
- vals[i] ? "1" : "0" );
-
- rc=SystemParametersInfoA( SPI_GETMENUDROPALIGNMENT, 0, &v, 0 );
- ok(rc, "%d: rc=%d err=%d\n", i, rc, GetLastError());
- eq( v, vals[i], "SPI_{GET,SET}MENUDROPALIGNMENT", "%d" );
- eq( GetSystemMetrics( SM_MENUDROPALIGNMENT ), (int)vals[i],
- "SM_MENUDROPALIGNMENT", "%d" );
- }
-
- rc=SystemParametersInfoA( SPI_SETMENUDROPALIGNMENT, old_b, 0,
- SPIF_UPDATEINIFILE );
- ok(rc, "***warning*** failed to restore the original value: rc=%d err=%d\n", rc, GetLastError());
-}
-
-static void test_SPI_SETDOUBLECLKWIDTH( void ) /* 29 */
-{
- BOOL rc;
- INT old_width;
- const UINT vals[]={0,10000};
- unsigned int i;
-
- trace("testing SPI_{GET,SET}DOUBLECLKWIDTH\n");
- old_width = GetSystemMetrics( SM_CXDOUBLECLK );
-
- for (i=0;i<sizeof(vals)/sizeof(*vals);i++)
- {
- char buf[10];
-
- SetLastError(0xdeadbeef);
- rc=SystemParametersInfoA( SPI_SETDOUBLECLKWIDTH, vals[i], 0,
- SPIF_UPDATEINIFILE | SPIF_SENDCHANGE );
- if (!test_error_msg(rc,"SPI_{GET,SET}DOUBLECLKWIDTH"))
- return;
-
- test_change_message( SPI_SETDOUBLECLKWIDTH, 0 );
- sprintf( buf, "%d", vals[i] );
- test_reg_key_ex( SPI_SETDOUBLECLKWIDTH_REGKEY1,
- SPI_SETDOUBLECLKWIDTH_REGKEY2,
- SPI_SETDOUBLECLKWIDTH_VALNAME, buf );
- eq( GetSystemMetrics( SM_CXDOUBLECLK ), (int)vals[i],
- "SM_CXDOUBLECLK", "%d" );
- }
-
- rc=SystemParametersInfoA( SPI_SETDOUBLECLKWIDTH, old_width, 0,
- SPIF_UPDATEINIFILE );
- ok(rc, "***warning*** failed to restore the original value: rc=%d err=%d\n", rc, GetLastError());
-}
-
-static void test_SPI_SETDOUBLECLKHEIGHT( void ) /* 30 */
-{
- BOOL rc;
- INT old_height;
- const UINT vals[]={0,10000};
- unsigned int i;
-
- trace("testing SPI_{GET,SET}DOUBLECLKHEIGHT\n");
- old_height = GetSystemMetrics( SM_CYDOUBLECLK );
-
- for (i=0;i<sizeof(vals)/sizeof(*vals);i++)
- {
- char buf[10];
-
- SetLastError(0xdeadbeef);
- rc=SystemParametersInfoA( SPI_SETDOUBLECLKHEIGHT, vals[i], 0,
- SPIF_UPDATEINIFILE | SPIF_SENDCHANGE );
- if (!test_error_msg(rc,"SPI_{GET,SET}DOUBLECLKHEIGHT"))
- return;
-
- test_change_message( SPI_SETDOUBLECLKHEIGHT, 0 );
- sprintf( buf, "%d", vals[i] );
- test_reg_key_ex( SPI_SETDOUBLECLKHEIGHT_REGKEY1,
- SPI_SETDOUBLECLKHEIGHT_REGKEY2,
- SPI_SETDOUBLECLKHEIGHT_VALNAME, buf );
- eq( GetSystemMetrics( SM_CYDOUBLECLK ), (int)vals[i],
- "SM_CYDOUBLECLK", "%d" );
- }
-
- rc=SystemParametersInfoA( SPI_SETDOUBLECLKHEIGHT, old_height, 0,
- SPIF_UPDATEINIFILE );
- ok(rc, "***warning*** failed to restore the original value: rc=%d err=%d\n", rc, GetLastError());
-}
-
-static void test_SPI_SETDOUBLECLICKTIME( void ) /* 32 */
-{
- BOOL rc;
- UINT curr_val;
- UINT saved_val;
- UINT old_time;
- char buf[10];
-
- trace("testing SPI_{GET,SET}DOUBLECLICKTIME\n");
- old_time = GetDoubleClickTime();
-
- curr_val = 0;
- SetLastError(0xdeadbeef);
- rc=SystemParametersInfoA( SPI_SETDOUBLECLICKTIME, curr_val, 0,
- SPIF_UPDATEINIFILE | SPIF_SENDCHANGE );
- if (!test_error_msg(rc,"SPI_{GET,SET}DOUBLECLICKTIME"))
- return;
-
- test_change_message( SPI_SETDOUBLECLICKTIME, 0 );
- sprintf( buf, "%d", curr_val );
- test_reg_key( SPI_SETDOUBLECLICKTIME_REGKEY,
- SPI_SETDOUBLECLICKTIME_VALNAME, buf );
- curr_val = 500; /* used value for 0 */
- eq( GetDoubleClickTime(), curr_val, "GetDoubleClickTime", "%d" );
-
- curr_val = 1000;
- rc=SystemParametersInfoA( SPI_SETDOUBLECLICKTIME, curr_val, 0,
- SPIF_UPDATEINIFILE | SPIF_SENDCHANGE );
- ok(rc, "SystemParametersInfoA: rc=%d err=%d\n", rc, GetLastError());
- test_change_message( SPI_SETDOUBLECLICKTIME, 0 );
- sprintf( buf, "%d", curr_val );
- test_reg_key( SPI_SETDOUBLECLICKTIME_REGKEY,
- SPI_SETDOUBLECLICKTIME_VALNAME, buf );
- eq( GetDoubleClickTime(), curr_val, "GetDoubleClickTime", "%d" );
-
- saved_val = curr_val;
-
- curr_val = 0;
- SetDoubleClickTime( curr_val );
- sprintf( buf, "%d", saved_val );
- test_reg_key( SPI_SETDOUBLECLICKTIME_REGKEY,
- SPI_SETDOUBLECLICKTIME_VALNAME, buf );
- curr_val = 500; /* used value for 0 */
- eq( GetDoubleClickTime(), curr_val, "GetDoubleClickTime", "%d" );
-
- curr_val = 1000;
- SetDoubleClickTime( curr_val );
- sprintf( buf, "%d", saved_val );
- test_reg_key( SPI_SETDOUBLECLICKTIME_REGKEY,
- SPI_SETDOUBLECLICKTIME_VALNAME, buf );
- eq( GetDoubleClickTime(), curr_val, "GetDoubleClickTime", "%d" );
-
- rc=SystemParametersInfoA(SPI_SETDOUBLECLICKTIME, old_time, 0, SPIF_UPDATEINIFILE);
- ok(rc, "***warning*** failed to restore the original value: rc=%d err=%d\n", rc, GetLastError());
-}
-
-static void test_SPI_SETMOUSEBUTTONSWAP( void ) /* 33 */
-{
- BOOL rc;
- BOOL old_b;
- const UINT vals[]={TRUE,FALSE};
- unsigned int i;
-
- trace("testing SPI_{GET,SET}MOUSEBUTTONSWAP\n");
- old_b = GetSystemMetrics( SM_SWAPBUTTON );
-
- for (i=0;i<sizeof(vals)/sizeof(*vals);i++)
- {
- SetLastError(0xdeadbeef);
- rc=SystemParametersInfoA( SPI_SETMOUSEBUTTONSWAP, vals[i], 0,
- SPIF_UPDATEINIFILE | SPIF_SENDCHANGE );
- if (!test_error_msg(rc,"SPI_SETMOUSEBUTTONSWAP")) return;
-
- test_change_message( SPI_SETMOUSEBUTTONSWAP, 0 );
- test_reg_key( SPI_SETMOUSEBUTTONSWAP_REGKEY,
- SPI_SETMOUSEBUTTONSWAP_VALNAME,
- vals[i] ? "1" : "0" );
- eq( GetSystemMetrics( SM_SWAPBUTTON ), (int)vals[i],
- "SM_SWAPBUTTON", "%d" );
- rc=SwapMouseButton((BOOL)vals[i^1]);
- eq( GetSystemMetrics( SM_SWAPBUTTON ), (int)vals[i^1],
- "SwapMouseButton", "%d" );
- ok( rc==(BOOL)vals[i], "SwapMouseButton does not return previous state (really %d)\n", rc );
- }
-
- rc=SystemParametersInfoA( SPI_SETMOUSEBUTTONSWAP, old_b, 0,
- SPIF_UPDATEINIFILE );
- ok(rc, "***warning*** failed to restore the original value: rc=%d err=%d\n", rc, GetLastError());
-}
-
-static void test_SPI_SETFASTTASKSWITCH( void ) /* 36 */
-{
- BOOL rc;
- BOOL v;
-
- trace("testing SPI_GETFASTTASKSWITCH\n");
- SetLastError(0xdeadbeef);
- rc=SystemParametersInfoA( SPI_GETFASTTASKSWITCH, 0, &v, 0 );
- if (!test_error_msg(rc,"SPI_{GET,SET}FASTTASKSWITCH"))
- return;
-
- /* there is not a single Windows platform on which SPI_GETFASTTASKSWITCH
- * works. That sure simplifies testing!
- */
-}
-
-static void test_SPI_SETDRAGFULLWINDOWS( void ) /* 37 */
-{
- BOOL rc;
- BOOL old_b;
- const UINT vals[]={TRUE,FALSE};
- unsigned int i;
-
- trace("testing SPI_{GET,SET}DRAGFULLWINDOWS\n");
- SetLastError(0xdeadbeef);
- rc=SystemParametersInfoA( SPI_GETDRAGFULLWINDOWS, 0, &old_b, 0 );
-
- /* SPI_{GET,SET}DRAGFULLWINDOWS is not implemented on Win95 */
- if (!test_error_msg(rc,"SPI_{GET,SET}DRAGFULLWINDOWS"))
- return;
-
- for (i=0;i<sizeof(vals)/sizeof(*vals);i++)
- {
- UINT v;
-
- rc=SystemParametersInfoA( SPI_SETDRAGFULLWINDOWS, vals[i], 0,
- SPIF_UPDATEINIFILE | SPIF_SENDCHANGE );
- if (!test_error_msg(rc,"SPI_SETDRAGFULLWINDOWS")) return;
- ok(rc, "%d: rc=%d err=%d\n", i, rc, GetLastError());
- test_change_message( SPI_SETDRAGFULLWINDOWS, 0 );
- test_reg_key( SPI_SETDRAGFULLWINDOWS_REGKEY,
- SPI_SETDRAGFULLWINDOWS_VALNAME,
- vals[i] ? "1" : "0" );
-
- rc=SystemParametersInfoA( SPI_GETDRAGFULLWINDOWS, 0, &v, 0 );
- ok(rc, "%d: rc=%d err=%d\n", i, rc, GetLastError());
- eq( v, vals[i], "SPI_{GET,SET}DRAGFULLWINDOWS", "%d" );
- }
-
- rc=SystemParametersInfoA( SPI_SETDRAGFULLWINDOWS, old_b, 0, SPIF_UPDATEINIFILE );
- ok(rc, "***warning*** failed to restore the original value: rc=%d err=%d\n", rc, GetLastError());
-}
-
-#define test_reg_metric( KEY, VAL, val) \
-{ INT regval;\
- regval = metricfromreg( KEY, VAL, dpi);\
- ok( regval==val, "wrong value \"%s\" in registry %d, expected %d\n", VAL, regval, val);\
-}
-
-#define test_reg_metric2( KEY1, KEY2, VAL, val) \
-{ INT regval;\
- regval = metricfromreg( KEY1, VAL, dpi);\
- if( regval != val) regval = metricfromreg( KEY2, VAL, dpi);\
- ok( regval==val, "wrong value \"%s\" in registry %d, expected %d\n", VAL, regval, val);\
-}
-
-#define test_reg_font( KEY, VAL, LF) \
-{ LOGFONTA lfreg;\
- lffromreg( KEY, VAL, &lfreg);\
- ok( (lfreg.lfHeight < 0 ? (LF).lfHeight == MulDiv( lfreg.lfHeight, dpi, real_dpi ) : \
- MulDiv( -(LF).lfHeight , 72, dpi) == lfreg.lfHeight )&&\
- (LF).lfWidth == lfreg.lfWidth &&\
- (LF).lfWeight == lfreg.lfWeight &&\
- !strcmp( (LF).lfFaceName, lfreg.lfFaceName)\
- , "wrong value \"%s\" in registry %d, %d\n", VAL, (LF).lfHeight, lfreg.lfHeight);\
-}
-
-#define TEST_NONCLIENTMETRICS_REG( ncm) \
-/*FIXME: test_reg_metric2( SPI_SETBORDER_REGKEY2, SPI_SETBORDER_REGKEY, SPI_SETBORDER_VALNAME, (ncm).iBorderWidth);*/\
-test_reg_metric( SPI_METRIC_REGKEY, SPI_SCROLLWIDTH_VALNAME, (ncm).iScrollWidth);\
-test_reg_metric( SPI_METRIC_REGKEY, SPI_SCROLLHEIGHT_VALNAME, (ncm).iScrollHeight);\
-/*FIXME: test_reg_metric( SPI_METRIC_REGKEY, SPI_CAPTIONWIDTH_VALNAME, (ncm).iCaptionWidth);*/\
-test_reg_metric( SPI_METRIC_REGKEY, SPI_CAPTIONHEIGHT_VALNAME, (ncm).iCaptionHeight);\
-test_reg_metric( SPI_METRIC_REGKEY, SPI_SMCAPTIONWIDTH_VALNAME, (ncm).iSmCaptionWidth);\
-test_reg_metric( SPI_METRIC_REGKEY, SPI_SMCAPTIONHEIGHT_VALNAME, (ncm).iSmCaptionHeight);\
-test_reg_metric( SPI_METRIC_REGKEY, SPI_MENUWIDTH_VALNAME, (ncm).iMenuWidth);\
-test_reg_metric( SPI_METRIC_REGKEY, SPI_MENUHEIGHT_VALNAME, (ncm).iMenuHeight);\
-test_reg_font( SPI_METRIC_REGKEY, SPI_MENUFONT_VALNAME, (ncm).lfMenuFont);\
-test_reg_font( SPI_METRIC_REGKEY, SPI_CAPTIONFONT_VALNAME, (ncm).lfCaptionFont);\
-test_reg_font( SPI_METRIC_REGKEY, SPI_SMCAPTIONFONT_VALNAME, (ncm).lfSmCaptionFont);\
-test_reg_font( SPI_METRIC_REGKEY, SPI_STATUSFONT_VALNAME, (ncm).lfStatusFont);\
-test_reg_font( SPI_METRIC_REGKEY, SPI_MESSAGEFONT_VALNAME, (ncm).lfMessageFont);
-
-/* get text metric height value for the specified logfont */
-static int get_tmheight( LOGFONTA *plf, int flag)
-{
- TEXTMETRICA tm;
- HFONT hfont = CreateFontIndirectA( plf);
- hfont = SelectObject( hdc, hfont);
- GetTextMetricsA( hdc, &tm);
- hfont = SelectObject( hdc, hfont);
- return tm.tmHeight + (flag ? tm.tmExternalLeading : 0);
-}
-
-static void test_GetSystemMetrics( void);
-static UINT smcxsmsize = 999999999;
-
-static void test_SPI_SETNONCLIENTMETRICS( void ) /* 44 */
-{
- BOOL rc;
- INT expect;
- NONCLIENTMETRICSA Ncmorig;
- NONCLIENTMETRICSA Ncmnew;
- NONCLIENTMETRICSA Ncmcur;
- NONCLIENTMETRICSA Ncmstart;
-
- Ncmorig.cbSize = FIELD_OFFSET(NONCLIENTMETRICSA, iPaddedBorderWidth);
- Ncmnew.cbSize = FIELD_OFFSET(NONCLIENTMETRICSA, iPaddedBorderWidth);
- Ncmcur.cbSize = FIELD_OFFSET(NONCLIENTMETRICSA, iPaddedBorderWidth);
- Ncmstart.cbSize = FIELD_OFFSET(NONCLIENTMETRICSA, iPaddedBorderWidth);
-
- trace("testing SPI_{GET,SET}NONCLIENTMETRICS\n");
- change_counter = 0;
- SetLastError(0xdeadbeef);
- rc=SystemParametersInfoA( SPI_GETNONCLIENTMETRICS, sizeof(NONCLIENTMETRICSA), &Ncmorig, FALSE );
- if (!test_error_msg(rc,"SPI_{GET,SET}NONCLIENTMETRICS"))
- return;
- Ncmstart = Ncmorig;
- smcxsmsize = Ncmstart.iSmCaptionWidth;
- /* SPI_GETNONCLIENTMETRICS returns some "cooked" values. For instance if
- the caption font height is higher than the CaptionHeight field,
- the latter is adjusted accordingly. To be able to restore these setting
- accurately be restore the raw values. */
- Ncmorig.iCaptionWidth = metricfromreg( SPI_METRIC_REGKEY, SPI_CAPTIONWIDTH_VALNAME, real_dpi);
- Ncmorig.iCaptionHeight = metricfromreg( SPI_METRIC_REGKEY, SPI_CAPTIONHEIGHT_VALNAME, dpi);
- Ncmorig.iSmCaptionHeight = metricfromreg( SPI_METRIC_REGKEY, SPI_SMCAPTIONHEIGHT_VALNAME, dpi);
- Ncmorig.iMenuHeight = metricfromreg( SPI_METRIC_REGKEY, SPI_MENUHEIGHT_VALNAME, dpi);
- /* test registry entries */
- TEST_NONCLIENTMETRICS_REG( Ncmorig)
- Ncmorig.lfCaptionFont.lfHeight = MulDiv( Ncmorig.lfCaptionFont.lfHeight, real_dpi, dpi );
-
- /* make small changes */
- Ncmnew = Ncmstart;
- Ncmnew.iBorderWidth += 1;
- Ncmnew.iScrollWidth += 1;
- Ncmnew.iScrollHeight -= 1;
- Ncmnew.iCaptionWidth -= 2;
- Ncmnew.iCaptionHeight += 2;
- Ncmnew.lfCaptionFont.lfHeight +=1;
- Ncmnew.lfCaptionFont.lfWidth +=2;
- Ncmnew.lfCaptionFont.lfWeight +=1;
- Ncmnew.iSmCaptionWidth += 1;
- Ncmnew.iSmCaptionHeight += 2;
- Ncmnew.lfSmCaptionFont.lfHeight +=3;
- Ncmnew.lfSmCaptionFont.lfWidth -=1;
- Ncmnew.lfSmCaptionFont.lfWeight +=3;
- Ncmnew.iMenuWidth += 1;
- Ncmnew.iMenuHeight += 2;
- Ncmnew.lfMenuFont.lfHeight +=1;
- Ncmnew.lfMenuFont.lfWidth +=1;
- Ncmnew.lfMenuFont.lfWeight +=2;
- Ncmnew.lfStatusFont.lfHeight -=1;
- Ncmnew.lfStatusFont.lfWidth -=1;
- Ncmnew.lfStatusFont.lfWeight +=3;
- Ncmnew.lfMessageFont.lfHeight -=2;
- Ncmnew.lfMessageFont.lfWidth -=1;
- Ncmnew.lfMessageFont.lfWeight +=4;
-
- rc=SystemParametersInfoA( SPI_SETNONCLIENTMETRICS, 0, &Ncmnew, SPIF_UPDATEINIFILE|
- SPIF_SENDCHANGE);
- if (!test_error_msg(rc,"SPI_SETNONCLIENTMETRICS")) return;
- ok(rc, "SystemParametersInfoA: rc=%d err=%d\n", rc, GetLastError());
- test_change_message( SPI_SETNONCLIENTMETRICS, 1 );
- /* get them back */
- rc=SystemParametersInfoA( SPI_GETNONCLIENTMETRICS, sizeof(NONCLIENTMETRICSA), &Ncmcur, FALSE );
- ok(rc, "SystemParametersInfoA: rc=%d err=%d\n", rc, GetLastError());
- /* test registry entries */
- TEST_NONCLIENTMETRICS_REG( Ncmcur)
- /* test the system metrics with these settings */
- test_GetSystemMetrics();
- /* now for something invalid: increase the {menu|caption|smcaption} fonts
- by a large amount will increase the {menu|caption|smcaption} height*/
- Ncmnew = Ncmstart;
- Ncmnew.lfMenuFont.lfHeight -= 8;
- Ncmnew.lfCaptionFont.lfHeight =-4;
- Ncmnew.lfSmCaptionFont.lfHeight -=10;
- /* also show that a few values are lo limited */
- Ncmnew.iCaptionWidth = 0;
- Ncmnew.iCaptionHeight = 0;
- Ncmnew.iScrollHeight = 0;
- Ncmnew.iScrollWidth = 0;
-
- rc=SystemParametersInfoA( SPI_SETNONCLIENTMETRICS, 0, &Ncmnew, SPIF_UPDATEINIFILE|
- SPIF_SENDCHANGE);
- ok(rc, "SystemParametersInfoA: rc=%d err=%d\n", rc, GetLastError());
- test_change_message( SPI_SETNONCLIENTMETRICS, 1 );
- /* raw values are in registry */
- TEST_NONCLIENTMETRICS_REG( Ncmnew)
- /* get them back */
- rc=SystemParametersInfoA( SPI_GETNONCLIENTMETRICS, sizeof(NONCLIENTMETRICSA), &Ncmcur, FALSE );
- ok(rc, "SystemParametersInfoA: rc=%d err=%d\n", rc, GetLastError());
- /* cooked values are returned */
- expect = max( Ncmnew.iMenuHeight, 2 + get_tmheight( &Ncmnew.lfMenuFont, 1));
- ok( Ncmcur.iMenuHeight == expect,
- "MenuHeight: %d expected %d\n", Ncmcur.iMenuHeight, expect);
- expect = max( Ncmnew.iCaptionHeight, 2 + get_tmheight(&Ncmnew.lfCaptionFont, 0));
- ok( Ncmcur.iCaptionHeight == expect,
- "CaptionHeight: %d expected %d\n", Ncmcur.iCaptionHeight, expect);
- expect = max( Ncmnew.iSmCaptionHeight, 2 + get_tmheight( &Ncmnew.lfSmCaptionFont, 0));
- ok( Ncmcur.iSmCaptionHeight == expect,
- "SmCaptionHeight: %d expected %d\n", Ncmcur.iSmCaptionHeight, expect);
-
- /* iCaptionWidth depends on a version, could be 8, 12 (Vista, Win7), 13 */
- ok( (Ncmcur.iCaptionWidth >= 8 && Ncmcur.iCaptionWidth <= 13) ||
- Ncmcur.iCaptionWidth == Ncmstart.iCaptionWidth, /* with windows XP theme, the value never changes */
- "CaptionWidth: %d expected from [8, 13] or %d\n", Ncmcur.iCaptionWidth, Ncmstart.iCaptionWidth);
- ok( Ncmcur.iScrollWidth == 8,
- "ScrollWidth: %d expected 8\n", Ncmcur.iScrollWidth);
- ok( Ncmcur.iScrollHeight == 8,
- "ScrollHeight: %d expected 8\n", Ncmcur.iScrollHeight);
- /* test the system metrics with these settings */
- test_GetSystemMetrics();
- /* restore */
- rc=SystemParametersInfoA( SPI_SETNONCLIENTMETRICS, sizeof(NONCLIENTMETRICSA),
- &Ncmorig, SPIF_UPDATEINIFILE | SPIF_SENDCHANGE);
- test_change_message( SPI_SETNONCLIENTMETRICS, 0 );
- ok(rc, "***warning*** failed to restore the original value: rc=%d err=%d\n", rc, GetLastError());
- /* test the system metrics with these settings */
- test_GetSystemMetrics();
-}
-
-static void test_SPI_SETMINIMIZEDMETRICS( void ) /* 44 */
-{
- BOOL rc;
- INT regval;
- MINIMIZEDMETRICS lpMm_orig;
- MINIMIZEDMETRICS lpMm_new;
- MINIMIZEDMETRICS lpMm_cur;
-
- lpMm_orig.cbSize = sizeof(MINIMIZEDMETRICS);
- lpMm_new.cbSize = sizeof(MINIMIZEDMETRICS);
- lpMm_cur.cbSize = sizeof(MINIMIZEDMETRICS);
-
- trace("testing SPI_{GET,SET}MINIMIZEDMETRICS\n");
- SetLastError(0xdeadbeef);
- rc=SystemParametersInfoA( SPI_GETMINIMIZEDMETRICS, sizeof(MINIMIZEDMETRICS), &lpMm_orig, FALSE );
- if (!test_error_msg(rc,"SPI_{GET,SET}MINIMIZEDMETRICS"))
- return;
- /* Test registry. Note that it is perfectly valid for some fields to
- * not be set.
- */
- regval = metricfromreg( SPI_MINIMIZEDMETRICS_REGKEY, SPI_MINWIDTH_VALNAME, dpi);
- ok( regval == -1 || regval == lpMm_orig.iWidth, "wrong value in registry %d, expected %d\n",
- regval, lpMm_orig.iWidth);
- regval = metricfromreg( SPI_MINIMIZEDMETRICS_REGKEY, SPI_MINHORZGAP_VALNAME, dpi);
- ok( regval == -1 || regval == lpMm_orig.iHorzGap, "wrong value in registry %d, expected %d\n",
- regval, lpMm_orig.iHorzGap);
- regval = metricfromreg( SPI_MINIMIZEDMETRICS_REGKEY, SPI_MINVERTGAP_VALNAME, dpi);
- ok( regval == -1 || regval == lpMm_orig.iVertGap, "wrong value in registry %d, expected %d\n",
- regval, lpMm_orig.iVertGap);
- regval = metricfromreg( SPI_MINIMIZEDMETRICS_REGKEY, SPI_MINARRANGE_VALNAME, dpi);
- ok( regval == -1 || regval == lpMm_orig.iArrange, "wrong value in registry %d, expected %d\n",
- regval, lpMm_orig.iArrange);
- /* set some new values */
- lpMm_cur.iWidth = 180;
- lpMm_cur.iHorzGap = 1;
- lpMm_cur.iVertGap = 1;
- lpMm_cur.iArrange = 5;
- rc=SystemParametersInfoA( SPI_SETMINIMIZEDMETRICS, sizeof(MINIMIZEDMETRICS),
- &lpMm_cur, SPIF_UPDATEINIFILE );
- if (!test_error_msg(rc,"SPI_SETMINIMIZEDMETRICS")) return;
- ok(rc, "SystemParametersInfoA: rc=%d err=%d\n", rc, GetLastError());
- /* read them back */
- rc=SystemParametersInfoA( SPI_GETMINIMIZEDMETRICS, sizeof(MINIMIZEDMETRICS), &lpMm_new, FALSE );
- ok(rc, "SystemParametersInfoA: rc=%d err=%d\n", rc, GetLastError());
- /* and compare */
- eq( lpMm_new.iWidth, lpMm_cur.iWidth, "iWidth", "%d" );
- eq( lpMm_new.iHorzGap, lpMm_cur.iHorzGap, "iHorzGap", "%d" );
- eq( lpMm_new.iVertGap, lpMm_cur.iVertGap, "iVertGap", "%d" );
- eq( lpMm_new.iArrange, lpMm_cur.iArrange, "iArrange", "%d" );
- /* test registry */
- regval = metricfromreg( SPI_MINIMIZEDMETRICS_REGKEY, SPI_MINWIDTH_VALNAME, dpi);
- ok( regval == lpMm_new.iWidth, "wrong value in registry %d, expected %d\n",
- regval, lpMm_new.iWidth);
- regval = metricfromreg( SPI_MINIMIZEDMETRICS_REGKEY, SPI_MINHORZGAP_VALNAME, dpi);
- ok( regval == lpMm_new.iHorzGap, "wrong value in registry %d, expected %d\n",
- regval, lpMm_new.iHorzGap);
- regval = metricfromreg( SPI_MINIMIZEDMETRICS_REGKEY, SPI_MINVERTGAP_VALNAME, dpi);
- ok( regval == lpMm_new.iVertGap, "wrong value in registry %d, expected %d\n",
- regval, lpMm_new.iVertGap);
- regval = metricfromreg( SPI_MINIMIZEDMETRICS_REGKEY, SPI_MINARRANGE_VALNAME, dpi);
- ok( regval == lpMm_new.iArrange, "wrong value in registry %d, expected %d\n",
- regval, lpMm_new.iArrange);
- /* test some system metrics */
- eq( GetSystemMetrics( SM_CXMINIMIZED ) - 6,
- lpMm_new.iWidth, "iWidth", "%d" );
- eq( GetSystemMetrics( SM_CXMINSPACING ) - GetSystemMetrics( SM_CXMINIMIZED ),
- lpMm_new.iHorzGap, "iHorzGap", "%d" );
- eq( GetSystemMetrics( SM_CYMINSPACING ) - GetSystemMetrics( SM_CYMINIMIZED ),
- lpMm_new.iVertGap, "iVertGap", "%d" );
- eq( GetSystemMetrics( SM_ARRANGE ),
- lpMm_new.iArrange, "iArrange", "%d" );
- /* now some really invalid settings */
- lpMm_cur.iWidth = -1;
- lpMm_cur.iHorzGap = -1;
- lpMm_cur.iVertGap = -1;
- lpMm_cur.iArrange = - 1;
- rc=SystemParametersInfoA( SPI_SETMINIMIZEDMETRICS, sizeof(MINIMIZEDMETRICS),
- &lpMm_cur, SPIF_UPDATEINIFILE );
- ok(rc, "SystemParametersInfoA: rc=%d err=%d\n", rc, GetLastError());
- /* read back */
- rc=SystemParametersInfoA( SPI_GETMINIMIZEDMETRICS, sizeof(MINIMIZEDMETRICS), &lpMm_new, FALSE );
- ok(rc, "SystemParametersInfoA: rc=%d err=%d\n", rc, GetLastError());
- /* the width and H/V gaps have minimum 0, arrange is and'd with 0xf */
- eq( lpMm_new.iWidth, 0, "iWidth", "%d" );
- eq( lpMm_new.iHorzGap, 0, "iHorzGap", "%d" );
- eq( lpMm_new.iVertGap, 0, "iVertGap", "%d" );
- eq( lpMm_new.iArrange, 0xf & lpMm_cur.iArrange, "iArrange", "%d" );
- /* test registry */
- if (0)
- {
- /* FIXME: cannot understand the results of this (11, 11, 11, 0) */
- regval = metricfromreg( SPI_MINIMIZEDMETRICS_REGKEY, SPI_MINWIDTH_VALNAME, dpi);
- ok( regval == lpMm_new.iWidth, "wrong value in registry %d, expected %d\n",
- regval, lpMm_new.iWidth);
- regval = metricfromreg( SPI_MINIMIZEDMETRICS_REGKEY, SPI_MINHORZGAP_VALNAME, dpi);
- ok( regval == lpMm_new.iHorzGap, "wrong value in registry %d, expected %d\n",
- regval, lpMm_new.iHorzGap);
- regval = metricfromreg( SPI_MINIMIZEDMETRICS_REGKEY, SPI_MINVERTGAP_VALNAME, dpi);
- ok( regval == lpMm_new.iVertGap, "wrong value in registry %d, expected %d\n",
- regval, lpMm_new.iVertGap);
- regval = metricfromreg( SPI_MINIMIZEDMETRICS_REGKEY, SPI_MINARRANGE_VALNAME, dpi);
- ok( regval == lpMm_new.iArrange, "wrong value in registry %d, expected %d\n",
- regval, lpMm_new.iArrange);
- }
- /* test some system metrics */
- eq( GetSystemMetrics( SM_CXMINIMIZED ) - 6,
- lpMm_new.iWidth, "iWidth", "%d" );
- eq( GetSystemMetrics( SM_CXMINSPACING ) - GetSystemMetrics( SM_CXMINIMIZED ),
- lpMm_new.iHorzGap, "iHorzGap", "%d" );
- eq( GetSystemMetrics( SM_CYMINSPACING ) - GetSystemMetrics( SM_CYMINIMIZED ),
- lpMm_new.iVertGap, "iVertGap", "%d" );
- eq( GetSystemMetrics( SM_ARRANGE ),
- lpMm_new.iArrange, "iArrange", "%d" );
- /* restore */
- rc=SystemParametersInfoA( SPI_SETMINIMIZEDMETRICS, sizeof(MINIMIZEDMETRICS),
- &lpMm_orig, SPIF_UPDATEINIFILE );
- ok(rc, "***warning*** failed to restore the original value: rc=%d err=%d\n", rc, GetLastError());
- /* check that */
- rc=SystemParametersInfoA( SPI_GETMINIMIZEDMETRICS, sizeof(MINIMIZEDMETRICS), &lpMm_new, FALSE );
- ok(rc, "SystemParametersInfoA: rc=%d err=%d\n", rc, GetLastError());
- eq( lpMm_new.iWidth, lpMm_orig.iWidth, "iWidth", "%d" );
- eq( lpMm_new.iHorzGap, lpMm_orig.iHorzGap, "iHorzGap", "%d" );
- eq( lpMm_new.iVertGap, lpMm_orig.iVertGap, "iVertGap", "%d" );
- eq( lpMm_new.iArrange, lpMm_orig.iArrange, "iArrange", "%d" );
-}
-
-static void test_SPI_SETICONMETRICS( void ) /* 46 */
-{
- BOOL rc, wrap;
- INT spacing;
- ICONMETRICSA im_orig;
- ICONMETRICSA im_new;
- ICONMETRICSA im_cur;
- INT regval;
-
- im_orig.cbSize = sizeof(ICONMETRICSA);
- im_new.cbSize = sizeof(ICONMETRICSA);
- im_cur.cbSize = sizeof(ICONMETRICSA);
-
- trace("testing SPI_{GET,SET}ICONMETRICS\n");
- SetLastError(0xdeadbeef);
- rc=SystemParametersInfoA( SPI_GETICONMETRICS, sizeof(ICONMETRICSA), &im_orig, FALSE );
- if (!test_error_msg(rc,"SPI_{GET,SET}ICONMETRICS"))
- return;
- /* check some registry values */
- regval = metricfromreg( SPI_ICONHORIZONTALSPACING_REGKEY, SPI_ICONHORIZONTALSPACING_VALNAME, dpi);
- ok( regval==im_orig.iHorzSpacing || broken(regval == -1), /* nt4 */
- "wrong value in registry %d, expected %d\n", regval, im_orig.iHorzSpacing);
- regval = metricfromreg( SPI_ICONVERTICALSPACING_REGKEY, SPI_ICONVERTICALSPACING_VALNAME, dpi);
- ok( regval==im_orig.iVertSpacing || broken(regval == -1), /* nt4 */
- "wrong value in registry %d, expected %d\n", regval, im_orig.iVertSpacing);
- regval = metricfromreg( SPI_SETICONTITLEWRAP_REGKEY2, SPI_SETICONTITLEWRAP_VALNAME, dpi);
- if( regval != im_orig.iTitleWrap)
- regval = metricfromreg( SPI_SETICONTITLEWRAP_REGKEY1, SPI_SETICONTITLEWRAP_VALNAME, dpi);
- ok( regval==im_orig.iTitleWrap, "wrong value in registry %d, expected %d\n", regval, im_orig.iTitleWrap);
-
- /* change everything without creating something invalid ( Win9x would ignore
- * an invalid font for instance) */
- im_cur = im_orig;
- im_cur.iHorzSpacing += 10;
- im_cur.iVertSpacing += 6;
- im_cur.iTitleWrap = !im_cur.iTitleWrap;
- im_cur.lfFont.lfHeight += 1;
- im_cur.lfFont.lfWidth += 2;
- im_cur.lfFont.lfEscapement = 1;
- im_cur.lfFont.lfWeight = im_cur.lfFont.lfWeight > 100 ? 1 : 314;
- im_cur.lfFont.lfItalic = !im_cur.lfFont.lfItalic;
- im_cur.lfFont.lfStrikeOut = !im_cur.lfFont.lfStrikeOut;
- im_cur.lfFont.lfUnderline = !im_cur.lfFont.lfUnderline;
- im_cur.lfFont.lfCharSet = im_cur.lfFont.lfCharSet ? 0 : 1;
- im_cur.lfFont.lfOutPrecision = im_cur.lfFont.lfOutPrecision == OUT_DEFAULT_PRECIS ?
- OUT_TT_PRECIS : OUT_DEFAULT_PRECIS;
- im_cur.lfFont.lfClipPrecision ^= CLIP_LH_ANGLES;
- im_cur.lfFont.lfPitchAndFamily = im_cur.lfFont.lfPitchAndFamily ? 0 : 1;
- im_cur.lfFont.lfQuality = im_cur.lfFont.lfQuality == DEFAULT_QUALITY ?
- DRAFT_QUALITY : DEFAULT_QUALITY;
- if( strcmp( im_cur.lfFont.lfFaceName, "MS Serif"))
- strcpy( im_cur.lfFont.lfFaceName, "MS Serif");
- else
- strcpy( im_cur.lfFont.lfFaceName, "MS Sans Serif");
-
- rc=SystemParametersInfoA( SPI_SETICONMETRICS, sizeof(ICONMETRICSA), &im_cur, SPIF_UPDATEINIFILE );
- if (!test_error_msg(rc,"SPI_SETICONMETRICS")) return;
- ok(rc, "SystemParametersInfoA: rc=%d err=%d\n", rc, GetLastError());
-
- rc=SystemParametersInfoA( SPI_GETICONMETRICS, sizeof(ICONMETRICSA), &im_new, FALSE );
- ok(rc, "SystemParametersInfoA: rc=%d err=%d\n", rc, GetLastError());
- /* test GET <-> SETICONMETRICS */
- eq( im_new.iHorzSpacing, im_cur.iHorzSpacing, "iHorzSpacing", "%d" );
- eq( im_new.iVertSpacing, im_cur.iVertSpacing, "iVertSpacing", "%d" );
- eq( im_new.iTitleWrap, im_cur.iTitleWrap, "iTitleWrap", "%d" );
- eq( im_new.lfFont.lfHeight, im_cur.lfFont.lfHeight, "lfHeight", "%d" );
- eq( im_new.lfFont.lfWidth, im_cur.lfFont.lfWidth, "lfWidth", "%d" );
- eq( im_new.lfFont.lfEscapement, im_cur.lfFont.lfEscapement, "lfEscapement", "%d" );
- eq( im_new.lfFont.lfWeight, im_cur.lfFont.lfWeight, "lfWeight", "%d" );
- eq( im_new.lfFont.lfItalic, im_cur.lfFont.lfItalic, "lfItalic", "%d" );
- eq( im_new.lfFont.lfStrikeOut, im_cur.lfFont.lfStrikeOut, "lfStrikeOut", "%d" );
- eq( im_new.lfFont.lfUnderline, im_cur.lfFont.lfUnderline, "lfUnderline", "%d" );
- eq( im_new.lfFont.lfCharSet, im_cur.lfFont.lfCharSet, "lfCharSet", "%d" );
- eq( im_new.lfFont.lfOutPrecision, im_cur.lfFont.lfOutPrecision, "lfOutPrecision", "%d" );
- eq( im_new.lfFont.lfClipPrecision, im_cur.lfFont.lfClipPrecision, "lfClipPrecision", "%d" );
- eq( im_new.lfFont.lfPitchAndFamily, im_cur.lfFont.lfPitchAndFamily, "lfPitchAndFamily", "%d" );
- eq( im_new.lfFont.lfQuality, im_cur.lfFont.lfQuality, "lfQuality", "%d" );
- ok( !strcmp( im_new.lfFont.lfFaceName, im_cur.lfFont.lfFaceName),
- "wrong facename \"%s\", should be \"%s\"\n", im_new.lfFont.lfFaceName,
- im_cur.lfFont.lfFaceName);
- /* test some system metrics */
- eq( GetSystemMetrics( SM_CXICONSPACING ),
- im_new.iHorzSpacing, "iHorzSpacing", "%d" );
- eq( GetSystemMetrics( SM_CYICONSPACING ),
- im_new.iVertSpacing, "iVertSpacing", "%d" );
- /* check some registry values */
- regval = metricfromreg( SPI_ICONHORIZONTALSPACING_REGKEY, SPI_ICONHORIZONTALSPACING_VALNAME, dpi);
- ok( regval==im_cur.iHorzSpacing, "wrong value in registry %d, expected %d\n", regval, im_cur.iHorzSpacing);
- regval = metricfromreg( SPI_ICONVERTICALSPACING_REGKEY, SPI_ICONVERTICALSPACING_VALNAME, dpi);
- ok( regval==im_cur.iVertSpacing, "wrong value in registry %d, expected %d\n", regval, im_cur.iVertSpacing);
- regval = metricfromreg( SPI_SETICONTITLEWRAP_REGKEY2, SPI_SETICONTITLEWRAP_VALNAME, dpi);
- if( regval != im_cur.iTitleWrap)
- regval = metricfromreg( SPI_SETICONTITLEWRAP_REGKEY1, SPI_SETICONTITLEWRAP_VALNAME, dpi);
- ok( regval==im_cur.iTitleWrap, "wrong value in registry %d, expected %d\n", regval, im_cur.iTitleWrap);
- /* test some values from other SPI_GETxxx calls */
- rc = SystemParametersInfoA( SPI_ICONHORIZONTALSPACING, 0, &spacing, 0 );
- ok( rc && spacing == im_cur.iHorzSpacing,
- "SystemParametersInfoA( SPI_ICONHORIZONTALSPACING...) failed or returns wrong value %d instead of %d\n",
- spacing, im_cur.iHorzSpacing);
- rc = SystemParametersInfoA( SPI_ICONVERTICALSPACING, 0, &spacing, 0 );
- ok( rc && spacing == im_cur.iVertSpacing,
- "SystemParametersInfoA( SPI_ICONVERTICALSPACING...) failed or returns wrong value %d instead of %d\n",
- spacing, im_cur.iVertSpacing);
- rc = SystemParametersInfoA( SPI_GETICONTITLEWRAP, 0, &wrap, 0 );
- ok( rc && wrap == im_cur.iTitleWrap,
- "SystemParametersInfoA( SPI_GETICONTITLEWRAP...) failed or returns wrong value %d instead of %d\n",
- wrap, im_cur.iTitleWrap);
- /* restore old values */
- rc=SystemParametersInfoA( SPI_SETICONMETRICS, sizeof(ICONMETRICSA), &im_orig,SPIF_UPDATEINIFILE );
- ok(rc, "***warning*** failed to restore the original value: rc=%d err=%d\n", rc, GetLastError());
-
- rc=SystemParametersInfoA( SPI_GETICONMETRICS, sizeof(ICONMETRICSA), &im_new, FALSE );
- ok(rc, "SystemParametersInfoA: rc=%d err=%d\n", rc, GetLastError());
-
- eq( im_new.iHorzSpacing, im_orig.iHorzSpacing, "iHorzSpacing", "%d" );
- eq( im_new.iVertSpacing, im_orig.iVertSpacing, "iVertSpacing", "%d" );
- eq( im_new.iTitleWrap, im_orig.iTitleWrap, "iTitleWrap", "%d" );
-}
-
-static void test_SPI_SETWORKAREA( void ) /* 47 */
-{
- BOOL rc;
- RECT old_area;
- RECT area;
- RECT curr_val;
-
- trace("testing SPI_{GET,SET}WORKAREA\n");
- SetLastError(0xdeadbeef);
- rc=SystemParametersInfoA(SPI_GETWORKAREA, 0, &old_area, 0);
- if (!test_error_msg(rc,"SPI_{GET,SET}WORKAREA"))
- return;
-
- /* Modify the work area only minimally as this causes the icons that
- * fall outside it to be moved around thus requiring the user to
- * reposition them manually one by one.
- * Changing the work area by just one pixel should make this occurrence
- * reasonably unlikely.
- */
- SetRect(&curr_val, old_area.left, old_area.top, old_area.right - 1, old_area.bottom - 1);
- rc=SystemParametersInfoA( SPI_SETWORKAREA, 0, &curr_val,
- SPIF_UPDATEINIFILE | SPIF_SENDCHANGE );
- if (!test_error_msg(rc,"SPI_SETWORKAREA")) return;
- ok(rc, "SystemParametersInfoA: rc=%d err=%d\n", rc, GetLastError());
- rc=SystemParametersInfoA( SPI_GETWORKAREA, 0, &area, 0 );
- ok(rc, "SystemParametersInfoA: rc=%d err=%d\n", rc, GetLastError());
- if( !EqualRect( &area, &curr_val)) /* no message if rect has not changed */
- test_change_message( SPI_SETWORKAREA, 0);
- eq( area.left, curr_val.left, "left", "%d" );
- eq( area.top, curr_val.top, "top", "%d" );
- /* size may be rounded */
- ok( area.right >= curr_val.right - 16 && area.right < curr_val.right + 16,
- "right: got %d instead of %d\n", area.right, curr_val.right );
- ok( area.bottom >= curr_val.bottom - 16 && area.bottom < curr_val.bottom + 16,
- "bottom: got %d instead of %d\n", area.bottom, curr_val.bottom );
- curr_val = area;
- rc=SystemParametersInfoA( SPI_SETWORKAREA, 0, &old_area,
- SPIF_UPDATEINIFILE | SPIF_SENDCHANGE );
- ok(rc, "***warning*** failed to restore the original value: rc=%d err=%d\n", rc, GetLastError());
- rc=SystemParametersInfoA( SPI_GETWORKAREA, 0, &area, 0 );
- ok(rc, "SystemParametersInfoA: rc=%d err=%d\n", rc, GetLastError());
- if( !EqualRect( &area, &curr_val)) /* no message if rect has not changed */
- test_change_message( SPI_SETWORKAREA, 0 );
- eq( area.left, old_area.left, "left", "%d" );
- eq( area.top, old_area.top, "top", "%d" );
- /* size may be rounded */
- ok( area.right >= old_area.right - 16 && area.right < old_area.right + 16,
- "right: got %d instead of %d\n", area.right, old_area.right );
- ok( area.bottom >= old_area.bottom - 16 && area.bottom < old_area.bottom + 16,
- "bottom: got %d instead of %d\n", area.bottom, old_area.bottom );
-}
-
-static void test_SPI_SETSHOWSOUNDS( void ) /* 57 */
-{
- BOOL rc;
- BOOL old_b;
- const UINT vals[]={TRUE,FALSE};
- unsigned int i;
-
- trace("testing SPI_{GET,SET}SHOWSOUNDS\n");
- SetLastError(0xdeadbeef);
- rc=SystemParametersInfoA( SPI_GETSHOWSOUNDS, 0, &old_b, 0 );
- /* SPI_{GET,SET}SHOWSOUNDS is completely broken on Win9x */
- if (!test_error_msg(rc,"SPI_{GET,SET}SHOWSOUNDS"))
- return;
-
- for (i=0;i<sizeof(vals)/sizeof(*vals);i++)
- {
- UINT v;
-
- rc=SystemParametersInfoA( SPI_SETSHOWSOUNDS, vals[i], 0,
- SPIF_UPDATEINIFILE | SPIF_SENDCHANGE );
- if (!test_error_msg(rc,"SPI_SETSHOWSOUNDS")) return;
- ok(rc, "%d: rc=%d err=%d\n", i, rc, GetLastError());
- test_change_message( SPI_SETSHOWSOUNDS, 1 );
- test_reg_key( SPI_SETSHOWSOUNDS_REGKEY,
- SPI_SETSHOWSOUNDS_VALNAME,
- vals[i] ? "1" : "0" );
-
- rc=SystemParametersInfoA( SPI_GETSHOWSOUNDS, 0, &v, 0 );
- ok(rc, "%d: rc=%d err=%d\n", i, rc, GetLastError());
- eq( v, vals[i], "SPI_GETSHOWSOUNDS", "%d" );
- eq( GetSystemMetrics( SM_SHOWSOUNDS ), (int)vals[i],
- "SM_SHOWSOUNDS", "%d" );
- }
-
- rc=SystemParametersInfoA( SPI_SETSHOWSOUNDS, old_b, 0, SPIF_UPDATEINIFILE );
- ok(rc, "***warning*** failed to restore the original value: rc=%d err=%d\n", rc, GetLastError());
-}
-
-static void test_SPI_SETKEYBOARDPREF( void ) /* 69 */
-{
- BOOL rc;
- BOOL old_b;
- const UINT vals[]={TRUE,FALSE};
- unsigned int i;
-
- trace("testing SPI_{GET,SET}KEYBOARDPREF\n");
- SetLastError(0xdeadbeef);
- rc=SystemParametersInfoA( SPI_GETKEYBOARDPREF, 0, &old_b, 0 );
- if (!test_error_msg(rc,"SPI_{GET,SET}KEYBOARDPREF"))
- return;
-
- for (i=0;i<sizeof(vals)/sizeof(*vals);i++)
- {
- BOOL v;
-
- rc=SystemParametersInfoA( SPI_SETKEYBOARDPREF, vals[i], 0,
- SPIF_UPDATEINIFILE | SPIF_SENDCHANGE );
- if (!test_error_msg(rc,"SPI_SETKEYBOARDPREF")) return;
- ok(rc, "%d: rc=%d err=%d\n", i, rc, GetLastError());
- test_change_message( SPI_SETKEYBOARDPREF, 1 );
- test_reg_key_ex2( SPI_SETKEYBOARDPREF_REGKEY, SPI_SETKEYBOARDPREF_REGKEY_LEGACY,
- SPI_SETKEYBOARDPREF_VALNAME, SPI_SETKEYBOARDPREF_VALNAME_LEGACY,
- vals[i] ? "1" : "0" );
-
- rc=SystemParametersInfoA( SPI_GETKEYBOARDPREF, 0, &v, 0 );
- ok(rc, "%d: rc=%d err=%d\n", i, rc, GetLastError());
- eq( v, (BOOL)vals[i], "SPI_GETKEYBOARDPREF", "%d" );
- }
-
- rc=SystemParametersInfoA( SPI_SETKEYBOARDPREF, old_b, 0, SPIF_UPDATEINIFILE );
- ok(rc, "***warning*** failed to restore the original value: rc=%d err=%d\n", rc, GetLastError());
-}
-
-static void test_SPI_SETSCREENREADER( void ) /* 71 */
-{
- BOOL rc;
- BOOL old_b;
- const UINT vals[]={TRUE,FALSE};
- unsigned int i;
-
- trace("testing SPI_{GET,SET}SCREENREADER\n");
- SetLastError(0xdeadbeef);
- rc=SystemParametersInfoA( SPI_GETSCREENREADER, 0, &old_b, 0 );
- if (!test_error_msg(rc,"SPI_{GET,SET}SCREENREADER"))
- return;
-
- for (i=0;i<sizeof(vals)/sizeof(*vals);i++)
- {
- BOOL v;
-
- rc=SystemParametersInfoA( SPI_SETSCREENREADER, vals[i], 0,
- SPIF_UPDATEINIFILE | SPIF_SENDCHANGE );
- if (!test_error_msg(rc,"SPI_SETSCREENREADER")) return;
- ok(rc, "%d: rc=%d err=%d\n", i, rc, GetLastError());
- test_change_message( SPI_SETSCREENREADER, 1 );
- test_reg_key_ex2_optional( SPI_SETSCREENREADER_REGKEY, SPI_SETSCREENREADER_REGKEY_LEGACY,
- SPI_SETSCREENREADER_VALNAME, SPI_SETSCREENREADER_VALNAME_LEGACY,
- vals[i] ? "1" : "0" );
-
- rc=SystemParametersInfoA( SPI_GETSCREENREADER, 0, &v, 0 );
- ok(rc, "%d: rc=%d err=%d\n", i, rc, GetLastError());
- eq( v, (BOOL)vals[i], "SPI_GETSCREENREADER", "%d" );
- }
-
- rc=SystemParametersInfoA( SPI_SETSCREENREADER, old_b, 0, SPIF_UPDATEINIFILE );
- ok(rc, "***warning*** failed to restore the original value: rc=%d err=%d\n", rc, GetLastError());
-}
-
-static void test_SPI_SETFONTSMOOTHING( void ) /* 75 */
-{
- BOOL rc;
- BOOL old_b;
- DWORD old_type, old_contrast, old_orient;
- const UINT vals[]={0xffffffff,0,1,2};
- unsigned int i;
-
- trace("testing SPI_{GET,SET}FONTSMOOTHING\n");
- if( iswin9x) return; /* 95/98/ME don't seem to implement this fully */
- SetLastError(0xdeadbeef);
- rc=SystemParametersInfoA( SPI_GETFONTSMOOTHING, 0, &old_b, 0 );
- if (!test_error_msg(rc,"SPI_{GET,SET}FONTSMOOTHING"))
- return;
- SystemParametersInfoA( SPI_GETFONTSMOOTHINGTYPE, 0, &old_type, 0 );
- SystemParametersInfoA( SPI_GETFONTSMOOTHINGCONTRAST, 0, &old_contrast, 0 );
- SystemParametersInfoA( SPI_GETFONTSMOOTHINGORIENTATION, 0, &old_orient, 0 );
-
- for (i=0;i<sizeof(vals)/sizeof(*vals);i++)
- {
- UINT v;
-
- rc=SystemParametersInfoA( SPI_SETFONTSMOOTHING, vals[i], 0,
- SPIF_UPDATEINIFILE | SPIF_SENDCHANGE );
- if (!test_error_msg(rc,"SPI_SETFONTSMOOTHING")) return;
- ok(rc, "%d: rc=%d err=%d\n", i, rc, GetLastError());
- test_change_message( SPI_SETFONTSMOOTHING, 0 );
- test_reg_key( SPI_SETFONTSMOOTHING_REGKEY,
- SPI_SETFONTSMOOTHING_VALNAME,
- vals[i] ? "2" : "0" );
-
- rc=SystemParametersInfoA( SPI_SETFONTSMOOTHINGTYPE, 0, UlongToPtr(vals[i]),
- SPIF_UPDATEINIFILE | SPIF_SENDCHANGE );
- if (!test_error_msg(rc,"SPI_SETFONTSMOOTHINGTYPE")) return;
- ok(rc, "%d: rc=%d err=%d\n", i, rc, GetLastError());
- test_change_message( SPI_SETFONTSMOOTHINGTYPE, 0 );
- test_reg_key_dword( SPI_SETFONTSMOOTHING_REGKEY,
- SPI_SETFONTSMOOTHINGTYPE_VALNAME, &vals[i] );
-
- rc=SystemParametersInfoA( SPI_SETFONTSMOOTHINGCONTRAST, 0, UlongToPtr(vals[i]),
- SPIF_UPDATEINIFILE | SPIF_SENDCHANGE );
- if (!test_error_msg(rc,"SPI_SETFONTSMOOTHINGCONTRAST")) return;
- ok(rc, "%d: rc=%d err=%d\n", i, rc, GetLastError());
- test_change_message( SPI_SETFONTSMOOTHINGCONTRAST, 0 );
- test_reg_key_dword( SPI_SETFONTSMOOTHING_REGKEY,
- SPI_SETFONTSMOOTHINGCONTRAST_VALNAME, &vals[i] );
-
- rc=SystemParametersInfoA( SPI_SETFONTSMOOTHINGORIENTATION, 0, UlongToPtr(vals[i]),
- SPIF_UPDATEINIFILE | SPIF_SENDCHANGE );
- if (!test_error_msg(rc,"SPI_SETFONTSMOOTHINGORIENTATION")) return;
- ok(rc, "%d: rc=%d err=%d\n", i, rc, GetLastError());
- test_change_message( SPI_SETFONTSMOOTHINGORIENTATION, 0 );
- test_reg_key_dword( SPI_SETFONTSMOOTHING_REGKEY,
- SPI_SETFONTSMOOTHINGORIENTATION_VALNAME, &vals[i] );
-
- rc=SystemParametersInfoA( SPI_GETFONTSMOOTHING, 0, &v, 0 );
- ok(rc, "%d: rc=%d err=%d\n", i, rc, GetLastError());
- eq( v, vals[i] ? 1 : 0, "SPI_GETFONTSMOOTHING", "%d" );
-
- rc=SystemParametersInfoA( SPI_GETFONTSMOOTHINGTYPE, 0, &v, 0 );
- ok(rc, "%d: rc=%d err=%d\n", i, rc, GetLastError());
- ok( v == vals[i], "wrong value %x/%x\n", v, vals[i] );
-
- rc=SystemParametersInfoA( SPI_GETFONTSMOOTHINGCONTRAST, 0, &v, 0 );
- ok(rc, "%d: rc=%d err=%d\n", i, rc, GetLastError());
- ok( v == vals[i], "wrong value %x/%x\n", v, vals[i] );
-
- rc=SystemParametersInfoA( SPI_GETFONTSMOOTHINGORIENTATION, 0, &v, 0 );
- ok(rc, "%d: rc=%d err=%d\n", i, rc, GetLastError());
- ok( v == vals[i], "wrong value %x/%x\n", v, vals[i] );
- }
-
- rc=SystemParametersInfoA( SPI_SETFONTSMOOTHING, old_b, 0, SPIF_UPDATEINIFILE );
- ok(rc, "***warning*** failed to restore the original value: rc=%d err=%d\n", rc, GetLastError());
- rc=SystemParametersInfoA( SPI_SETFONTSMOOTHINGTYPE, old_type, 0, SPIF_UPDATEINIFILE );
- ok(rc, "***warning*** failed to restore the original value: rc=%d err=%d\n", rc, GetLastError());
- rc=SystemParametersInfoA( SPI_SETFONTSMOOTHINGCONTRAST, old_contrast, 0, SPIF_UPDATEINIFILE );
- ok(rc, "***warning*** failed to restore the original value: rc=%d err=%d\n", rc, GetLastError());
- rc=SystemParametersInfoA( SPI_SETFONTSMOOTHINGORIENTATION, old_orient, 0, SPIF_UPDATEINIFILE );
- ok(rc, "***warning*** failed to restore the original value: rc=%d err=%d\n", rc, GetLastError());
-}
-
-static void test_SPI_SETLOWPOWERACTIVE( void ) /* 85 */
-{
- BOOL rc;
- BOOL old_b;
- const UINT vals[]={TRUE,FALSE};
- unsigned int i;
-
- trace("testing SPI_{GET,SET}LOWPOWERACTIVE\n");
- SetLastError(0xdeadbeef);
- rc=SystemParametersInfoA( SPI_GETLOWPOWERACTIVE, 0, &old_b, 0 );
- if (!test_error_msg(rc,"SPI_{GET,SET}LOWPOWERACTIVE"))
- return;
-
- for (i=0;i<sizeof(vals)/sizeof(*vals);i++)
- {
- UINT v;
-
- rc=SystemParametersInfoA( SPI_SETLOWPOWERACTIVE, vals[i], 0,
- SPIF_UPDATEINIFILE | SPIF_SENDCHANGE );
- if (!test_error_msg(rc,"SPI_SETLOWPOWERACTIVE")) return;
- ok(rc, "%d: rc=%d err=%d\n", i, rc, GetLastError());
- test_change_message( SPI_SETLOWPOWERACTIVE, 1 );
- test_reg_key_optional( SPI_SETLOWPOWERACTIVE_REGKEY,
- SPI_SETLOWPOWERACTIVE_VALNAME,
- vals[i] ? "1" : "0" );
-
- /* SPI_SETLOWPOWERACTIVE is not persistent in win2k3 and above */
- v = 0xdeadbeef;
- rc=SystemParametersInfoA( SPI_GETLOWPOWERACTIVE, 0, &v, 0 );
- ok(rc, "%d: rc=%d err=%d\n", i, rc, GetLastError());
- ok(v == vals[i] ||
- broken(v == (0xdead0000 | vals[i])) || /* win98 only sets the low word */
- v == 0, /* win2k3 */
- "SPI_GETLOWPOWERACTIVE: got %d instead of 0 or %d\n", v, vals[i]);
- }
-
- rc=SystemParametersInfoA( SPI_SETLOWPOWERACTIVE, old_b, 0, SPIF_UPDATEINIFILE );
- ok(rc, "***warning*** failed to restore the original value: rc=%d err=%d\n", rc, GetLastError());
-}
-
-static void test_SPI_SETPOWEROFFACTIVE( void ) /* 86 */
-{
- BOOL rc;
- BOOL old_b;
- const UINT vals[]={TRUE,FALSE};
- unsigned int i;
-
- trace("testing SPI_{GET,SET}POWEROFFACTIVE\n");
- SetLastError(0xdeadbeef);
- rc=SystemParametersInfoA( SPI_GETPOWEROFFACTIVE, 0, &old_b, 0 );
- if (!test_error_msg(rc,"SPI_{GET,SET}POWEROFFACTIVE"))
- return;
-
- for (i=0;i<sizeof(vals)/sizeof(*vals);i++)
- {
- UINT v;
-
- rc=SystemParametersInfoA( SPI_SETPOWEROFFACTIVE, vals[i], 0,
- SPIF_UPDATEINIFILE | SPIF_SENDCHANGE );
- if (!test_error_msg(rc,"SPI_SETPOWEROFFACTIVE")) return;
- ok(rc, "%d: rc=%d err=%d\n", i, rc, GetLastError());
- test_change_message( SPI_SETPOWEROFFACTIVE, 1 );
- test_reg_key_optional( SPI_SETPOWEROFFACTIVE_REGKEY,
- SPI_SETPOWEROFFACTIVE_VALNAME,
- vals[i] ? "1" : "0" );
-
- /* SPI_SETPOWEROFFACTIVE is not persistent in win2k3 and above */
- v = 0xdeadbeef;
- rc=SystemParametersInfoA( SPI_GETPOWEROFFACTIVE, 0, &v, 0 );
- ok(rc, "%d: rc=%d err=%d\n", i, rc, GetLastError());
- ok(v == vals[i] ||
- broken(v == (0xdead0000 | vals[i])) || /* win98 only sets the low word */
- v == 0, /* win2k3 */
- "SPI_GETPOWEROFFACTIVE: got %d instead of 0 or %d\n", v, vals[i]);
- }
-
- rc=SystemParametersInfoA( SPI_SETPOWEROFFACTIVE, old_b, 0, SPIF_UPDATEINIFILE );
- ok(rc, "***warning*** failed to restore the original value: rc=%d err=%d\n", rc, GetLastError());
-}
-
-static void test_SPI_SETSNAPTODEFBUTTON( void ) /* 95 */
-{
- BOOL rc;
- BOOL old_b;
- const UINT vals[]={TRUE,FALSE};
- unsigned int i;
-
- trace("testing SPI_{GET,SET}SNAPTODEFBUTTON\n");
- SetLastError(0xdeadbeef);
- rc=SystemParametersInfoA( SPI_GETSNAPTODEFBUTTON, 0, &old_b, 0 );
- if (!test_error_msg(rc,"SPI_GETSNAPTODEFBUTTON"))
- return;
-
- for (i=0;i<sizeof(vals)/sizeof(*vals);i++)
- {
- UINT v;
-
- rc=SystemParametersInfoA( SPI_SETSNAPTODEFBUTTON, vals[i], 0,
- SPIF_UPDATEINIFILE | SPIF_SENDCHANGE );
- if (!test_error_msg(rc,"SPI_SETSNAPTODEFBUTTON")) return;
- ok(rc, "%d: rc=%d err=%d\n", i, rc, GetLastError());
- test_change_message( SPI_SETSNAPTODEFBUTTON, 0 );
- test_reg_key_optional( SPI_SETSNAPTODEFBUTTON_REGKEY,
- SPI_SETSNAPTODEFBUTTON_VALNAME,
- vals[i] ? "1" : "0" );
-
- rc=SystemParametersInfoA( SPI_GETSNAPTODEFBUTTON, 0, &v, 0 );
- ok(rc, "%d: rc=%d err=%d\n", i, rc, GetLastError());
- eq( v, vals[i], "SPI_GETSNAPTODEFBUTTON", "%d" );
- }
-
- rc=SystemParametersInfoA( SPI_SETSNAPTODEFBUTTON, old_b, 0, SPIF_UPDATEINIFILE );
- ok(rc, "***warning*** failed to restore the original value: rc=%d err=%d\n", rc, GetLastError());
-}
-
-static void test_SPI_SETMOUSEHOVERWIDTH( void ) /* 99 */
-{
- BOOL rc;
- UINT old_width;
- const UINT vals[]={0,32767};
- unsigned int i;
-
- trace("testing SPI_{GET,SET}MOUSEHOVERWIDTH\n");
- SetLastError(0xdeadbeef);
- rc=SystemParametersInfoA( SPI_GETMOUSEHOVERWIDTH, 0, &old_width, 0 );
- /* SPI_{GET,SET}MOUSEHOVERWIDTH does not seem to be supported on Win9x despite
- * what MSDN states (Verified on Win98SE)
- */
- if (!test_error_msg(rc,"SPI_{GET,SET}MOUSEHOVERWIDTH"))
- return;
-
- for (i=0;i<sizeof(vals)/sizeof(*vals);i++)
- {
- UINT v;
- char buf[10];
-
- rc=SystemParametersInfoA( SPI_SETMOUSEHOVERWIDTH, vals[i], 0,
- SPIF_UPDATEINIFILE | SPIF_SENDCHANGE );
- if (!test_error_msg(rc,"SPI_SETMOUSEHOVERWIDTH")) return;
- ok(rc, "%d: rc=%d err=%d\n", i, rc, GetLastError());
- test_change_message( SPI_SETMOUSEHOVERWIDTH, 0 );
- sprintf( buf, "%d", vals[i] );
- test_reg_key( SPI_SETMOUSEHOVERWIDTH_REGKEY,
- SPI_SETMOUSEHOVERWIDTH_VALNAME, buf );
-
- SystemParametersInfoA( SPI_GETMOUSEHOVERWIDTH, 0, &v, 0 );
- ok(rc, "%d: rc=%d err=%d\n", i, rc, GetLastError());
- eq( v, vals[i], "SPI_{GET,SET}MOUSEHOVERWIDTH", "%d" );
- }
-
- rc=SystemParametersInfoA( SPI_SETMOUSEHOVERWIDTH, old_width, 0,
- SPIF_UPDATEINIFILE );
- ok(rc, "***warning*** failed to restore the original value: rc=%d err=%d\n", rc, GetLastError());
-}
-
-static void test_SPI_SETMOUSEHOVERHEIGHT( void ) /* 101 */
-{
- BOOL rc;
- UINT old_height;
- const UINT vals[]={0,32767};
- unsigned int i;
-
- trace("testing SPI_{GET,SET}MOUSEHOVERHEIGHT\n");
- SetLastError(0xdeadbeef);
- rc=SystemParametersInfoA( SPI_GETMOUSEHOVERHEIGHT, 0, &old_height, 0 );
- /* SPI_{GET,SET}MOUSEHOVERWIDTH does not seem to be supported on Win9x despite
- * what MSDN states (Verified on Win98SE)
- */
- if (!test_error_msg(rc,"SPI_{GET,SET}MOUSEHOVERHEIGHT"))
- return;
-
- for (i=0;i<sizeof(vals)/sizeof(*vals);i++)
- {
- UINT v;
- char buf[10];
-
- rc=SystemParametersInfoA( SPI_SETMOUSEHOVERHEIGHT, vals[i], 0,
- SPIF_UPDATEINIFILE | SPIF_SENDCHANGE );
- if (!test_error_msg(rc,"SPI_SETMOUSEHOVERHEIGHT")) return;
- ok(rc, "%d: rc=%d err=%d\n", i, rc, GetLastError());
- test_change_message( SPI_SETMOUSEHOVERHEIGHT, 0 );
- sprintf( buf, "%d", vals[i] );
- test_reg_key( SPI_SETMOUSEHOVERHEIGHT_REGKEY,
- SPI_SETMOUSEHOVERHEIGHT_VALNAME, buf );
-
- SystemParametersInfoA( SPI_GETMOUSEHOVERHEIGHT, 0, &v, 0 );
- ok(rc, "%d: rc=%d err=%d\n", i, rc, GetLastError());
- eq( v, vals[i], "SPI_{GET,SET}MOUSEHOVERHEIGHT", "%d" );
- }
-
- rc=SystemParametersInfoA( SPI_SETMOUSEHOVERHEIGHT, old_height, 0,
- SPIF_UPDATEINIFILE );
- ok(rc, "***warning*** failed to restore the original value: rc=%d err=%d\n", rc, GetLastError());
-}
-
-static void test_SPI_SETMOUSEHOVERTIME( void ) /* 103 */
-{
- BOOL rc;
- UINT old_time;
-
- /* Windows XP accepts 10 as the minimum hover time. Any value below will be
- * defaulted to a value of 10 automatically.
- */
- const UINT vals[]={10,32767};
- unsigned int i;
-
- trace("testing SPI_{GET,SET}MOUSEHOVERTIME\n");
- SetLastError(0xdeadbeef);
- rc=SystemParametersInfoA( SPI_GETMOUSEHOVERTIME, 0, &old_time, 0 );
- /* SPI_{GET,SET}MOUSEHOVERWIDTH does not seem to be supported on Win9x despite
- * what MSDN states (Verified on Win98SE)
- */
- if (!test_error_msg(rc,"SPI_{GET,SET}MOUSEHOVERTIME"))
- return;
-
- for (i=0;i<sizeof(vals)/sizeof(*vals);i++)
- {
- UINT v;
- char buf[10];
-
- rc=SystemParametersInfoA( SPI_SETMOUSEHOVERTIME, vals[i], 0,
- SPIF_UPDATEINIFILE | SPIF_SENDCHANGE );
- if (!test_error_msg(rc,"SPI_SETMOUSEHOVERTIME")) return;
- ok(rc, "%d: rc=%d err=%d\n", i, rc, GetLastError());
- test_change_message( SPI_SETMOUSEHOVERTIME, 0 );
- sprintf( buf, "%d", vals[i] );
- test_reg_key( SPI_SETMOUSEHOVERTIME_REGKEY,
- SPI_SETMOUSEHOVERTIME_VALNAME, buf );
-
- SystemParametersInfoA( SPI_GETMOUSEHOVERTIME, 0, &v, 0 );
- ok(rc, "%d: rc=%d err=%d\n", i, rc, GetLastError());
- eq( v, vals[i], "SPI_{GET,SET}MOUSEHOVERTIME", "%d" );
- }
-
- rc=SystemParametersInfoA( SPI_SETMOUSEHOVERTIME, old_time, 0,
- SPIF_UPDATEINIFILE );
- ok(rc, "***warning*** failed to restore the original value: rc=%d err=%d\n", rc, GetLastError());
-}
-
-static void test_SPI_SETWHEELSCROLLLINES( void ) /* 105 */
-{
- BOOL rc;
- UINT old_lines;
- const UINT vals[]={0,32767};
- unsigned int i;
-
- trace("testing SPI_{GET,SET}WHEELSCROLLLINES\n");
- SetLastError(0xdeadbeef);
- rc=SystemParametersInfoA( SPI_GETWHEELSCROLLLINES, 0, &old_lines, 0 );
-
- /* SPI_{GET,SET}WHEELSCROLLLINES not supported on Windows 95 */
- if (!test_error_msg(rc,"SPI_{GET,SET}WHEELSCROLLLINES"))
- return;
-
- for (i=0;i<sizeof(vals)/sizeof(*vals);i++)
- {
- UINT v;
- char buf[10];
-
- rc=SystemParametersInfoA( SPI_SETWHEELSCROLLLINES, vals[i], 0,
- SPIF_UPDATEINIFILE | SPIF_SENDCHANGE );
- if (!test_error_msg(rc,"SPI_SETWHEELSCROLLLINES")) return;
- ok(rc, "%d: rc=%d err=%d\n", i, rc, GetLastError());
- test_change_message( SPI_SETWHEELSCROLLLINES, 0 );
- sprintf( buf, "%d", vals[i] );
- test_reg_key( SPI_SETMOUSESCROLLLINES_REGKEY,
- SPI_SETMOUSESCROLLLINES_VALNAME, buf );
-
- SystemParametersInfoA( SPI_GETWHEELSCROLLLINES, 0, &v, 0 );
- ok(rc, "%d: rc=%d err=%d\n", i, rc, GetLastError());
- eq( v, vals[i], "SPI_{GET,SET}WHEELSCROLLLINES", "%d" );
- }
-
- rc=SystemParametersInfoA( SPI_SETWHEELSCROLLLINES, old_lines, 0,
- SPIF_UPDATEINIFILE );
- ok(rc, "***warning*** failed to restore the original value: rc=%d err=%d\n", rc, GetLastError());
-}
-
-static void test_SPI_SETMENUSHOWDELAY( void ) /* 107 */
-{
- BOOL rc;
- UINT old_delay;
- const UINT vals[]={0,32767};
- unsigned int i;
-
- trace("testing SPI_{GET,SET}MENUSHOWDELAY\n");
- SetLastError(0xdeadbeef);
- rc=SystemParametersInfoA( SPI_GETMENUSHOWDELAY, 0, &old_delay, 0 );
-
- /* SPI_{GET,SET}MENUSHOWDELAY not supported on Windows 95 */
- if (!test_error_msg(rc,"SPI_{GET,SET}MENUSHOWDELAY"))
- return;
-
- for (i=0;i<sizeof(vals)/sizeof(*vals);i++)
- {
- UINT v;
- char buf[10];
-
- rc=SystemParametersInfoA( SPI_SETMENUSHOWDELAY, vals[i], 0,
- SPIF_UPDATEINIFILE | SPIF_SENDCHANGE );
- if (!test_error_msg(rc,"SPI_SETMENUSHOWDELAY")) return;
- ok(rc, "%d: rc=%d err=%d\n", i, rc, GetLastError());
- test_change_message( SPI_SETMENUSHOWDELAY, 0 );
- sprintf( buf, "%d", vals[i] );
- test_reg_key( SPI_SETMENUSHOWDELAY_REGKEY,
- SPI_SETMENUSHOWDELAY_VALNAME, buf );
-
- SystemParametersInfoA( SPI_GETMENUSHOWDELAY, 0, &v, 0 );
- ok(rc, "%d: rc=%d err=%d\n", i, rc, GetLastError());
- eq( v, vals[i], "SPI_{GET,SET}MENUSHOWDELAY", "%d" );
- }
-
- rc=SystemParametersInfoA( SPI_SETMENUSHOWDELAY, old_delay, 0,
- SPIF_UPDATEINIFILE );
- ok(rc, "***warning*** failed to restore the original value: rc=%d err=%d\n", rc, GetLastError());
-}
-
-static void test_SPI_SETWHEELSCROLLCHARS( void ) /* 108 */
-{
- BOOL rc;
- UINT old_chars;
- const UINT vals[]={32767,0};
- unsigned int i;
-
- trace("testing SPI_{GET,SET}WHEELSCROLLCHARS\n");
- SetLastError(0xdeadbeef);
- rc=SystemParametersInfoA( SPI_GETWHEELSCROLLCHARS, 0, &old_chars, 0 );
-
- /* SPI_{GET,SET}WHEELSCROLLCHARS not supported on Windows 95 */
- if (!test_error_msg(rc,"SPI_{GET,SET}WHEELSCROLLCHARS"))
- return;
-
- for (i=0;i<sizeof(vals)/sizeof(*vals);i++)
- {
- UINT v;
- char buf[10];
-
- rc=SystemParametersInfoA( SPI_SETWHEELSCROLLCHARS, vals[i], 0,
- SPIF_UPDATEINIFILE | SPIF_SENDCHANGE );
- if (!test_error_msg(rc,"SPI_SETWHEELSCROLLCHARS")) return;
- test_change_message( SPI_SETWHEELSCROLLCHARS, 0 );
- sprintf( buf, "%d", vals[i] );
- test_reg_key( SPI_SETMOUSESCROLLCHARS_REGKEY,
- SPI_SETMOUSESCROLLCHARS_VALNAME, buf );
-
- SystemParametersInfoA( SPI_GETWHEELSCROLLCHARS, 0, &v, 0 );
- ok(rc, "%d: rc=%d err=%d\n", i, rc, GetLastError());
- eq( v, vals[i], "SPI_{GET,SET}WHEELSCROLLCHARS", "%d" );
- }
-
- rc=SystemParametersInfoA( SPI_SETWHEELSCROLLCHARS, old_chars, 0,
- SPIF_UPDATEINIFILE );
- ok(rc, "***warning*** failed to restore the original value: rc=%d err=%d\n", rc, GetLastError());
-}
-
-static void test_SPI_SETWALLPAPER( void ) /* 115 */
-{
- BOOL rc;
- char oldval[260];
- char newval[260];
-
- trace("testing SPI_{GET,SET}DESKWALLPAPER\n");
- SetLastError(0xdeadbeef);
- rc=SystemParametersInfoA(SPI_GETDESKWALLPAPER, 260, oldval, 0);
- /* SPI_{GET,SET}DESKWALLPAPER is completely broken on Win9x and
- * unimplemented on NT4
- */
- if (!test_error_msg(rc,"SPI_{GET,SET}DESKWALLPAPER"))
- return;
-
- strcpy(newval, "");
- rc=SystemParametersInfoA(SPI_SETDESKWALLPAPER, 0, newval, SPIF_UPDATEINIFILE | SPIF_SENDCHANGE);
- if (!test_error_msg(rc,"SPI_SETDESKWALLPAPER")) return;
- ok(rc, "SystemParametersInfoA: rc=%d err=%d\n", rc, GetLastError());
- test_change_message(SPI_SETDESKWALLPAPER, 0);
-
- rc=SystemParametersInfoA(SPI_SETDESKWALLPAPER, 0, oldval, SPIF_UPDATEINIFILE);
- ok(rc, "***warning*** failed to restore the original value: rc=%d err=%d\n", rc, GetLastError());
-
- test_reg_key(SPI_SETDESKWALLPAPER_REGKEY, SPI_SETDESKWALLPAPER_VALNAME, oldval);
-}
-
-static void test_WM_DISPLAYCHANGE(void)
-{
- DEVMODEA mode, startmode;
- int start_bpp, last_set_bpp = 0;
- int test_bpps[] = {8, 16, 24, 32}, i;
- LONG change_ret;
- DWORD wait_ret;
-
- if (!pChangeDisplaySettingsExA)
- {
- win_skip("ChangeDisplaySettingsExA is not available\n");
- return;
- }
-
- displaychange_test_active = TRUE;
-
- memset(&startmode, 0, sizeof(startmode));
- startmode.dmSize = sizeof(startmode);
- EnumDisplaySettingsA(NULL, ENUM_CURRENT_SETTINGS, &startmode);
- start_bpp = startmode.dmBitsPerPel;
-
- displaychange_sem = CreateSemaphoreW(NULL, 0, 1, NULL);
-
- for(i = 0; i < sizeof(test_bpps)/sizeof(test_bpps[0]); i++) {
- last_bpp = -1;
-
- memset(&mode, 0, sizeof(mode));
- mode.dmSize = sizeof(mode);
- mode.dmFields = DM_BITSPERPEL | DM_PELSWIDTH | DM_PELSHEIGHT;
- mode.dmBitsPerPel = test_bpps[i];
- mode.dmPelsWidth = GetSystemMetrics(SM_CXSCREEN);
- mode.dmPelsHeight = GetSystemMetrics(SM_CYSCREEN);
-
- change_counter = 0; /* This sends a SETTINGSCHANGE message as well in which we aren't interested */
- displaychange_ok = TRUE;
- change_ret = pChangeDisplaySettingsExA(NULL, &mode, NULL, 0, NULL);
- /* Wait quite long for the message, screen setting changes can take some time */
- if(change_ret == DISP_CHANGE_SUCCESSFUL) {
- wait_ret = WaitForSingleObject(displaychange_sem, 10000);
- /* we may not get a notification if nothing changed */
- if (wait_ret == WAIT_TIMEOUT && !last_set_bpp && start_bpp == test_bpps[i])
- continue;
- ok(wait_ret == WAIT_OBJECT_0, "Waiting for the WM_DISPLAYCHANGE message timed out\n");
- }
- displaychange_ok = FALSE;
-
- if(change_ret != DISP_CHANGE_SUCCESSFUL) {
- skip("Setting depth %d failed(ret = %d)\n", test_bpps[i], change_ret);
- ok(last_bpp == -1, "WM_DISPLAYCHANGE was sent with wParam %d despite mode change failure\n", last_bpp);
- continue;
- }
-
- todo_wine_if(start_bpp != test_bpps[i]) {
- ok(last_bpp == test_bpps[i], "Set bpp %d, but WM_DISPLAYCHANGE reported bpp %d\n", test_bpps[i], last_bpp);
- }
- last_set_bpp = test_bpps[i];
- }
-
- if(start_bpp != last_set_bpp && last_set_bpp != 0) {
- memset(&mode, 0, sizeof(mode));
- mode.dmSize = sizeof(mode);
- mode.dmFields = DM_BITSPERPEL | DM_PELSWIDTH | DM_PELSHEIGHT;
- mode.dmBitsPerPel = start_bpp;
- mode.dmPelsWidth = GetSystemMetrics(SM_CXSCREEN);
- mode.dmPelsHeight = GetSystemMetrics(SM_CYSCREEN);
-
- displaychange_ok = TRUE;
- change_ret = pChangeDisplaySettingsExA(NULL, &mode, NULL, 0, NULL);
- WaitForSingleObject(displaychange_sem, 10000);
- displaychange_ok = FALSE;
- CloseHandle(displaychange_sem);
- displaychange_sem = 0;
- }
-
- displaychange_test_active = FALSE;
-}
-
-/*
- * Registry entries for the system parameters.
- * Names are created by 'SET' flags names.
- * We assume that corresponding 'GET' entries use the same registry keys.
- */
-static DWORD WINAPI SysParamsThreadFunc( LPVOID lpParam )
-{
- test_SPI_SETBEEP(); /* 1 */
- test_SPI_SETMOUSE(); /* 4 */
- test_SPI_SETBORDER(); /* 6 */
- test_SPI_SETKEYBOARDSPEED(); /* 10 */
- test_SPI_ICONHORIZONTALSPACING(); /* 13 */
- test_SPI_SETSCREENSAVETIMEOUT(); /* 14 */
- test_SPI_SETSCREENSAVEACTIVE(); /* 17 */
- test_SPI_SETGRIDGRANULARITY(); /* 19 */
- test_SPI_SETKEYBOARDDELAY(); /* 23 */
- test_SPI_ICONVERTICALSPACING(); /* 24 */
- test_SPI_SETICONTITLEWRAP(); /* 26 */
- test_SPI_SETMENUDROPALIGNMENT(); /* 28 */
- test_SPI_SETDOUBLECLKWIDTH(); /* 29 */
- test_SPI_SETDOUBLECLKHEIGHT(); /* 30 */
- test_SPI_SETDOUBLECLICKTIME(); /* 32 */
- test_SPI_SETMOUSEBUTTONSWAP(); /* 33 */
- test_SPI_SETFASTTASKSWITCH(); /* 36 */
- test_SPI_SETDRAGFULLWINDOWS(); /* 37 */
- /* test_WM_DISPLAYCHANGE seems to be somewhat buggy on
- * some versions of Windows (Vista, Win2k8, Win7B) in that
- * not all metrics are properly restored. Problems are
- * SM_CXMAXTRACK, SM_CYMAXTRACK
- * Fortunately setting the Non-Client metrics like in
- * test_SPI_SETNONCLIENTMETRICS will correct this. That is why
- * we do the DISPLAY change now... */
- test_WM_DISPLAYCHANGE();
- test_SPI_SETNONCLIENTMETRICS(); /* 42 */
- test_SPI_SETMINIMIZEDMETRICS(); /* 44 */
- test_SPI_SETICONMETRICS(); /* 46 */
- test_SPI_SETWORKAREA(); /* 47 */
- test_SPI_SETSHOWSOUNDS(); /* 57 */
- test_SPI_SETKEYBOARDPREF(); /* 69 */
- test_SPI_SETSCREENREADER(); /* 71 */
- test_SPI_SETFONTSMOOTHING(); /* 75 */
- test_SPI_SETLOWPOWERACTIVE(); /* 85 */
- test_SPI_SETPOWEROFFACTIVE(); /* 86 */
- test_SPI_SETSNAPTODEFBUTTON(); /* 95 */
- test_SPI_SETMOUSEHOVERWIDTH(); /* 99 */
- test_SPI_SETMOUSEHOVERHEIGHT(); /* 101 */
- test_SPI_SETMOUSEHOVERTIME(); /* 103 */
- test_SPI_SETWHEELSCROLLLINES(); /* 105 */
- test_SPI_SETMENUSHOWDELAY(); /* 107 */
- test_SPI_SETWHEELSCROLLCHARS(); /* 108 */
- test_SPI_SETWALLPAPER(); /* 115 */
-
-
- SendMessageA( ghTestWnd, WM_DESTROY, 0, 0 );
- return 0;
-}
-
-/* test calculation of GetSystemMetrics values (mostly) from non client metrics,
- * icon metrics and minimized metrics.
- */
-
-/* copied from wine's GdiGetCharDimensions, which is not available on most
- * windows versions */
-static LONG _GdiGetCharDimensions(HDC hdc, LPTEXTMETRICA lptm, LONG *height)
-{
- SIZE sz;
- static const CHAR alphabet[] = {
- 'a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q',
- 'r','s','t','u','v','w','x','y','z','A','B','C','D','E','F','G','H',
- 'I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z',0};
-
- if(lptm && !GetTextMetricsA(hdc, lptm)) return 0;
-
- if(!GetTextExtentPointA(hdc, alphabet, 52, &sz)) return 0;
-
- if (height) *height = sz.cy;
- return (sz.cx / 26 + 1) / 2;
-}
-
-/* get text metrics and/or "average" char width of the specified logfont
- * for the specified dc */
-static void get_text_metr_size( HDC hdc, LOGFONTA *plf, TEXTMETRICA * ptm, UINT *psz)
-{
- HFONT hfont, hfontsav;
- TEXTMETRICA tm;
- if( !ptm) ptm = &tm;
- hfont = CreateFontIndirectA( plf);
- if( !hfont || ( hfontsav = SelectObject( hdc, hfont)) == NULL ) {
- ptm->tmHeight = -1;
- if( psz) *psz = 10;
- if( hfont) DeleteObject( hfont);
- return;
- }
- GetTextMetricsA( hdc, ptm);
- if( psz)
- if( !(*psz = _GdiGetCharDimensions( hdc, ptm, NULL)))
- *psz = 10;
- SelectObject( hdc, hfontsav);
- DeleteObject( hfont);
-}
-
-static int gsm_error_ctr;
-
-#define ok_gsm( i, e)\
-{\
- int exp = (e);\
- int act = GetSystemMetrics( (i));\
- if( exp != act) gsm_error_ctr++;\
- ok( !( exp != act),"GetSystemMetrics(%s): expected %d actual %d\n", #i, exp,act);\
-}
-#define ok_gsm_2( i, e1, e2)\
-{\
- int exp1 = (e1);\
- int exp2 = (e2);\
- int act = GetSystemMetrics( (i));\
- if( exp1 != act && exp2 != act) gsm_error_ctr++;\
- ok( !( exp1 != act && exp2 != act), "GetSystemMetrics(%s): expected %d or %d actual %d\n", #i, exp1, exp2, act);\
-}
-#define ok_gsm_3( i, e1, e2, e3)\
-{\
- int exp1 = (e1);\
- int exp2 = (e2);\
- int exp3 = (e3);\
- int act = GetSystemMetrics( (i));\
- if( exp1 != act && exp2 != act && exp3 != act) gsm_error_ctr++;\
- ok( !( exp1 != act && exp2 != act && exp3 != act),"GetSystemMetrics(%s): expected %d or %d or %d actual %d\n", #i, exp1, exp2, exp3, act);\
-}
-
-static INT CALLBACK enum_all_fonts_proc(const LOGFONTA *elf, const TEXTMETRICA *ntm, DWORD type, LPARAM lparam)
-{
- return lstrcmpiA(elf->lfFaceName, (const char *)lparam);
-}
-
-static BOOL is_font_enumerated(const char *name)
-{
- HDC hdc = CreateCompatibleDC(0);
- BOOL ret = FALSE;
-
- if (!EnumFontFamiliesA(hdc, NULL, enum_all_fonts_proc, (LPARAM)name))
- ret = TRUE;
-
- DeleteDC(hdc);
- return ret;
-}
-
-static void test_GetSystemMetrics( void)
-{
- TEXTMETRICA tmMenuFont;
- UINT IconSpacing, IconVerticalSpacing;
- BOOL rc;
-
- HDC hdc = CreateICA( "Display", 0, 0, 0);
- UINT avcwCaption;
- INT CaptionWidthfromreg, smicon, broken_val;
- MINIMIZEDMETRICS minim;
- NONCLIENTMETRICSA ncm;
- SIZE screen;
-
- assert(sizeof(ncm) == 344);
-
- ncm.cbSize = FIELD_OFFSET(NONCLIENTMETRICSA, iPaddedBorderWidth);
- rc = SystemParametersInfoA(SPI_GETNONCLIENTMETRICS, 0, &ncm, 0);
- ok(rc, "SystemParametersInfoA failed\n");
-
- ncm.cbSize = FIELD_OFFSET(NONCLIENTMETRICSA, iPaddedBorderWidth) - 1;
- rc = SystemParametersInfoA(SPI_GETNONCLIENTMETRICS, 0, &ncm, 0);
- ok(!rc, "SystemParametersInfoA should fail\n");
-
- ncm.cbSize = FIELD_OFFSET(NONCLIENTMETRICSA, iPaddedBorderWidth) + 1;
- SetLastError(0xdeadbeef);
- rc = SystemParametersInfoA(SPI_GETNONCLIENTMETRICS, 0, &ncm, 0);
- ok(!rc, "SystemParametersInfoA should fail\n");
-
- ncm.cbSize = sizeof(ncm); /* Vista added padding */
- SetLastError(0xdeadbeef);
- rc = SystemParametersInfoA(SPI_GETNONCLIENTMETRICS, 0, &ncm, 0);
- ok(rc || broken(!rc) /* before Vista */, "SystemParametersInfoA failed\n");
-
- minim.cbSize = sizeof( minim);
- ncm.cbSize = FIELD_OFFSET(NONCLIENTMETRICSA, iPaddedBorderWidth);
- SystemParametersInfoA( SPI_GETMINIMIZEDMETRICS, 0, &minim, 0);
- rc = SystemParametersInfoA( SPI_GETNONCLIENTMETRICS, 0, &ncm, 0);
- if( !rc) {
- win_skip("SPI_GETNONCLIENTMETRICS is not available\n");
- return;
- }
-
- ok(is_font_enumerated(ncm.lfCaptionFont.lfFaceName), "font %s should be enumerated\n", ncm.lfCaptionFont.lfFaceName);
- ok(is_font_enumerated(ncm.lfSmCaptionFont.lfFaceName), "font %s should be enumerated\n", ncm.lfSmCaptionFont.lfFaceName);
- ok(is_font_enumerated(ncm.lfMenuFont.lfFaceName), "font %s should be enumerated\n", ncm.lfMenuFont.lfFaceName);
- ok(is_font_enumerated(ncm.lfStatusFont.lfFaceName), "font %s should be enumerated\n", ncm.lfStatusFont.lfFaceName);
- ok(is_font_enumerated(ncm.lfMessageFont.lfFaceName), "font %s should be enumerated\n", ncm.lfMessageFont.lfFaceName);
-
- /* CaptionWidth from the registry may have different value of iCaptionWidth
- * from the non client metrics (observed on WinXP) */
- CaptionWidthfromreg = metricfromreg(
- "Control Panel\\Desktop\\WindowMetrics","CaptionWidth", dpi);
- get_text_metr_size( hdc, &ncm.lfMenuFont, &tmMenuFont, NULL);
- get_text_metr_size( hdc, &ncm.lfCaptionFont, NULL, &avcwCaption);
- /* FIXME: use icon metric */
- if( !SystemParametersInfoA( SPI_ICONVERTICALSPACING, 0, &IconVerticalSpacing, 0))
- IconVerticalSpacing = 0;
- if( !SystemParametersInfoA( SPI_ICONHORIZONTALSPACING, 0, &IconSpacing, 0 ))
- IconSpacing = 0;
- /* reset error counters */
- gsm_error_ctr = 0;
-
- /* the tests: */
-
- /* SM_CXSCREEN, cannot test these two */
- /* SM_CYSCREEN */
- ok_gsm( SM_CXVSCROLL, ncm.iScrollWidth);
- ok_gsm( SM_CYHSCROLL, ncm.iScrollWidth);
- ok_gsm( SM_CYCAPTION, ncm.iCaptionHeight+1);
- ok_gsm( SM_CXBORDER, 1);
- ok_gsm( SM_CYBORDER, 1);
- ok_gsm( SM_CXDLGFRAME, 3);
- ok_gsm( SM_CYDLGFRAME, 3);
- ok_gsm( SM_CYVTHUMB, ncm.iScrollHeight);
- ok_gsm( SM_CXHTHUMB, ncm.iScrollHeight);
- /* These don't depend on the Shell Icon Size registry value */
- ok_gsm( SM_CXICON, MulDiv( 32, dpi, USER_DEFAULT_SCREEN_DPI ) );
- ok_gsm( SM_CYICON, MulDiv( 32, dpi, USER_DEFAULT_SCREEN_DPI ) );
- /* SM_CXCURSOR */
- /* SM_CYCURSOR */
- ok_gsm( SM_CYMENU, ncm.iMenuHeight + 1);
- ok_gsm( SM_CXFULLSCREEN,
- GetSystemMetrics( SM_CXMAXIMIZED) - 2 * GetSystemMetrics( SM_CXFRAME));
- ok_gsm( SM_CYFULLSCREEN,
- GetSystemMetrics( SM_CYMAXIMIZED) - GetSystemMetrics( SM_CYMIN));
- /* SM_CYKANJIWINDOW */
- /* SM_MOUSEPRESENT */
- ok_gsm( SM_CYVSCROLL, ncm.iScrollHeight);
- ok_gsm( SM_CXHSCROLL, ncm.iScrollHeight);
- /* SM_DEBUG */
- /* SM_SWAPBUTTON */
- /* SM_RESERVED1 */
- /* SM_RESERVED2 */
- /* SM_RESERVED3 */
- /* SM_RESERVED4 */
- ok_gsm( SM_CXMIN, 3 * max( CaptionWidthfromreg >= 0 ? CaptionWidthfromreg : ncm.iCaptionWidth, 8) +
- GetSystemMetrics( SM_CYSIZE) + 4 + 4 * avcwCaption + 2 * GetSystemMetrics( SM_CXFRAME));
- ok_gsm( SM_CYMIN, GetSystemMetrics( SM_CYCAPTION) +
- 2 * GetSystemMetrics( SM_CYFRAME));
- ok_gsm_2( SM_CXSIZE,
- ncm.iCaptionWidth, /* classic/standard windows style */
- GetSystemMetrics( SM_CYCAPTION) - 1 /* WinXP style */
- );
- ok_gsm( SM_CYSIZE, ncm.iCaptionHeight);
- ok_gsm( SM_CXFRAME, ncm.iBorderWidth + 3);
- ok_gsm( SM_CYFRAME, ncm.iBorderWidth + 3);
- ok_gsm( SM_CXMINTRACK, GetSystemMetrics( SM_CXMIN));
- ok_gsm( SM_CYMINTRACK, GetSystemMetrics( SM_CYMIN));
- /* SM_CXDOUBLECLK */
- /* SM_CYDOUBLECLK */
- if( IconSpacing) ok_gsm( SM_CXICONSPACING, IconSpacing);
- if( IconVerticalSpacing) ok_gsm( SM_CYICONSPACING, IconVerticalSpacing);
- /* SM_MENUDROPALIGNMENT */
- /* SM_PENWINDOWS */
- /* SM_DBCSENABLED */
- /* SM_CMOUSEBUTTONS */
- /* SM_SECURE */
- ok_gsm( SM_CXEDGE, 2);
- ok_gsm( SM_CYEDGE, 2);
- /* sign-extension for iHorzGap/iVertGap is broken on Win9x */
- ok_gsm( SM_CXMINSPACING, GetSystemMetrics( SM_CXMINIMIZED) + (short)minim.iHorzGap );
- ok_gsm( SM_CYMINSPACING, GetSystemMetrics( SM_CYMINIMIZED) + (short)minim.iVertGap );
-
- smicon = MulDiv( 16, dpi, USER_DEFAULT_SCREEN_DPI );
- if (!pIsProcessDPIAware || pIsProcessDPIAware())
- smicon = max( min( smicon, CaptionWidthfromreg - 2), 4 ) & ~1;
- todo_wine_if( real_dpi == dpi && smicon != (MulDiv( 16, dpi, USER_DEFAULT_SCREEN_DPI) & ~1) )
- {
- broken_val = (min( ncm.iCaptionHeight, CaptionWidthfromreg ) - 2) & ~1;
- broken_val = min( broken_val, 20 );
-
- if (smicon == 4)
- {
- ok_gsm_2( SM_CXSMICON, smicon, 6 );
- ok_gsm_2( SM_CYSMICON, smicon, 6 );
- }
- else if (smicon < broken_val)
- {
- ok_gsm_2( SM_CXSMICON, smicon, broken_val );
- ok_gsm_2( SM_CYSMICON, smicon, broken_val );
- }
- else
- {
- ok_gsm( SM_CXSMICON, smicon );
- ok_gsm( SM_CYSMICON, smicon );
- }
- }
-
- ok_gsm( SM_CYSMCAPTION, ncm.iSmCaptionHeight + 1);
- ok_gsm_3( SM_CXSMSIZE,
- ncm.iSmCaptionWidth, /* classic/standard windows style */
- GetSystemMetrics( SM_CYSMCAPTION) - 1, /* WinXP style */
- smcxsmsize /* winXP seems to cache this value: setnonclientmetric
- does not change it */
- );
- ok_gsm( SM_CYSMSIZE, GetSystemMetrics( SM_CYSMCAPTION) - 1);
- ok_gsm( SM_CXMENUSIZE, ncm.iMenuWidth);
- ok_gsm( SM_CYMENUSIZE, ncm.iMenuHeight);
- /* SM_ARRANGE */
- ok_gsm( SM_CXMINIMIZED, minim.iWidth + 6);
- ok_gsm( SM_CYMINIMIZED, GetSystemMetrics( SM_CYCAPTION) + 5);
- screen.cx = GetSystemMetrics( SM_CXVIRTUALSCREEN );
- screen.cy = GetSystemMetrics( SM_CYVIRTUALSCREEN );
- if (!screen.cx || !screen.cy) /* not supported on NT4 */
- {
- screen.cx = GetSystemMetrics( SM_CXSCREEN );
- screen.cy = GetSystemMetrics( SM_CYSCREEN );
- }
- ok_gsm_3( SM_CXMAXTRACK, screen.cx + 4 + 2 * GetSystemMetrics(SM_CXFRAME),
- screen.cx - 4 + 2 * GetSystemMetrics(SM_CXFRAME), /* Vista */
- screen.cx + 2 * GetSystemMetrics(SM_CXFRAME)); /* Win8 */
- ok_gsm_3( SM_CYMAXTRACK, screen.cy + 4 + 2 * GetSystemMetrics(SM_CYFRAME),
- screen.cy - 4 + 2 * GetSystemMetrics(SM_CYFRAME), /* Vista */
- screen.cy + 2 * GetSystemMetrics(SM_CYFRAME)); /* Win8 */
- /* the next two cannot really be tested as they depend on (application)
- * toolbars */
- /* SM_CXMAXIMIZED */
- /* SM_CYMAXIMIZED */
- /* SM_NETWORK */
- /* */
- /* */
- /* */
- /* SM_CLEANBOOT */
- /* SM_CXDRAG */
- /* SM_CYDRAG */
- /* SM_SHOWSOUNDS */
- ok_gsm( SM_CXMENUCHECK,
- ((tmMenuFont.tmHeight + tmMenuFont.tmExternalLeading+1)/2)*2-1);
- ok_gsm( SM_CYMENUCHECK,
- ((tmMenuFont.tmHeight + tmMenuFont.tmExternalLeading+1)/2)*2-1);
- /* SM_SLOWMACHINE */
- /* SM_MIDEASTENABLED */
- /* SM_MOUSEWHEELPRESENT */
- /* SM_XVIRTUALSCREEN */
- /* SM_YVIRTUALSCREEN */
- /* SM_CXVIRTUALSCREEN */
- /* SM_CYVIRTUALSCREEN */
- /* SM_CMONITORS */
- /* SM_SAMEDISPLAYFORMAT */
- /* SM_IMMENABLED */
- /* SM_CXFOCUSBORDER */
- /* SM_CYFOCUSBORDER */
- /* SM_TABLETPC */
- /* SM_MEDIACENTER */
- /* SM_CMETRICS */
- /* end of tests */
- if( gsm_error_ctr ) { /* if any errors where found */
- trace( "BorderWidth %d CaptionWidth %d CaptionHeight %d IconSpacing %d IconVerticalSpacing %d\n",
- ncm.iBorderWidth, ncm.iCaptionWidth, ncm.iCaptionHeight, IconSpacing, IconVerticalSpacing);
- trace( "MenuHeight %d MenuWidth %d ScrollHeight %d ScrollWidth %d SmCaptionHeight %d SmCaptionWidth %d\n",
- ncm.iMenuHeight, ncm.iMenuWidth, ncm.iScrollHeight, ncm.iScrollWidth, ncm.iSmCaptionHeight, ncm.iSmCaptionWidth);
- trace( "Captionfontchar width %d MenuFont %d,%d CaptionWidth from registry: %d screen %d,%d\n",
- avcwCaption, tmMenuFont.tmHeight, tmMenuFont.tmExternalLeading, CaptionWidthfromreg, screen.cx, screen.cy);
- }
- ReleaseDC( 0, hdc);
-}
-
-static void test_EnumDisplaySettings(void)
-{
- DEVMODEA devmode;
- DWORD val;
- HDC hdc;
- DWORD num;
-
- memset(&devmode, 0, sizeof(devmode));
- /* Win95 doesn't handle ENUM_CURRENT_SETTINGS correctly */
- EnumDisplaySettingsA(NULL, ENUM_CURRENT_SETTINGS, &devmode);
-
- hdc = GetDC(0);
- val = GetDeviceCaps(hdc, BITSPIXEL);
- ok(devmode.dmBitsPerPel == val ||
- broken(devmode.dmDeviceName[0] == 0), /* Win95 */
- "GetDeviceCaps(BITSPIXEL) returned %d, EnumDisplaySettings returned %d\n",
- val, devmode.dmBitsPerPel);
-
- val = GetDeviceCaps(hdc, NUMCOLORS);
- if(devmode.dmBitsPerPel <= 8) {
- ok(val == 256, "Screen bpp is %d, NUMCOLORS returned %d\n", devmode.dmBitsPerPel, val);
- } else {
- ok(val == -1, "Screen bpp is %d, NUMCOLORS returned %d\n", devmode.dmBitsPerPel, val);
- }
-
- ReleaseDC(0, hdc);
-
- num = 1;
- while (1) {
- SetLastError (0xdeadbeef);
- if (!EnumDisplaySettingsA(NULL, num, &devmode)) {
- DWORD le = GetLastError();
- ok(le == ERROR_NO_MORE_FILES ||
- le == ERROR_MOD_NOT_FOUND /* Win8 */ ||
- le == 0xdeadbeef, /* XP, 2003 */
- "Expected ERROR_NO_MORE_FILES, ERROR_MOD_NOT_FOUND or 0xdeadbeef, got %d for %d\n", le, num);
- break;
- }
- num++;
- }
-}
-
-static void test_GetSysColorBrush(void)
-{
- HBRUSH hbr;
-
- SetLastError(0xdeadbeef);
- hbr = GetSysColorBrush(-1);
- ok(hbr == NULL, "Expected NULL brush\n");
- ok(GetLastError() == 0xdeadbeef, "Expected last error not set, got %x\n", GetLastError());
- /* greater than max index */
- hbr = GetSysColorBrush(COLOR_MENUBAR);
- if (hbr)
- {
- SetLastError(0xdeadbeef);
- hbr = GetSysColorBrush(COLOR_MENUBAR + 1);
- ok(hbr == NULL, "Expected NULL brush\n");
- ok(GetLastError() == 0xdeadbeef, "Expected last error not set, got %x\n", GetLastError());
- }
- else
- win_skip("COLOR_MENUBAR unsupported\n");
-}
-
-static void test_dpi_aware(void)
-{
- BOOL ret;
-
- if (!pIsProcessDPIAware)
- {
- win_skip("IsProcessDPIAware not available\n");
- return;
- }
-
- ret = pSetProcessDPIAware();
- ok(ret, "got %d\n", ret);
-
- ret = pIsProcessDPIAware();
- ok(ret, "got %d\n", ret);
-
- dpi = real_dpi;
- test_GetSystemMetrics();
-}
-
-static void test_GetAutoRotationState(void)
-{
- AR_STATE state;
- BOOL ret;
-
- if (!pGetAutoRotationState)
- {
- win_skip("GetAutoRotationState not supported\n");
- return;
- }
-
- SetLastError(0xdeadbeef);
- ret = pGetAutoRotationState(NULL);
- ok(!ret, "Expected GetAutoRotationState to fail\n");
- ok(GetLastError() == ERROR_INVALID_PARAMETER, "Expected ERROR_INVALID_PARAMETER, got %d\n", GetLastError());
-
- state = 0;
- ret = pGetAutoRotationState(&state);
- ok(ret, "Expected GetAutoRotationState to succeed, error %d\n", GetLastError());
- ok((state & AR_NOSENSOR) != 0, "Expected AR_NOSENSOR, got %d\n", state);
-}
-
-START_TEST(sysparams)
-{
- int argc;
- char** argv;
- WNDCLASSA wc;
- MSG msg;
- HANDLE hThread;
- DWORD dwThreadId;
- HANDLE hInstance, hdll;
-
- hdll = GetModuleHandleA("user32.dll");
- pChangeDisplaySettingsExA = (void*)GetProcAddress(hdll, "ChangeDisplaySettingsExA");
- pIsProcessDPIAware = (void*)GetProcAddress(hdll, "IsProcessDPIAware");
- pSetProcessDPIAware = (void*)GetProcAddress(hdll, "SetProcessDPIAware");
- pGetAutoRotationState = (void*)GetProcAddress(hdll, "GetAutoRotationState");
-
- hInstance = GetModuleHandleA( NULL );
- hdc = GetDC(0);
- dpi = GetDeviceCaps( hdc, LOGPIXELSY);
- real_dpi = get_real_dpi();
- trace("dpi %d real_dpi %d\n", dpi, real_dpi);
- iswin9x = GetVersion() & 0x80000000;
-
- /* This test requires interactivity, if we don't have it, give up */
- if (!SystemParametersInfoA( SPI_SETBEEP, TRUE, 0, SPIF_UPDATEINIFILE | SPIF_SENDCHANGE ) &&
- GetLastError()==ERROR_REQUIRES_INTERACTIVE_WINDOWSTATION) return;
-
- argc = winetest_get_mainargs(&argv);
- strict=(argc >= 3 && strcmp(argv[2],"strict")==0);
- trace("strict=%d\n",strict);
-
- trace("testing GetSystemMetrics with your current desktop settings\n");
- test_GetSystemMetrics( );
- trace("testing EnumDisplaySettings vs GetDeviceCaps\n");
- test_EnumDisplaySettings( );
- test_GetSysColorBrush( );
- test_GetAutoRotationState( );
-
- change_counter = 0;
- change_last_param = 0;
-
- wc.lpszClassName = "SysParamsTestClass";
- wc.lpfnWndProc = SysParamsTestWndProc;
- wc.style = CS_OWNDC | CS_VREDRAW | CS_HREDRAW;
- wc.hInstance = hInstance;
- wc.hIcon = LoadIconA( 0, (LPCSTR)IDI_APPLICATION );
- wc.hCursor = LoadCursorA( 0, (LPCSTR)IDC_ARROW );
- wc.hbrBackground = (HBRUSH)( COLOR_WINDOW + 1 );
- wc.lpszMenuName = 0;
- wc.cbClsExtra = 0;
- wc.cbWndExtra = 0;
- RegisterClassA( &wc );
-
- ghTestWnd = CreateWindowA( "SysParamsTestClass", "Test System Parameters Application",
- WS_OVERLAPPEDWINDOW, 0, 0, 100, 100, 0, 0, hInstance, NULL );
-
- hThread = CreateThread( NULL, 0, SysParamsThreadFunc, 0, 0, &dwThreadId );
- assert( hThread );
- CloseHandle( hThread );
-
- while( GetMessageA( &msg, 0, 0, 0 )) {
- TranslateMessage( &msg );
- DispatchMessageA( &msg );
- }
- ReleaseDC( 0, hdc);
-
- test_dpi_aware();
-}