[3/4] user32: Send a WM_DRAWCLIPBOARD message to the new viewer when SetClipboardViewer is called.
Alexander Scott-Johns
alexander.scott.johns at googlemail.com
Tue Sep 22 20:17:02 CDT 2009
-------------- next part --------------
From 955a21188684a7b1a2b5ffcfaf71508dbf9a351e Mon Sep 17 00:00:00 2001
From: Alexander Scott-Johns <alexander.scott.johns at googlemail.com>
Date: Wed, 23 Sep 2009 01:35:57 +0100
Subject: user32: Send a WM_DRAWCLIPBOARD message to the new viewer when SetClipboardViewer is called.
---
dlls/user32/clipboard.c | 30 +++++++++++++++++++-----------
dlls/user32/tests/msg.c | 4 ++--
2 files changed, 21 insertions(+), 13 deletions(-)
diff --git a/dlls/user32/clipboard.c b/dlls/user32/clipboard.c
index ec991b8..c69d0c3 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 517e029..9208c9d 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());
--
1.6.0.4
More information about the wine-patches
mailing list