user32: Send a WM_DRAWCLIPBOARD message to the new viewer when SetClipboardViewer is called.
This commit is contained in:
parent
64569c66e4
commit
9c9ebe04c5
|
@ -188,6 +188,21 @@ static BOOL CLIPBOARD_CloseClipboard(void)
|
||||||
return bRet;
|
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
|
* WIN32 Clipboard implementation
|
||||||
|
@ -390,17 +405,10 @@ HWND WINAPI GetOpenClipboardWindow(void)
|
||||||
*/
|
*/
|
||||||
HWND WINAPI SetClipboardViewer( HWND hWnd )
|
HWND WINAPI SetClipboardViewer( HWND hWnd )
|
||||||
{
|
{
|
||||||
HWND hwndPrev = 0;
|
HWND hwndPrev = CLIPBOARD_SetClipboardViewer(hWnd);
|
||||||
|
|
||||||
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;
|
|
||||||
|
|
||||||
|
if (hWnd)
|
||||||
|
SendMessageW(hWnd, WM_DRAWCLIPBOARD, (WPARAM) GetClipboardOwner(), 0);
|
||||||
TRACE("(%p): returning %p\n", hWnd, hwndPrev);
|
TRACE("(%p): returning %p\n", hWnd, hwndPrev);
|
||||||
|
|
||||||
return hwndPrev;
|
return hwndPrev;
|
||||||
|
@ -438,7 +446,7 @@ BOOL WINAPI ChangeClipboardChain(HWND hWnd, HWND hWndNext)
|
||||||
if (hWndViewer)
|
if (hWndViewer)
|
||||||
{
|
{
|
||||||
if (WIN_GetFullHandle(hWnd) == hWndViewer)
|
if (WIN_GetFullHandle(hWnd) == hWndViewer)
|
||||||
SetClipboardViewer(WIN_GetFullHandle(hWndNext));
|
CLIPBOARD_SetClipboardViewer(WIN_GetFullHandle(hWndNext));
|
||||||
else
|
else
|
||||||
bRet = !SendMessageW(hWndViewer, WM_CHANGECBCHAIN, (WPARAM)hWnd, (LPARAM)hWndNext);
|
bRet = !SendMessageW(hWndViewer, WM_CHANGECBCHAIN, (WPARAM)hWnd, (LPARAM)hWndNext);
|
||||||
}
|
}
|
||||||
|
|
|
@ -11813,7 +11813,7 @@ static void test_clipboard_viewers(void)
|
||||||
/* Test registering hWnd1 as a viewer. */
|
/* Test registering hWnd1 as a viewer. */
|
||||||
hRet = SetClipboardViewer(hWnd1);
|
hRet = SetClipboardViewer(hWnd1);
|
||||||
wm_clipboard_changed[0].wParam = (WPARAM) GetClipboardOwner();
|
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(NULL, hRet);
|
||||||
expect_HWND(hWnd1, GetClipboardViewer());
|
expect_HWND(hWnd1, GetClipboardViewer());
|
||||||
|
|
||||||
|
@ -11830,7 +11830,7 @@ static void test_clipboard_viewers(void)
|
||||||
/* Test re-registering same window. */
|
/* Test re-registering same window. */
|
||||||
hRet = SetClipboardViewer(hWnd1);
|
hRet = SetClipboardViewer(hWnd1);
|
||||||
wm_clipboard_changed[0].wParam = (WPARAM) GetClipboardOwner();
|
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, hRet);
|
||||||
expect_HWND(hWnd1, GetClipboardViewer());
|
expect_HWND(hWnd1, GetClipboardViewer());
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue