sysparams: SPI_SETICONMETRICS fixes
Rein Klazes
wijn at wanadoo.nl
Sun Nov 13 12:52:47 CST 2005
Hi,
Changelog:
dlls/user sysparams.c
dlls/user/tests sysparams.c
- Fix SysparametersInfoA( SPI_SETICONMETRICS), the A<->W conversion was
rather broken;
- Make the SPI_{G|S}ETICONMETRICS functions more consistent with those
for SPI_ICON{HORIZONTAL|VERTICAL}SPACING, SPI_{G|S}ICONTITLEWRAP and
SPI_{G|S}ICONTITLELOGFONT;
- accordingly extend the corresponding tests.
Rein.
-------------- next part --------------
--- wine/dlls/user/sysparams.c 2005-11-09 09:34:46.000000000 +0100
+++ mywine/dlls/user/sysparams.c 2005-11-13 11:25:49.000000000 +0100
@@ -610,6 +610,14 @@ static BOOL SYSPARAMS_Save( LPCWSTR lpRe
(strlenW(lpValue) + 1)*sizeof(WCHAR), REG_SZ, fWinIni );
}
+/* Convenience function to save logical fonts */
+static BOOL SYSPARAMS_SaveLogFont( LPCWSTR lpRegKey, LPCWSTR lpValName,
+ LPLOGFONTW plf, UINT fWinIni )
+{
+ return SYSPARAMS_SaveRaw( lpRegKey, lpValName, (const BYTE*)plf,
+ sizeof( LOGFONTW), REG_BINARY, fWinIni );
+}
+
static inline HDC get_display_dc(void)
{
@@ -1259,6 +1267,8 @@ BOOL WINAPI SystemParametersInfoW( UINT
SPI_ICONVERTICALSPACING_REGKEY,
SPI_ICONVERTICALSPACING_VALNAME,
(UINT*)&icon_metrics.iVertSpacing, pvParam );
+ if( icon_metrics.iVertSpacing < 32)
+ icon_metrics.iVertSpacing = 32;
}
else
{
@@ -1372,7 +1382,17 @@ BOOL WINAPI SystemParametersInfoW( UINT
&swap_buttons, uiParam, fWinIni );
break;
- WINE_SPI_FIXME(SPI_SETICONTITLELOGFONT); /* 34 */
+ case SPI_SETICONTITLELOGFONT: /* 34 */
+ if( uiParam == sizeof( ICONMETRICSW)) {
+ ret = SYSPARAMS_SaveLogFont( SPI_SETICONTITLELOGFONT_REGKEY,
+ SPI_SETICONTITLELOGFONT_VALNAME, (LOGFONTW *)pvParam, fWinIni);
+ if( ret) {
+ icon_metrics.lfFont = *(LOGFONTW *)pvParam;
+ spi_loaded[SPI_SETICONTITLELOGFONT_IDX] = TRUE;
+ }
+ } else
+ ret = FALSE;
+ break;
case SPI_GETFASTTASKSWITCH: /* 35 */
if (!pvParam) return FALSE;
@@ -1474,9 +1494,28 @@ BOOL WINAPI SystemParametersInfoW( UINT
case SPI_SETICONMETRICS:
{
LPICONMETRICSW lpIcon = pvParam;
- if (lpIcon && lpIcon->cbSize == sizeof(*lpIcon))
- memcpy( &icon_metrics, lpIcon, sizeof(icon_metrics) );
- else
+ if (lpIcon && lpIcon->cbSize == sizeof(*lpIcon)) {
+ ret = set_uint_param( SPI_ICONVERTICALSPACING_IDX,
+ SPI_ICONVERTICALSPACING_REGKEY,
+ SPI_ICONVERTICALSPACING_VALNAME,
+ (UINT*)&icon_metrics.iVertSpacing,
+ lpIcon->iVertSpacing, fWinIni);
+ if( ret) ret = set_uint_param( SPI_ICONHORIZONTALSPACING_IDX,
+ SPI_ICONHORIZONTALSPACING_REGKEY,
+ SPI_ICONHORIZONTALSPACING_VALNAME,
+ (UINT*)&icon_metrics.iHorzSpacing,
+ lpIcon->iHorzSpacing, fWinIni );
+ if( ret) ret = set_bool_param_mirrored( SPI_SETICONTITLEWRAP_IDX,
+ SPI_SETICONTITLEWRAP_REGKEY1, SPI_SETICONTITLEWRAP_REGKEY2,
+ SPI_SETICONTITLEWRAP_VALNAME, &icon_metrics.iTitleWrap,
+ lpIcon->iTitleWrap, fWinIni );
+ if( ret) ret = SYSPARAMS_SaveLogFont( SPI_SETICONTITLELOGFONT_REGKEY,
+ SPI_SETICONTITLELOGFONT_VALNAME, &lpIcon->lfFont, fWinIni);
+ if( ret) {
+ icon_metrics.lfFont = lpIcon->lfFont;
+ spi_loaded[SPI_SETICONTITLELOGFONT_IDX] = TRUE;
+ }
+ } else
ret = FALSE;
break;
}
@@ -2229,23 +2268,20 @@ BOOL WINAPI SystemParametersInfoA( UINT
case SPI_SETICONMETRICS: /* 46 WINVER >= 0x400 */
{
- ICONMETRICSW tmp;
- LPICONMETRICSA lpimA = (LPICONMETRICSA)pvParam;
- if (lpimA && lpimA->cbSize == sizeof(ICONMETRICSA))
- {
- tmp.cbSize = sizeof(ICONMETRICSW);
- ret = SystemParametersInfoW( uiAction, uiParam, &tmp, fuWinIni );
- if (ret)
- {
- lpimA->iHorzSpacing = tmp.iHorzSpacing;
- lpimA->iVertSpacing = tmp.iVertSpacing;
- lpimA->iTitleWrap = tmp.iTitleWrap;
- SYSPARAMS_LogFont32WTo32A( &tmp.lfFont, &lpimA->lfFont );
- }
- }
- else
- ret = FALSE;
- break;
+ ICONMETRICSW tmp;
+ LPICONMETRICSA lpimA = (LPICONMETRICSA)pvParam;
+ if (lpimA && lpimA->cbSize == sizeof(ICONMETRICSA))
+ {
+ tmp.cbSize = sizeof(ICONMETRICSW);
+ tmp.iHorzSpacing = lpimA->iHorzSpacing;
+ tmp.iVertSpacing = lpimA->iVertSpacing;
+ tmp.iTitleWrap = lpimA->iTitleWrap;
+ SYSPARAMS_LogFont32ATo32W( &lpimA->lfFont, &tmp.lfFont);
+ ret = SystemParametersInfoW( uiAction, uiParam, &tmp, fuWinIni );
+ }
+ else
+ ret = FALSE;
+ break;
}
case SPI_GETHIGHCONTRAST: /* 66 WINVER >= 0x400 */
--- wine/dlls/user/tests/sysparams.c 2005-11-09 09:34:48.000000000 +0100
+++ mywine/dlls/user/tests/sysparams.c 2005-11-13 18:38:53.000000000 +0100
@@ -22,6 +22,7 @@
#include <stdarg.h>
#include <stdio.h>
+#undef _WIN32_WINNT
#define _WIN32_WINNT 0x0500 /* For SPI_GETMOUSEHOVERWIDTH and more */
#include "wine/test.h"
@@ -36,6 +37,7 @@
#endif
static int strict;
+static int dpi;
#define eq(received, expected, label, type) \
ok((received) == (expected), "%s: got " type " instead of " type "\n", (label),(received),(expected))
@@ -51,6 +53,12 @@ static int strict;
#define SPI_SETBORDER_VALNAME "BorderWidth"
#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_SETSCREENSAVETIMEOUT_REGKEY "Control Panel\\Desktop"
#define SPI_SETSCREENSAVETIMEOUT_VALNAME "ScreenSaveTimeOut"
#define SPI_SETSCREENSAVEACTIVE_REGKEY "Control Panel\\Desktop"
@@ -547,7 +555,7 @@ static void test_setborder(UINT curr_val
}
if( curr_val) { /* skip if 0, some windows versions return 0 others 1 */
regval = metricfromreg( SPI_SETBORDER_REGKEY, SPI_SETBORDER_VALNAME, dpi);
- ok( regval==curr_val, "wrong value in registry %d, epected %d\n", regval, curr_val);
+ 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;
@@ -648,47 +656,54 @@ static void test_SPI_SETKEYBOARDSPEED( v
ok(rc!=0,"***warning*** failed to restore the original value: rc=%d err=%ld\n",rc,GetLastError());
}
-static void test_SPI_ICONHORIZONTALSPACING( void ) /* 13 */
+/* test_SPI_ICONHORIZONTALSPACING helper */
+static void dotest_spi_iconhorizontalspacing( INT curr_val)
{
BOOL rc;
- INT old_spacing;
- INT spacing;
- INT curr_val;
-
- 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;
+ INT spacing, regval;
+ ICONMETRICSA im;
- /* do not increase the value as it would upset the user's icon layout */
- curr_val = (old_spacing > 32 ? old_spacing-1 : 32);
rc=SystemParametersInfoA( SPI_ICONHORIZONTALSPACING, curr_val, 0,
SPIF_UPDATEINIFILE | SPIF_SENDCHANGE);
ok(rc!=0,"SystemParametersInfoA: rc=%d err=%ld\n",rc,GetLastError());
test_change_message( SPI_ICONHORIZONTALSPACING, 0 );
+ if( curr_val < 32) curr_val = 32;
/* The registry keys depend on the Windows version and the values too
- * => don't test them
+ * 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!=0,"SystemParametersInfoA: rc=%d err=%ld\n",rc,GetLastError());
eq( spacing, curr_val, "ICONHORIZONTALSPACING", "%d");
+ /* and with a system metrics */
eq( GetSystemMetrics( SM_CXICONSPACING ), curr_val, "SM_CXICONSPACING", "%d" );
-
- curr_val = 10;
- rc=SystemParametersInfoA( SPI_ICONHORIZONTALSPACING, curr_val, 0,
- SPIF_UPDATEINIFILE | SPIF_SENDCHANGE);
+ /* and with what SPI_GETICONMETRICS returns */
+ im.cbSize = sizeof(ICONMETRICSA);
+ rc=SystemParametersInfoA( SPI_GETICONMETRICS, sizeof(ICONMETRICSA), &im, FALSE );
ok(rc!=0,"SystemParametersInfoA: rc=%d err=%ld\n",rc,GetLastError());
- curr_val = 32; /*min value*/
- test_change_message( SPI_ICONHORIZONTALSPACING, 0 );
+ eq( im.iHorzSpacing, curr_val, "SPI_GETICONMETRICS", "%d" );
+}
- rc=SystemParametersInfoA( SPI_ICONHORIZONTALSPACING, 0, &spacing, 0 );
- ok(rc!=0,"SystemParametersInfoA: rc=%d err=%ld\n",rc,GetLastError());
- eq( spacing, curr_val, "ICONHORIZONTALSPACING", "%d" );
- eq( GetSystemMetrics( SM_CXICONSPACING ), curr_val, "SM_CXICONSPACING", "%d" );
+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 */
+ dotest_spi_iconhorizontalspacing( old_spacing - 1);
+ dotest_spi_iconhorizontalspacing( 10); /* minimum is 32 */
+ /* restore */
rc=SystemParametersInfoA( SPI_ICONHORIZONTALSPACING, old_spacing, 0, SPIF_UPDATEINIFILE );
ok(rc!=0,"***warning*** failed to restore the original value: rc=%d err=%ld\n",rc,GetLastError());
}
@@ -803,50 +818,60 @@ static void test_SPI_SETKEYBOARDDELAY( v
ok(rc!=0,"***warning*** failed to restore the original value: rc=%d err=%ld\n",rc,GetLastError());
}
-static void test_SPI_ICONVERTICALSPACING( void ) /* 24 */
+
+/* test_SPI_ICONVERTICALSPACING helper */
+static void dotest_spi_iconverticalspacing( INT curr_val)
{
BOOL rc;
- INT old_spacing;
- INT spacing;
- INT curr_val;
-
- 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;
+ INT spacing, regval;
+ ICONMETRICSA im;
- /* do not increase the value as it would upset the user's icon layout */
- curr_val = old_spacing-1;
rc=SystemParametersInfoA( SPI_ICONVERTICALSPACING, curr_val, 0,
SPIF_UPDATEINIFILE | SPIF_SENDCHANGE);
ok(rc!=0,"SystemParametersInfoA: rc=%d err=%ld\n",rc,GetLastError());
test_change_message( SPI_ICONVERTICALSPACING, 0 );
+ if( curr_val < 32) curr_val = 32;
/* The registry keys depend on the Windows version and the values too
- * => don't test them
+ * 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!=0,"SystemParametersInfoA: rc=%d err=%ld\n",rc,GetLastError());
eq( spacing, curr_val, "ICONVERTICALSPACING", "%d" );
+ /* and with a system metrics */
eq( GetSystemMetrics( SM_CYICONSPACING ), curr_val, "SM_CYICONSPACING", "%d" );
-
- curr_val = 10;
- rc=SystemParametersInfoA( SPI_ICONVERTICALSPACING, curr_val, 0,
- SPIF_UPDATEINIFILE | SPIF_SENDCHANGE);
+ /* and with what SPI_GETICONMETRICS returns */
+ im.cbSize = sizeof(ICONMETRICSA);
+ rc=SystemParametersInfoA( SPI_GETICONMETRICS, sizeof(ICONMETRICSA), &im, FALSE );
ok(rc!=0,"SystemParametersInfoA: rc=%d err=%ld\n",rc,GetLastError());
- curr_val = 32; /*min value*/
- test_change_message( SPI_ICONVERTICALSPACING, 0 );
+ eq( im.iVertSpacing, curr_val, "SPI_GETICONMETRICS", "%d" );
+}
- rc=SystemParametersInfoA( SPI_ICONVERTICALSPACING, 0, &spacing, 0 );
- ok(rc!=0,"SystemParametersInfoA: rc=%d err=%ld\n",rc,GetLastError());
- eq( spacing, curr_val, "ICONVERTICALSPACING", "%d" );
- eq( GetSystemMetrics( SM_CYICONSPACING ), curr_val, "SM_CYICONSPACING", "%d" );
+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 */
+ dotest_spi_iconverticalspacing( old_spacing - 1);
+ /* same tests with a value less then the minimum 32 */
+ dotest_spi_iconverticalspacing( 10);
+ /* restore */
rc=SystemParametersInfoA( SPI_ICONVERTICALSPACING, old_spacing, 0,
SPIF_UPDATEINIFILE );
- ok(rc!=0,"***warning*** failed to restore the original value: rc=%d err=%ld\n",rc,GetLastError());
+ ok(rc!=0,"***warning*** failed to restore the original value: rc=%d err=%ld\n",
+ rc,GetLastError());
}
static void test_SPI_SETICONTITLEWRAP( void ) /* 26 */
@@ -855,6 +880,7 @@ static void test_SPI_SETICONTITLEWRAP( v
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
@@ -885,6 +911,11 @@ static void test_SPI_SETICONTITLEWRAP( v
rc=SystemParametersInfoA( SPI_GETICONTITLEWRAP, 0, &v, 0 );
ok(rc!=0,"%d: rc=%d err=%ld\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!=0,"SystemParametersInfoA: rc=%d err=%ld\n",rc,GetLastError());
+ eq( im.iTitleWrap, (BOOL)vals[i], "SPI_GETICONMETRICS", "%d" );
}
rc=SystemParametersInfoA( SPI_SETICONTITLEWRAP, old_b, 0, SPIF_UPDATEINIFILE );
@@ -1196,10 +1227,12 @@ static void test_SPI_SETMINIMIZEDMETRICS
static void test_SPI_SETICONMETRICS( void ) /* 46 */
{
- BOOL rc;
+ 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);
@@ -1211,32 +1244,40 @@ static void test_SPI_SETICONMETRICS( voi
if (!test_error_msg(rc,"SPI_{GET,SET}ICONMETRICS"))
return;
- im_cur.iHorzSpacing = 65;
- im_cur.iVertSpacing = 65;
- im_cur.iTitleWrap = 0;
- im_cur.lfFont.lfHeight = 1;
- im_cur.lfFont.lfWidth = 1;
+ /* 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 = 1;
- im_cur.lfFont.lfItalic = 1;
- im_cur.lfFont.lfStrikeOut = 1;
- im_cur.lfFont.lfUnderline = 1;
- im_cur.lfFont.lfCharSet = 1;
- im_cur.lfFont.lfOutPrecision = 1;
- im_cur.lfFont.lfClipPrecision = 1;
- im_cur.lfFont.lfPitchAndFamily = 1;
- im_cur.lfFont.lfQuality = 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, FALSE );
+ rc=SystemParametersInfoA( SPI_SETICONMETRICS, sizeof(ICONMETRICSA), &im_cur, SPIF_UPDATEINIFILE );
ok(rc!=0,"SystemParametersInfoA: rc=%d err=%ld\n",rc,GetLastError());
rc=SystemParametersInfoA( SPI_GETICONMETRICS, sizeof(ICONMETRICSA), &im_new, FALSE );
ok(rc!=0,"SystemParametersInfoA: rc=%d err=%ld\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", "%ld" );
eq( im_new.lfFont.lfWidth, im_cur.lfFont.lfWidth, "lfWidth", "%ld" );
eq( im_new.lfFont.lfEscapement, im_cur.lfFont.lfEscapement, "lfEscapement", "%ld" );
@@ -1249,13 +1290,36 @@ static void test_SPI_SETICONMETRICS( voi
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" );
-
- rc=SystemParametersInfoA( SPI_SETICONMETRICS, sizeof(ICONMETRICSA), &im_orig, FALSE );
+ /* 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_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!=0,"***warning*** failed to restore the original value: rc=%d err=%ld\n",rc,GetLastError());
rc=SystemParametersInfoA( SPI_GETICONMETRICS, sizeof(ICONMETRICSA), &im_new, FALSE );
@@ -1761,6 +1825,11 @@ START_TEST(sysparams)
DWORD dwThreadId;
HANDLE hInstance = GetModuleHandleA( NULL );
+ HDC hdc = GetDC(0);
+ dpi = GetDeviceCaps( hdc, LOGPIXELSY);
+ ReleaseDC( 0, hdc);
+
+
/* 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;
More information about the wine-patches
mailing list