From 91770f5973505db3ad103de78336ea7817a08e42 Mon Sep 17 00:00:00 2001 From: Vincent Povirk Date: Tue, 16 Dec 2008 17:09:58 -0600 Subject: [PATCH] user32: move all work-area logic into the user driver --- dlls/user32/driver.c | 13 +++++++++++++ dlls/user32/sysparams.c | 22 ++++++---------------- dlls/user32/user_private.h | 1 + 3 files changed, 20 insertions(+), 16 deletions(-) diff --git a/dlls/user32/driver.c b/dlls/user32/driver.c index 2f20b41..322bcd3 100644 --- a/dlls/user32/driver.c +++ b/dlls/user32/driver.c @@ -104,6 +104,7 @@ static const USER_DRIVER *load_driver(void) GET_USER_FUNC(EnumDisplayMonitors); GET_USER_FUNC(EnumDisplaySettingsEx); GET_USER_FUNC(GetMonitorInfo); + GET_USER_FUNC(SetWorkArea); GET_USER_FUNC(CreateDesktopWindow); GET_USER_FUNC(CreateWindow); GET_USER_FUNC(DestroyWindow); @@ -309,6 +310,11 @@ static BOOL nulldrv_GetMonitorInfo( HMONITOR handle, LPMONITORINFO info ) return FALSE; } +static BOOL nulldrv_SetWorkArea( RECT *rcWork ) +{ + return FALSE; +} + static BOOL nulldrv_CreateDesktopWindow( HWND hwnd ) { return TRUE; @@ -461,6 +467,7 @@ static USER_DRIVER null_driver = nulldrv_EnumDisplayMonitors, nulldrv_EnumDisplaySettingsEx, nulldrv_GetMonitorInfo, + nulldrv_SetWorkArea, /* windowing functions */ nulldrv_CreateDesktopWindow, nulldrv_CreateWindow, @@ -654,6 +661,11 @@ static BOOL loaderdrv_GetMonitorInfo( HMONITOR handle, LPMONITORINFO info ) return load_driver()->pGetMonitorInfo( handle, info ); } +static BOOL loaderdrv_SetWorkArea( RECT *rcWork ) +{ + return load_driver()->pSetWorkArea( rcWork ); +} + static BOOL loaderdrv_CreateDesktopWindow( HWND hwnd ) { return load_driver()->pCreateDesktopWindow( hwnd ); @@ -802,6 +814,7 @@ static USER_DRIVER lazy_load_driver = loaderdrv_EnumDisplayMonitors, loaderdrv_EnumDisplaySettingsEx, loaderdrv_GetMonitorInfo, + loaderdrv_SetWorkArea, /* windowing functions */ loaderdrv_CreateDesktopWindow, loaderdrv_CreateWindow, diff --git a/dlls/user32/sysparams.c b/dlls/user32/sysparams.c index 4e48299..185f470 100644 --- a/dlls/user32/sysparams.c +++ b/dlls/user32/sysparams.c @@ -63,7 +63,6 @@ enum spi_index SPI_SETDOUBLECLICKTIME_IDX, SPI_SETMOUSEBUTTONSWAP_IDX, SPI_SETDRAGFULLWINDOWS_IDX, - SPI_SETWORKAREA_IDX, SPI_SETSHOWSOUNDS_IDX, SPI_SETKEYBOARDPREF_IDX, SPI_SETSCREENREADER_IDX, @@ -293,7 +292,6 @@ static UINT double_click_width = 4; static UINT double_click_height = 4; static UINT double_click_time = 500; static BOOL drag_full_windows = FALSE; -static RECT work_area; static BOOL keyboard_pref = TRUE; static BOOL screen_reader = FALSE; static UINT mouse_hover_width = 4; @@ -1733,9 +1731,7 @@ BOOL WINAPI SystemParametersInfoW( UINT uiAction, UINT uiParam, { if (!pvParam) return FALSE; - spi_idx = SPI_SETWORKAREA_IDX; - CopyRect( &work_area, (RECT *)pvParam ); - spi_loaded[spi_idx] = TRUE; + if (!USER_Driver->pSetWorkArea( (RECT*)pvParam )) return FALSE; break; } @@ -1743,17 +1739,11 @@ BOOL WINAPI SystemParametersInfoW( UINT uiAction, UINT uiParam, { if (!pvParam) return FALSE; - spi_idx = SPI_SETWORKAREA_IDX; - if (!spi_loaded[spi_idx]) - { - SetRect( &work_area, 0, 0, - GetSystemMetrics( SM_CXSCREEN ), - GetSystemMetrics( SM_CYSCREEN ) ); - EnumDisplayMonitors( 0, NULL, enum_monitors, (LPARAM)&work_area ); - spi_loaded[spi_idx] = TRUE; - } - CopyRect( (RECT *)pvParam, &work_area ); - TRACE("work area %s\n", wine_dbgstr_rect( &work_area )); + SetRect( (RECT*)pvParam, 0, 0, + GetSystemMetrics( SM_CXSCREEN ), + GetSystemMetrics( SM_CYSCREEN ) ); + EnumDisplayMonitors( 0, NULL, enum_monitors, (LPARAM)pvParam ); + TRACE("work area %s\n", wine_dbgstr_rect( (RECT*)pvParam )); break; } diff --git a/dlls/user32/user_private.h b/dlls/user32/user_private.h index f25f258..1c8d8e7 100644 --- a/dlls/user32/user_private.h +++ b/dlls/user32/user_private.h @@ -140,6 +140,7 @@ typedef struct tagUSER_DRIVER { BOOL (*pEnumDisplayMonitors)(HDC,LPRECT,MONITORENUMPROC,LPARAM); BOOL (*pEnumDisplaySettingsEx)(LPCWSTR,DWORD,LPDEVMODEW,DWORD); BOOL (*pGetMonitorInfo)(HMONITOR,MONITORINFO*); + BOOL (*pSetWorkArea)(RECT*); /* windowing functions */ BOOL (*pCreateDesktopWindow)(HWND); BOOL (*pCreateWindow)(HWND); -- 1.5.6.3