user32: Add an UpdateClipboard entry point to allow the driver to refresh the clipboard before it's open.

Signed-off-by: Alexandre Julliard <julliard@winehq.org>
This commit is contained in:
Alexandre Julliard 2016-09-23 14:07:08 +09:00
parent a502a36af8
commit 11c3867349
3 changed files with 25 additions and 2 deletions

View File

@ -523,6 +523,8 @@ BOOL WINAPI OpenClipboard( HWND hwnd )
TRACE( "%p\n", hwnd );
USER_Driver->pUpdateClipboard();
SERVER_START_REQ( open_clipboard )
{
req->window = wine_server_user_handle( hwnd );
@ -759,7 +761,11 @@ HANDLE WINAPI SetClipboardData( UINT format, HANDLE data )
*/
INT WINAPI CountClipboardFormats(void)
{
INT count = USER_Driver->pCountClipboardFormats();
INT count;
USER_Driver->pUpdateClipboard();
count = USER_Driver->pCountClipboardFormats();
TRACE("returning %d\n", count);
return count;
}
@ -790,7 +796,11 @@ UINT WINAPI EnumClipboardFormats( UINT format )
*/
BOOL WINAPI IsClipboardFormatAvailable( UINT format )
{
BOOL ret = USER_Driver->pIsClipboardFormatAvailable( format );
BOOL ret;
USER_Driver->pUpdateClipboard();
ret = USER_Driver->pIsClipboardFormatAvailable( format );
TRACE( "%s -> %u\n", debugstr_format( format ), ret );
return ret;
}

View File

@ -128,6 +128,7 @@ static const USER_DRIVER *load_driver(void)
GET_USER_FUNC(EnumClipboardFormats);
GET_USER_FUNC(IsClipboardFormatAvailable);
GET_USER_FUNC(EndClipboardUpdate);
GET_USER_FUNC(UpdateClipboard);
GET_USER_FUNC(ChangeDisplaySettingsEx);
GET_USER_FUNC(EnumDisplayMonitors);
GET_USER_FUNC(EnumDisplaySettingsEx);
@ -369,6 +370,10 @@ static BOOL CDECL nulldrv_SetClipboardData( UINT format, HANDLE handle, BOOL own
return FALSE;
}
static void CDECL nulldrv_UpdateClipboard(void)
{
}
static LONG CDECL nulldrv_ChangeDisplaySettingsEx( LPCWSTR name, LPDEVMODEW mode, HWND hwnd,
DWORD flags, LPVOID lparam )
{
@ -548,6 +553,7 @@ static USER_DRIVER null_driver =
nulldrv_GetClipboardData,
nulldrv_IsClipboardFormatAvailable,
nulldrv_SetClipboardData,
nulldrv_UpdateClipboard,
/* display modes */
nulldrv_ChangeDisplaySettingsEx,
nulldrv_EnumDisplayMonitors,
@ -716,6 +722,11 @@ static BOOL CDECL loaderdrv_SetClipboardData( UINT format, HANDLE handle, BOOL o
return load_driver()->pSetClipboardData( format, handle, owner );
}
static void CDECL loaderdrv_UpdateClipboard(void)
{
load_driver()->pUpdateClipboard();
}
static LONG CDECL loaderdrv_ChangeDisplaySettingsEx( LPCWSTR name, LPDEVMODEW mode, HWND hwnd,
DWORD flags, LPVOID lparam )
{
@ -805,6 +816,7 @@ static USER_DRIVER lazy_load_driver =
loaderdrv_GetClipboardData,
loaderdrv_IsClipboardFormatAvailable,
loaderdrv_SetClipboardData,
loaderdrv_UpdateClipboard,
/* display modes */
loaderdrv_ChangeDisplaySettingsEx,
loaderdrv_EnumDisplayMonitors,

View File

@ -87,6 +87,7 @@ typedef struct tagUSER_DRIVER {
HANDLE (CDECL *pGetClipboardData)(UINT); /* Get specified selection data */
BOOL (CDECL *pIsClipboardFormatAvailable)(UINT); /* Check if specified format is available */
BOOL (CDECL *pSetClipboardData)(UINT, HANDLE, BOOL); /* Set specified selection data */
void (CDECL *pUpdateClipboard)(void);
/* display modes */
LONG (CDECL *pChangeDisplaySettingsEx)(LPCWSTR,LPDEVMODEW,HWND,DWORD,LPVOID);
BOOL (CDECL *pEnumDisplayMonitors)(HDC,LPRECT,MONITORENUMPROC,LPARAM);