Alexandre Julliard : user32: Notify the user driver about window extended style changes too.
Alexandre Julliard
julliard at winehq.org
Mon Sep 15 06:53:59 CDT 2008
Module: wine
Branch: master
Commit: 2f1121316868b79bfe01105b6a3814a17ec655d5
URL: http://source.winehq.org/git/wine.git/?a=commit;h=2f1121316868b79bfe01105b6a3814a17ec655d5
Author: Alexandre Julliard <julliard at winehq.org>
Date: Fri Sep 12 14:55:07 2008 +0200
user32: Notify the user driver about window extended style changes too.
---
dlls/user32/driver.c | 6 +++---
dlls/user32/user_private.h | 2 +-
dlls/user32/win.c | 26 ++++++++++++++------------
dlls/winex11.drv/window.c | 15 +++++++--------
dlls/winex11.drv/winex11.drv.spec | 2 +-
5 files changed, 26 insertions(+), 25 deletions(-)
diff --git a/dlls/user32/driver.c b/dlls/user32/driver.c
index c4522eb..38e3c1b 100644
--- a/dlls/user32/driver.c
+++ b/dlls/user32/driver.c
@@ -388,7 +388,7 @@ static void nulldrv_SetWindowIcon( HWND hwnd, UINT type, HICON icon )
{
}
-static void nulldrv_SetWindowStyle( HWND hwnd, DWORD old_style )
+static void nulldrv_SetWindowStyle( HWND hwnd, INT offset, STYLESTRUCT *style )
{
}
@@ -723,9 +723,9 @@ static void loaderdrv_SetWindowIcon( HWND hwnd, UINT type, HICON icon )
load_driver()->pSetWindowIcon( hwnd, type, icon );
}
-static void loaderdrv_SetWindowStyle( HWND hwnd, DWORD old_style )
+static void loaderdrv_SetWindowStyle( HWND hwnd, INT offset, STYLESTRUCT *style )
{
- load_driver()->pSetWindowStyle( hwnd, old_style );
+ load_driver()->pSetWindowStyle( hwnd, offset, style );
}
static void loaderdrv_SetWindowText( HWND hwnd, LPCWSTR text )
diff --git a/dlls/user32/user_private.h b/dlls/user32/user_private.h
index 909686d..baf3475 100644
--- a/dlls/user32/user_private.h
+++ b/dlls/user32/user_private.h
@@ -153,7 +153,7 @@ typedef struct tagUSER_DRIVER {
void (*pSetParent)(HWND,HWND,HWND);
int (*pSetWindowRgn)(HWND,HRGN,BOOL);
void (*pSetWindowIcon)(HWND,UINT,HICON);
- void (*pSetWindowStyle)(HWND,DWORD);
+ void (*pSetWindowStyle)(HWND,INT,STYLESTRUCT*);
void (*pSetWindowText)(HWND,LPCWSTR);
UINT (*pShowWindow)(HWND,INT,RECT*,UINT);
LRESULT (*pSysCommand)(HWND,WPARAM,LPARAM);
diff --git a/dlls/user32/win.c b/dlls/user32/win.c
index 7756ab0..e1faae8 100644
--- a/dlls/user32/win.c
+++ b/dlls/user32/win.c
@@ -536,7 +536,7 @@ HWND WIN_SetOwner( HWND hwnd, HWND owner )
ULONG WIN_SetStyle( HWND hwnd, ULONG set_bits, ULONG clear_bits )
{
BOOL ok;
- ULONG new_style, old_style = 0;
+ STYLESTRUCT style;
WND *win = WIN_GetPtr( hwnd );
if (!win || win == WND_DESKTOP) return 0;
@@ -547,32 +547,33 @@ ULONG WIN_SetStyle( HWND hwnd, ULONG set_bits, ULONG clear_bits )
set_bits, clear_bits, hwnd );
return 0;
}
- new_style = (win->dwStyle | set_bits) & ~clear_bits;
- if (new_style == win->dwStyle)
+ style.styleOld = win->dwStyle;
+ style.styleNew = (win->dwStyle | set_bits) & ~clear_bits;
+ if (style.styleNew == style.styleOld)
{
WIN_ReleasePtr( win );
- return new_style;
+ return style.styleNew;
}
SERVER_START_REQ( set_window_info )
{
req->handle = hwnd;
req->flags = SET_WIN_STYLE;
- req->style = new_style;
+ req->style = style.styleNew;
req->extra_offset = -1;
if ((ok = !wine_server_call( req )))
{
- old_style = reply->old_style;
- win->dwStyle = new_style;
+ style.styleOld = reply->old_style;
+ win->dwStyle = style.styleNew;
}
}
SERVER_END_REQ;
WIN_ReleasePtr( win );
if (ok)
{
- USER_Driver->pSetWindowStyle( hwnd, old_style );
- if ((old_style ^ new_style) & WS_VISIBLE) invalidate_dce( hwnd, NULL );
+ USER_Driver->pSetWindowStyle( hwnd, GWL_STYLE, &style );
+ if ((style.styleOld ^ style.styleNew) & WS_VISIBLE) invalidate_dce( hwnd, NULL );
}
- return old_style;
+ return style.styleOld;
}
@@ -2131,10 +2132,11 @@ LONG_PTR WIN_SetWindowLong( HWND hwnd, INT offset, UINT size, LONG_PTR newval, B
if (!ok) return 0;
- if (offset == GWL_STYLE) USER_Driver->pSetWindowStyle( hwnd, retval );
-
if (offset == GWL_STYLE || offset == GWL_EXSTYLE)
+ {
+ USER_Driver->pSetWindowStyle( hwnd, offset, &style );
SendMessageW( hwnd, WM_STYLECHANGED, offset, (LPARAM)&style );
+ }
return retval;
}
diff --git a/dlls/winex11.drv/window.c b/dlls/winex11.drv/window.c
index 33adff4..0ba15e2 100644
--- a/dlls/winex11.drv/window.c
+++ b/dlls/winex11.drv/window.c
@@ -1455,16 +1455,15 @@ void X11DRV_SetWindowText( HWND hwnd, LPCWSTR text )
*
* Update the X state of a window to reflect a style change
*/
-void X11DRV_SetWindowStyle( HWND hwnd, DWORD old_style )
+void X11DRV_SetWindowStyle( HWND hwnd, INT offset, STYLESTRUCT *style )
{
struct x11drv_win_data *data;
- DWORD new_style, changed;
+ DWORD changed;
if (hwnd == GetDesktopWindow()) return;
- new_style = GetWindowLongW( hwnd, GWL_STYLE );
- changed = new_style ^ old_style;
+ changed = style->styleNew ^ style->styleOld;
- if ((changed & WS_VISIBLE) && (new_style & WS_VISIBLE))
+ if (offset == GWL_STYLE && (changed & WS_VISIBLE) && (style->styleNew & WS_VISIBLE))
{
/* we don't unmap windows, that causes trouble with the window manager */
if (!(data = X11DRV_get_win_data( hwnd )) &&
@@ -1474,17 +1473,17 @@ void X11DRV_SetWindowStyle( HWND hwnd, DWORD old_style )
{
Display *display = thread_display();
set_wm_hints( display, data );
- if (!data->mapped) map_window( display, data, new_style );
+ if (!data->mapped) map_window( display, data, style->styleNew );
}
}
- if (changed & WS_DISABLED)
+ if (offset == GWL_STYLE && (changed & WS_DISABLED))
{
data = X11DRV_get_win_data( hwnd );
if (data && data->wm_hints)
{
wine_tsx11_lock();
- data->wm_hints->input = !(new_style & WS_DISABLED);
+ data->wm_hints->input = !(style->styleNew & WS_DISABLED);
XSetWMHints( thread_display(), data->whole_window, data->wm_hints );
wine_tsx11_unlock();
}
diff --git a/dlls/winex11.drv/winex11.drv.spec b/dlls/winex11.drv/winex11.drv.spec
index cacc5b9..39dcc8e 100644
--- a/dlls/winex11.drv/winex11.drv.spec
+++ b/dlls/winex11.drv/winex11.drv.spec
@@ -109,7 +109,7 @@
@ cdecl SetParent(long long long) X11DRV_SetParent
@ cdecl SetWindowIcon(long long long) X11DRV_SetWindowIcon
@ cdecl SetWindowRgn(long long long) X11DRV_SetWindowRgn
-@ cdecl SetWindowStyle(ptr long) X11DRV_SetWindowStyle
+@ cdecl SetWindowStyle(ptr long ptr) X11DRV_SetWindowStyle
@ cdecl SetWindowText(long wstr) X11DRV_SetWindowText
@ cdecl ShowWindow(long long ptr long) X11DRV_ShowWindow
@ cdecl SysCommand(long long long) X11DRV_SysCommand
More information about the wine-cvs
mailing list