diff --git a/dlls/user32/clipboard.c b/dlls/user32/clipboard.c index ec991b8dbae..c69d0c3f6cb 100644 --- a/dlls/user32/clipboard.c +++ b/dlls/user32/clipboard.c @@ -188,6 +188,21 @@ static BOOL CLIPBOARD_CloseClipboard(void) return bRet; } +static HWND CLIPBOARD_SetClipboardViewer( HWND hWnd ) +{ + HWND hwndPrev = 0; + + SERVER_START_REQ( set_clipboard_info ) + { + req->flags = SET_CB_VIEWER; + req->viewer = wine_server_user_handle( hWnd ); + if (!wine_server_call_err( req )) + hwndPrev = wine_server_ptr_handle( reply->old_viewer ); + } + SERVER_END_REQ; + + return hwndPrev; +} /************************************************************************** * WIN32 Clipboard implementation @@ -390,17 +405,10 @@ HWND WINAPI GetOpenClipboardWindow(void) */ HWND WINAPI SetClipboardViewer( HWND hWnd ) { - HWND hwndPrev = 0; - - SERVER_START_REQ( set_clipboard_info ) - { - req->flags = SET_CB_VIEWER; - req->viewer = wine_server_user_handle( hWnd ); - if (!wine_server_call_err( req )) - hwndPrev = wine_server_ptr_handle( reply->old_viewer ); - } - SERVER_END_REQ; + HWND hwndPrev = CLIPBOARD_SetClipboardViewer(hWnd); + if (hWnd) + SendMessageW(hWnd, WM_DRAWCLIPBOARD, (WPARAM) GetClipboardOwner(), 0); TRACE("(%p): returning %p\n", hWnd, hwndPrev); return hwndPrev; @@ -438,7 +446,7 @@ BOOL WINAPI ChangeClipboardChain(HWND hWnd, HWND hWndNext) if (hWndViewer) { if (WIN_GetFullHandle(hWnd) == hWndViewer) - SetClipboardViewer(WIN_GetFullHandle(hWndNext)); + CLIPBOARD_SetClipboardViewer(WIN_GetFullHandle(hWndNext)); else bRet = !SendMessageW(hWndViewer, WM_CHANGECBCHAIN, (WPARAM)hWnd, (LPARAM)hWndNext); } diff --git a/dlls/user32/tests/msg.c b/dlls/user32/tests/msg.c index 517e0293357..9208c9d997e 100644 --- a/dlls/user32/tests/msg.c +++ b/dlls/user32/tests/msg.c @@ -11813,7 +11813,7 @@ static void test_clipboard_viewers(void) /* Test registering hWnd1 as a viewer. */ hRet = SetClipboardViewer(hWnd1); wm_clipboard_changed[0].wParam = (WPARAM) GetClipboardOwner(); - ok_sequence(wm_clipboard_changed, "set viewer NULL->1", TRUE); + ok_sequence(wm_clipboard_changed, "set viewer NULL->1", FALSE); expect_HWND(NULL, hRet); expect_HWND(hWnd1, GetClipboardViewer()); @@ -11830,7 +11830,7 @@ static void test_clipboard_viewers(void) /* Test re-registering same window. */ hRet = SetClipboardViewer(hWnd1); wm_clipboard_changed[0].wParam = (WPARAM) GetClipboardOwner(); - ok_sequence(wm_clipboard_changed, "set viewer 1->1", TRUE); + ok_sequence(wm_clipboard_changed, "set viewer 1->1", FALSE); expect_HWND(hWnd1, hRet); expect_HWND(hWnd1, GetClipboardViewer());