user32: Send a WM_DRAWCLIPBOARD message to the new viewer when SetClipboardViewer is called.

This commit is contained in:
Alexander Scott-Johns 2009-09-23 01:35:57 +01:00 committed by Alexandre Julliard
parent 64569c66e4
commit 9c9ebe04c5
2 changed files with 21 additions and 13 deletions

View File

@ -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);
}

View File

@ -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());