Commit ebbf99ab authored by Rein Klazes's avatar Rein Klazes Committed by Alexandre Julliard

user32/tests: In sysparams fix another case where a test changes a users desktop setting.

Made several tests pass on NT4 (no SP), Vista and Win2k8.
parent 7bde2792
......@@ -709,11 +709,15 @@ static void test_SPI_SETBORDER( void ) /* 6 */
BOOL rc;
UINT old_border;
NONCLIENTMETRICSA ncmsave;
INT CaptionWidth;
INT CaptionWidth,
PaddedBorderWidth;
ncmsave.cbSize = sizeof( ncmsave);
rc=SystemParametersInfo( SPI_GETNONCLIENTMETRICS, 0, &ncmsave, 0);
ok(rc!=0,"SystemParametersInfoA: rc=%d err=%d\n",rc,GetLastError());
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 */
......@@ -735,8 +739,10 @@ static void test_SPI_SETBORDER( void ) /* 6 */
if (!test_error_msg(rc,"SPI_{GET,SET}BORDER"))
return;
/* FIXME: include new PaddedBorderWidth parameter */
if( old_border != ncmsave.iBorderWidth){
win_skip( "Can not reliable restore border width yet\n");
PaddedBorderWidth = ncmsave.iBorderWidth - old_border;
if( PaddedBorderWidth){
win_skip( "Can not reliable restore border width yet (PaddedBorderWidth = %d)\n",
PaddedBorderWidth);
return;
}
/* This will restore sane values if the test hang previous run. */
......@@ -1395,6 +1401,7 @@ static void test_SPI_SETNONCLIENTMETRICS( void ) /* 44 */
Ncmstart.cbSize = sizeof(NONCLIENTMETRICSA);
trace("testing SPI_{GET,SET}NONCLIENTMETRICS\n");
change_counter = 0;
SetLastError(0xdeadbeef);
rc=SystemParametersInfoA( SPI_GETNONCLIENTMETRICS, sizeof(NONCLIENTMETRICS), &Ncmorig, FALSE );
if (!test_error_msg(rc,"SPI_{GET,SET}NONCLIENTMETRICS"))
......@@ -1448,7 +1455,7 @@ static void test_SPI_SETNONCLIENTMETRICS( void ) /* 44 */
ok(rc!=0,"SystemParametersInfoA: rc=%d err=%d\n",rc,GetLastError());
/* test registry entries */
TEST_NONCLIENTMETRICS_REG( Ncmcur)
/* test the systemm metrics with these settings */
/* 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*/
......@@ -1483,19 +1490,22 @@ static void test_SPI_SETNONCLIENTMETRICS( void ) /* 44 */
"SmCaptionHeight: %d expected %d\n", Ncmcur.iSmCaptionHeight, expect);
ok( Ncmcur.iCaptionWidth == 8 ||
Ncmcur.iCaptionWidth == 12 || /* Vista, W7b */
Ncmcur.iCaptionWidth == Ncmstart.iCaptionWidth, /* with windows XP theme, the value never changes */
"CaptionWidth: %d expected 8\n", Ncmcur.iCaptionWidth);
"CaptionWidth: %d expected 8, 12 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 systemm metrics with these settings */
/* test the system metrics with these settings */
test_GetSystemMetrics();
/* restore */
rc=SystemParametersInfoA( SPI_SETNONCLIENTMETRICS, sizeof(NONCLIENTMETRICS),
&Ncmorig, SPIF_UPDATEINIFILE | SPIF_SENDCHANGE);
test_change_message( SPI_SETNONCLIENTMETRICS, 0 );
ok(rc!=0,"***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 */
......@@ -2414,6 +2424,14 @@ static DWORD WINAPI SysParamsThreadFunc( LPVOID lpParam )
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 corect 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 */
......@@ -2433,7 +2451,6 @@ static DWORD WINAPI SysParamsThreadFunc( LPVOID lpParam )
test_SPI_SETWHEELSCROLLCHARS(); /* 108 */
test_SPI_SETWALLPAPER(); /* 115 */
test_WM_DISPLAYCHANGE();
SendMessageA( ghTestWnd, WM_DESTROY, 0, 0 );
return 0;
......@@ -2514,10 +2531,11 @@ static void test_GetSystemMetrics( void)
{
TEXTMETRICA tmMenuFont;
UINT IconSpacing, IconVerticalSpacing;
BOOL rc;
HDC hdc = CreateIC( "Display", 0, 0, 0);
UINT avcwCaption;
INT CaptionWidth;
INT CaptionWidthfromreg;
MINIMIZEDMETRICS minim;
NONCLIENTMETRICS ncm;
SIZE screen;
......@@ -2525,11 +2543,14 @@ static void test_GetSystemMetrics( void)
minim.cbSize = sizeof( minim);
ncm.cbSize = sizeof( ncm);
SystemParametersInfo( SPI_GETMINIMIZEDMETRICS, 0, &minim, 0);
SystemParametersInfo( SPI_GETNONCLIENTMETRICS, 0, &ncm, 0);
rc = SystemParametersInfo( SPI_GETNONCLIENTMETRICS, 0, &ncm, 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) */
CaptionWidth = metricfromreg(
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);
......@@ -2573,8 +2594,8 @@ static void test_GetSystemMetrics( void)
/* SM_RESERVED2 */
/* SM_RESERVED3 */
/* SM_RESERVED4 */
ok_gsm( SM_CXMIN, 3 * max( CaptionWidth, 8) + GetSystemMetrics( SM_CYSIZE) +
4 + 4 * avcwCaption + 2 * GetSystemMetrics( SM_CXFRAME));
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,
......@@ -2661,8 +2682,8 @@ static void test_GetSystemMetrics( void)
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\n",
avcwCaption, tmMenuFont.tmHeight, tmMenuFont.tmExternalLeading, CaptionWidth);
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);
}
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment