win32u: Move NtUserCountClipboardFormats implementation from user32.
Signed-off-by: Jacek Caban <jacek@codeweavers.com> Signed-off-by: Huw Davies <huw@codeweavers.com> Signed-off-by: Alexandre Julliard <julliard@winehq.org>
This commit is contained in:
parent
694b1b472b
commit
170cb0d930
|
@ -926,27 +926,6 @@ done:
|
|||
}
|
||||
|
||||
|
||||
/**************************************************************************
|
||||
* CountClipboardFormats (USER32.@)
|
||||
*/
|
||||
INT WINAPI CountClipboardFormats(void)
|
||||
{
|
||||
INT count = 0;
|
||||
|
||||
USER_Driver->pUpdateClipboard();
|
||||
|
||||
SERVER_START_REQ( get_clipboard_formats )
|
||||
{
|
||||
wine_server_call( req );
|
||||
count = reply->count;
|
||||
}
|
||||
SERVER_END_REQ;
|
||||
|
||||
TRACE("returning %d\n", count);
|
||||
return count;
|
||||
}
|
||||
|
||||
|
||||
/**************************************************************************
|
||||
* EnumClipboardFormats (USER32.@)
|
||||
*/
|
||||
|
@ -1107,7 +1086,7 @@ INT WINAPI GetPriorityClipboardFormat(UINT *list, INT nCount)
|
|||
|
||||
TRACE( "%p %u\n", list, nCount );
|
||||
|
||||
if(CountClipboardFormats() == 0)
|
||||
if (NtUserCountClipboardFormats() == 0)
|
||||
return 0;
|
||||
|
||||
for (i = 0; i < nCount; i++)
|
||||
|
|
|
@ -83,7 +83,7 @@
|
|||
@ stdcall CopyIcon(long)
|
||||
@ stdcall CopyImage(long long long long long)
|
||||
@ stdcall CopyRect(ptr ptr)
|
||||
@ stdcall CountClipboardFormats()
|
||||
@ stdcall CountClipboardFormats() NtUserCountClipboardFormats
|
||||
@ stdcall CreateAcceleratorTableA(ptr long)
|
||||
@ stdcall CreateAcceleratorTableW(ptr long)
|
||||
@ stdcall CreateCaret(long long long long)
|
||||
|
|
|
@ -11,6 +11,7 @@ C_SRCS = \
|
|||
bitblt.c \
|
||||
bitmap.c \
|
||||
brush.c \
|
||||
clipboard.c \
|
||||
clipping.c \
|
||||
dc.c \
|
||||
dib.c \
|
||||
|
|
|
@ -0,0 +1,55 @@
|
|||
/*
|
||||
* WIN32 clipboard implementation
|
||||
*
|
||||
* Copyright 1994 Martin Ayotte
|
||||
* Copyright 1996 Alex Korobka
|
||||
* Copyright 1999 Noel Borthwick
|
||||
* Copyright 2003 Ulrich Czekalla for CodeWeavers
|
||||
* Copyright 2016 Alexandre Julliard
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Lesser General Public
|
||||
* License as published by the Free Software Foundation; either
|
||||
* version 2.1 of the License, or (at your option) any later version.
|
||||
*
|
||||
* This library is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public
|
||||
* License along with this library; if not, write to the Free Software
|
||||
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
|
||||
*
|
||||
*/
|
||||
|
||||
#if 0
|
||||
#pragma makedep unix
|
||||
#endif
|
||||
|
||||
#include "win32u_private.h"
|
||||
#include "wine/server.h"
|
||||
#include "wine/debug.h"
|
||||
|
||||
WINE_DEFAULT_DEBUG_CHANNEL(clipboard);
|
||||
|
||||
|
||||
/**************************************************************************
|
||||
* NtUserCountClipboardFormats (win32u.@)
|
||||
*/
|
||||
INT WINAPI NtUserCountClipboardFormats(void)
|
||||
{
|
||||
INT count = 0;
|
||||
|
||||
user_driver->pUpdateClipboard();
|
||||
|
||||
SERVER_START_REQ( get_clipboard_formats )
|
||||
{
|
||||
wine_server_call( req );
|
||||
count = reply->count;
|
||||
}
|
||||
SERVER_END_REQ;
|
||||
|
||||
TRACE( "returning %d\n", count );
|
||||
return count;
|
||||
}
|
|
@ -56,7 +56,7 @@ struct d3dkmt_device
|
|||
struct list entry; /* List entry */
|
||||
};
|
||||
|
||||
static const struct user_driver_funcs *user_driver;
|
||||
static const struct user_driver_funcs lazy_load_driver;
|
||||
|
||||
static struct list d3dkmt_adapters = LIST_INIT( d3dkmt_adapters );
|
||||
static struct list d3dkmt_devices = LIST_INIT( d3dkmt_devices );
|
||||
|
@ -70,9 +70,10 @@ static pthread_mutex_t driver_lock = PTHREAD_MUTEX_INITIALIZER;
|
|||
*/
|
||||
const struct gdi_dc_funcs *get_display_driver(void)
|
||||
{
|
||||
if (!user_driver)
|
||||
if (user_driver == &lazy_load_driver)
|
||||
{
|
||||
if (!user_callbacks || !user_callbacks->pGetDesktopWindow() || !user_driver)
|
||||
if (!user_callbacks || !user_callbacks->pGetDesktopWindow() ||
|
||||
user_driver == &lazy_load_driver)
|
||||
{
|
||||
static struct user_driver_funcs empty_funcs;
|
||||
WARN( "failed to load the display driver, falling back to null driver\n" );
|
||||
|
@ -123,7 +124,7 @@ static BOOL CDECL nulldrv_Chord( PHYSDEV dev, INT left, INT top, INT right, INT
|
|||
|
||||
static BOOL CDECL nulldrv_CreateCompatibleDC( PHYSDEV orig, PHYSDEV *pdev )
|
||||
{
|
||||
if (!user_driver || !user_driver->dc_funcs.pCreateCompatibleDC) return TRUE;
|
||||
if (!user_driver->dc_funcs.pCreateCompatibleDC) return TRUE;
|
||||
return user_driver->dc_funcs.pCreateCompatibleDC( NULL, pdev );
|
||||
}
|
||||
|
||||
|
@ -989,6 +990,31 @@ static void CDECL nulldrv_ThreadDetach( void )
|
|||
{
|
||||
}
|
||||
|
||||
/**********************************************************************
|
||||
* Lazy loading user driver
|
||||
*
|
||||
* Initial driver used before another driver is loaded.
|
||||
* Each entry point simply loads the real driver and chains to it.
|
||||
*/
|
||||
|
||||
static const struct user_driver_funcs *load_driver(void)
|
||||
{
|
||||
get_display_driver();
|
||||
return user_driver;
|
||||
}
|
||||
|
||||
static void CDECL loaderdrv_UpdateClipboard(void)
|
||||
{
|
||||
load_driver()->pUpdateClipboard();
|
||||
}
|
||||
|
||||
static const struct user_driver_funcs lazy_load_driver =
|
||||
{
|
||||
.pUpdateClipboard = loaderdrv_UpdateClipboard,
|
||||
};
|
||||
|
||||
const struct user_driver_funcs *user_driver = &lazy_load_driver;
|
||||
|
||||
/******************************************************************************
|
||||
* __wine_set_display_driver (win32u.@)
|
||||
*/
|
||||
|
|
|
@ -1167,6 +1167,7 @@ static struct unix_funcs unix_funcs =
|
|||
NtGdiUnrealizeObject,
|
||||
NtGdiUpdateColors,
|
||||
NtGdiWidenPath,
|
||||
NtUserCountClipboardFormats,
|
||||
|
||||
GDIRealizePalette,
|
||||
GDISelectPalette,
|
||||
|
|
|
@ -803,7 +803,7 @@
|
|||
@ stub NtUserConsoleControl
|
||||
@ stub NtUserConvertMemHandle
|
||||
@ stub NtUserCopyAcceleratorTable
|
||||
@ stub NtUserCountClipboardFormats
|
||||
@ stdcall NtUserCountClipboardFormats()
|
||||
@ stub NtUserCreateAcceleratorTable
|
||||
@ stub NtUserCreateActivationGroup
|
||||
@ stub NtUserCreateActivationObject
|
||||
|
|
|
@ -194,6 +194,7 @@ struct unix_funcs
|
|||
BOOL (WINAPI *pNtGdiUnrealizeObject)( HGDIOBJ obj );
|
||||
BOOL (WINAPI *pNtGdiUpdateColors)( HDC hdc );
|
||||
BOOL (WINAPI *pNtGdiWidenPath)( HDC hdc );
|
||||
INT (WINAPI *pNtUserCountClipboardFormats)(void);
|
||||
|
||||
/* Wine-specific functions */
|
||||
UINT (WINAPI *pGDIRealizePalette)( HDC hdc );
|
||||
|
@ -229,6 +230,8 @@ extern HKEY reg_open_key( HKEY root, const WCHAR *name, ULONG name_len ) DECLSPE
|
|||
extern ULONG query_reg_ascii_value( HKEY hkey, const char *name,
|
||||
KEY_VALUE_PARTIAL_INFORMATION *info, ULONG size ) DECLSPEC_HIDDEN;
|
||||
|
||||
extern const struct user_driver_funcs *user_driver DECLSPEC_HIDDEN;
|
||||
|
||||
static inline WCHAR *win32u_wcsrchr( const WCHAR *str, WCHAR ch )
|
||||
{
|
||||
WCHAR *ret = NULL;
|
||||
|
|
|
@ -596,6 +596,11 @@ NTSTATUS WINAPI NtGdiDdDDISetVidPnSourceOwner( const D3DKMT_SETVIDPNSOURCEOWNER
|
|||
return unix_funcs->pNtGdiDdDDISetVidPnSourceOwner( desc );
|
||||
}
|
||||
|
||||
INT WINAPI NtUserCountClipboardFormats(void)
|
||||
{
|
||||
return unix_funcs->pNtUserCountClipboardFormats();
|
||||
}
|
||||
|
||||
UINT WINAPI GDIRealizePalette( HDC hdc )
|
||||
{
|
||||
return unix_funcs->pGDIRealizePalette( hdc );
|
||||
|
|
|
@ -25,6 +25,7 @@
|
|||
|
||||
BOOL WINAPI NtUserCloseDesktop( HDESK handle );
|
||||
BOOL WINAPI NtUserCloseWindowStation( HWINSTA handle );
|
||||
INT WINAPI NtUserCountClipboardFormats(void);
|
||||
HDESK WINAPI NtUserCreateDesktopEx( OBJECT_ATTRIBUTES *attr, UNICODE_STRING *device,
|
||||
DEVMODEW *devmode, DWORD flags, ACCESS_MASK access,
|
||||
ULONG heap_size );
|
||||
|
|
Loading…
Reference in New Issue