Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
W
wine-winehq
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Registry
Registry
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
wine
wine-winehq
Commits
83b66549
Commit
83b66549
authored
Dec 22, 2009
by
Alexandre Julliard
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
user32: Get rid of 16-bit handles in the driver clipboard interface.
parent
3313c40b
Show whitespace changes
Inline
Side-by-side
Showing
5 changed files
with
87 additions
and
214 deletions
+87
-214
clipboard.c
dlls/user32/clipboard.c
+2
-3
driver.c
dlls/user32/driver.c
+7
-7
user_private.h
dlls/user32/user_private.h
+2
-2
clipboard.c
dlls/winex11.drv/clipboard.c
+74
-200
winex11.drv.spec
dlls/winex11.drv/winex11.drv.spec
+2
-2
No files found.
dlls/user32/clipboard.c
View file @
83b66549
...
...
@@ -46,7 +46,6 @@
#include "wingdi.h"
#include "winuser.h"
#include "winerror.h"
#include "wine/winbase16.h"
#include "user_private.h"
#include "win.h"
...
...
@@ -479,7 +478,7 @@ HANDLE WINAPI SetClipboardData(UINT wFormat, HANDLE hData)
return
0
;
}
if
(
USER_Driver
->
pSetClipboardData
(
wFormat
,
0
,
hData
,
cbinfo
.
flags
&
CB_OWNER
))
if
(
USER_Driver
->
pSetClipboardData
(
wFormat
,
hData
,
cbinfo
.
flags
&
CB_OWNER
))
{
hResult
=
hData
;
bCBHasChanged
=
TRUE
;
...
...
@@ -549,7 +548,7 @@ HANDLE WINAPI GetClipboardData(UINT wFormat)
return
0
;
}
if
(
!
USER_Driver
->
pGetClipboardData
(
wFormat
,
NULL
,
&
hData
))
hData
=
0
;
hData
=
USER_Driver
->
pGetClipboardData
(
wFormat
)
;
TRACE
(
"returning %p
\n
"
,
hData
);
return
hData
;
...
...
dlls/user32/driver.c
View file @
83b66549
...
...
@@ -266,9 +266,9 @@ static UINT CDECL nulldrv_EnumClipboardFormats( UINT format )
return
0
;
}
static
BOOL
CDECL
nulldrv_GetClipboardData
(
UINT
format
,
HANDLE16
*
h16
,
HANDLE
*
h32
)
static
HANDLE
CDECL
nulldrv_GetClipboardData
(
UINT
format
)
{
return
FALSE
;
return
0
;
}
static
INT
CDECL
nulldrv_GetClipboardFormatName
(
UINT
format
,
LPWSTR
buffer
,
UINT
len
)
...
...
@@ -286,7 +286,7 @@ static UINT CDECL nulldrv_RegisterClipboardFormat( LPCWSTR name )
return
0
;
}
static
BOOL
CDECL
nulldrv_SetClipboardData
(
UINT
format
,
HANDLE
16
h16
,
HANDLE
h32
,
BOOL
owner
)
static
BOOL
CDECL
nulldrv_SetClipboardData
(
UINT
format
,
HANDLE
handle
,
BOOL
owner
)
{
return
FALSE
;
}
...
...
@@ -613,9 +613,9 @@ static UINT CDECL loaderdrv_EnumClipboardFormats( UINT format )
return
load_driver
()
->
pEnumClipboardFormats
(
format
);
}
static
BOOL
CDECL
loaderdrv_GetClipboardData
(
UINT
format
,
HANDLE16
*
h16
,
HANDLE
*
h32
)
static
HANDLE
CDECL
loaderdrv_GetClipboardData
(
UINT
format
)
{
return
load_driver
()
->
pGetClipboardData
(
format
,
h16
,
h32
);
return
load_driver
()
->
pGetClipboardData
(
format
);
}
static
INT
CDECL
loaderdrv_GetClipboardFormatName
(
UINT
format
,
LPWSTR
buffer
,
UINT
len
)
...
...
@@ -633,9 +633,9 @@ static UINT CDECL loaderdrv_RegisterClipboardFormat( LPCWSTR name )
return
load_driver
()
->
pRegisterClipboardFormat
(
name
);
}
static
BOOL
CDECL
loaderdrv_SetClipboardData
(
UINT
format
,
HANDLE
16
h16
,
HANDLE
h32
,
BOOL
owner
)
static
BOOL
CDECL
loaderdrv_SetClipboardData
(
UINT
format
,
HANDLE
handle
,
BOOL
owner
)
{
return
load_driver
()
->
pSetClipboardData
(
format
,
h
16
,
h32
,
owner
);
return
load_driver
()
->
pSetClipboardData
(
format
,
h
andle
,
owner
);
}
static
LONG
CDECL
loaderdrv_ChangeDisplaySettingsEx
(
LPCWSTR
name
,
LPDEVMODEW
mode
,
HWND
hwnd
,
...
...
dlls/user32/user_private.h
View file @
83b66549
...
...
@@ -84,11 +84,11 @@ typedef struct tagUSER_DRIVER {
void
(
CDECL
*
pEmptyClipboard
)(
BOOL
);
/* Empty clipboard data */
void
(
CDECL
*
pEndClipboardUpdate
)(
void
);
/* End clipboard update */
UINT
(
CDECL
*
pEnumClipboardFormats
)(
UINT
);
/* Enumerate clipboard formats */
BOOL
(
CDECL
*
pGetClipboardData
)(
UINT
,
HANDLE16
*
,
HANDLE
*
);
/* Get specified selection data */
HANDLE
(
CDECL
*
pGetClipboardData
)(
UINT
);
/* Get specified selection data */
INT
(
CDECL
*
pGetClipboardFormatName
)(
UINT
,
LPWSTR
,
UINT
);
/* Get a clipboard format name */
BOOL
(
CDECL
*
pIsClipboardFormatAvailable
)(
UINT
);
/* Check if specified format is available */
UINT
(
CDECL
*
pRegisterClipboardFormat
)(
LPCWSTR
);
/* Register a clipboard format */
BOOL
(
CDECL
*
pSetClipboardData
)(
UINT
,
HANDLE
16
,
HANDLE
,
BOOL
);
/* Set specified selection data */
BOOL
(
CDECL
*
pSetClipboardData
)(
UINT
,
HANDLE
,
BOOL
);
/* Set specified selection data */
/* display modes */
LONG
(
CDECL
*
pChangeDisplaySettingsEx
)(
LPCWSTR
,
LPDEVMODEW
,
HWND
,
DWORD
,
LPVOID
);
BOOL
(
CDECL
*
pEnumDisplayMonitors
)(
HDC
,
LPRECT
,
MONITORENUMPROC
,
LPARAM
);
...
...
dlls/winex11.drv/clipboard.c
View file @
83b66549
...
...
@@ -78,7 +78,6 @@
#include "windef.h"
#include "winbase.h"
#include "wine/wingdi16.h"
#include "x11drv.h"
#include "wine/debug.h"
#include "wine/unicode.h"
...
...
@@ -86,8 +85,6 @@
WINE_DEFAULT_DEBUG_CHANNEL
(
clipboard
);
#define HGDIOBJ_32(handle16) ((HGDIOBJ)(ULONG_PTR)(handle16))
/* Maximum wait time for selection notify */
#define SELECTION_RETRIES 500
/* wait for .1 seconds */
#define SELECTION_WAIT 1000
/* us */
...
...
@@ -127,8 +124,7 @@ typedef struct tagWINE_CLIPFORMAT {
typedef
struct
tagWINE_CLIPDATA
{
UINT
wFormatID
;
HANDLE16
hData16
;
HANDLE
hData32
;
HANDLE
hData
;
UINT
wFlags
;
UINT
drvData
;
LPWINE_CLIPFORMAT
lpFormat
;
...
...
@@ -628,13 +624,13 @@ static BOOL X11DRV_CLIPBOARD_ReleaseOwnership(void)
*
* Caller *must* have the clipboard open and be the owner.
*/
static
BOOL
X11DRV_CLIPBOARD_InsertClipboardData
(
UINT
wFormatID
,
HANDLE
16
hData16
,
HANDLE
hData32
,
DWORD
flags
,
LPWINE_CLIPFORMAT
lpFormat
,
BOOL
override
)
static
BOOL
X11DRV_CLIPBOARD_InsertClipboardData
(
UINT
wFormatID
,
HANDLE
hData
,
DWORD
flags
,
LPWINE_CLIPFORMAT
lpFormat
,
BOOL
override
)
{
LPWINE_CLIPDATA
lpData
=
X11DRV_CLIPBOARD_LookupData
(
wFormatID
);
TRACE
(
"format=%04x lpData=%p hData
16=%08x hData32
=%p flags=0x%08x lpFormat=%p override=%d
\n
"
,
wFormatID
,
lpData
,
hData
16
,
hData32
,
flags
,
lpFormat
,
override
);
TRACE
(
"format=%04x lpData=%p hData=%p flags=0x%08x lpFormat=%p override=%d
\n
"
,
wFormatID
,
lpData
,
hData
,
flags
,
lpFormat
,
override
);
if
(
lpData
&&
!
override
)
return
TRUE
;
...
...
@@ -643,16 +639,14 @@ static BOOL X11DRV_CLIPBOARD_InsertClipboardData(UINT wFormatID, HANDLE16 hData1
{
X11DRV_CLIPBOARD_FreeData
(
lpData
);
lpData
->
hData16
=
hData16
;
/* 0 is legal, see WM_RENDERFORMAT */
lpData
->
hData32
=
hData32
;
lpData
->
hData
=
hData
;
}
else
{
lpData
=
HeapAlloc
(
GetProcessHeap
(),
0
,
sizeof
(
WINE_CLIPDATA
));
lpData
->
wFormatID
=
wFormatID
;
lpData
->
hData16
=
hData16
;
/* 0 is legal, see WM_RENDERFORMAT */
lpData
->
hData32
=
hData32
;
lpData
->
hData
=
hData
;
lpData
->
lpFormat
=
lpFormat
;
lpData
->
drvData
=
0
;
...
...
@@ -697,62 +691,33 @@ static void X11DRV_CLIPBOARD_FreeData(LPWINE_CLIPDATA lpData)
lpData
->
wFormatID
==
CF_DIB
||
lpData
->
wFormatID
==
CF_PALETTE
)
{
if
(
lpData
->
hData32
)
DeleteObject
(
lpData
->
hData32
);
if
(
lpData
->
hData16
)
DeleteObject
(
HGDIOBJ_32
(
lpData
->
hData16
));
if
(
lpData
->
hData
)
DeleteObject
(
lpData
->
hData
);
if
((
lpData
->
wFormatID
==
CF_DIB
)
&&
lpData
->
drvData
)
XFreePixmap
(
gdi_display
,
lpData
->
drvData
);
}
else
if
(
lpData
->
wFormatID
==
CF_METAFILEPICT
)
{
if
(
lpData
->
hData32
)
{
DeleteMetaFile
(((
METAFILEPICT
*
)
GlobalLock
(
lpData
->
hData32
))
->
hMF
);
GlobalFree
(
lpData
->
hData32
);
if
(
lpData
->
hData16
)
/* HMETAFILE16 and HMETAFILE32 are apparently the same thing,
and a shallow copy is enough to share a METAFILEPICT
structure between 16bit and 32bit clipboards. The MetaFile
should of course only be deleted once. */
GlobalFree16
(
lpData
->
hData16
);
}
if
(
lpData
->
hData16
)
{
METAFILEPICT16
*
lpMetaPict
=
GlobalLock16
(
lpData
->
hData16
);
if
(
lpMetaPict
)
if
(
lpData
->
hData
)
{
/* To delete 16-bit meta file, we just need to free the associated
handle. See DeleteMetaFile16() in dlls/gdi/metafile.c. */
GlobalFree16
(
lpMetaPict
->
hMF
);
lpMetaPict
->
hMF
=
0
;
}
GlobalFree16
(
lpData
->
hData16
);
DeleteMetaFile
(((
METAFILEPICT
*
)
GlobalLock
(
lpData
->
hData
))
->
hMF
);
GlobalFree
(
lpData
->
hData
);
}
}
else
if
(
lpData
->
wFormatID
==
CF_ENHMETAFILE
)
{
if
(
lpData
->
hData
32
)
DeleteEnhMetaFile
(
lpData
->
hData
32
);
if
(
lpData
->
hData
)
DeleteEnhMetaFile
(
lpData
->
hData
);
}
else
if
(
lpData
->
wFormatID
<
CF_PRIVATEFIRST
||
lpData
->
wFormatID
>
CF_PRIVATELAST
)
{
if
(
lpData
->
hData32
)
GlobalFree
(
lpData
->
hData32
);
if
(
lpData
->
hData16
)
GlobalFree16
(
lpData
->
hData16
);
if
(
lpData
->
hData
)
GlobalFree
(
lpData
->
hData
);
}
lpData
->
hData16
=
0
;
lpData
->
hData32
=
0
;
lpData
->
hData
=
0
;
lpData
->
drvData
=
0
;
}
...
...
@@ -800,11 +765,9 @@ static BOOL X11DRV_CLIPBOARD_RenderFormat(Display *display, LPWINE_CLIPDATA lpDa
{
BOOL
bret
=
TRUE
;
TRACE
(
" 0x%04x hData32(%p) hData16(0x%08x)
\n
"
,
lpData
->
wFormatID
,
lpData
->
hData32
,
lpData
->
hData16
);
TRACE
(
" 0x%04x hData(%p)
\n
"
,
lpData
->
wFormatID
,
lpData
->
hData
);
if
(
lpData
->
hData32
||
lpData
->
hData16
)
return
bret
;
/* Already rendered */
if
(
lpData
->
hData
)
return
bret
;
/* Already rendered */
if
(
lpData
->
wFlags
&
CF_FLAG_SYNTHESIZED
)
bret
=
X11DRV_CLIPBOARD_RenderSynthesizedFormat
(
display
,
lpData
);
...
...
@@ -829,8 +792,7 @@ static BOOL X11DRV_CLIPBOARD_RenderFormat(Display *display, LPWINE_CLIPDATA lpDa
TRACE
(
"Sending WM_RENDERFORMAT message to hwnd(%p)
\n
"
,
cbInfo
.
hWndOwner
);
SendMessageW
(
cbInfo
.
hWndOwner
,
WM_RENDERFORMAT
,
(
WPARAM
)
lpData
->
wFormatID
,
0
);
if
(
!
lpData
->
hData32
&&
!
lpData
->
hData16
)
bret
=
FALSE
;
if
(
!
lpData
->
hData
)
bret
=
FALSE
;
}
else
{
...
...
@@ -951,50 +913,42 @@ static BOOL X11DRV_CLIPBOARD_RenderSynthesizedText(Display *display, UINT wForma
{
LPCSTR
lpstrS
;
LPSTR
lpstrT
;
HANDLE
hData
32
;
HANDLE
hData
;
INT
src_chars
,
dst_chars
,
alloc_size
;
LPWINE_CLIPDATA
lpSource
=
NULL
;
TRACE
(
"%04x
\n
"
,
wFormatID
);
if
((
lpSource
=
X11DRV_CLIPBOARD_LookupData
(
wFormatID
))
&&
lpSource
->
hData
32
)
lpSource
->
hData
)
return
TRUE
;
/* Look for rendered source or non-synthesized source */
if
((
lpSource
=
X11DRV_CLIPBOARD_LookupData
(
CF_UNICODETEXT
))
&&
(
!
(
lpSource
->
wFlags
&
CF_FLAG_SYNTHESIZED
)
||
lpSource
->
hData
32
))
(
!
(
lpSource
->
wFlags
&
CF_FLAG_SYNTHESIZED
)
||
lpSource
->
hData
))
{
TRACE
(
"UNICODETEXT -> %04x
\n
"
,
wFormatID
);
}
else
if
((
lpSource
=
X11DRV_CLIPBOARD_LookupData
(
CF_TEXT
))
&&
(
!
(
lpSource
->
wFlags
&
CF_FLAG_SYNTHESIZED
)
||
lpSource
->
hData
32
))
(
!
(
lpSource
->
wFlags
&
CF_FLAG_SYNTHESIZED
)
||
lpSource
->
hData
))
{
TRACE
(
"TEXT -> %04x
\n
"
,
wFormatID
);
}
else
if
((
lpSource
=
X11DRV_CLIPBOARD_LookupData
(
CF_OEMTEXT
))
&&
(
!
(
lpSource
->
wFlags
&
CF_FLAG_SYNTHESIZED
)
||
lpSource
->
hData
32
))
(
!
(
lpSource
->
wFlags
&
CF_FLAG_SYNTHESIZED
)
||
lpSource
->
hData
))
{
TRACE
(
"OEMTEXT -> %04x
\n
"
,
wFormatID
);
}
if
(
!
lpSource
||
(
lpSource
->
wFlags
&
CF_FLAG_SYNTHESIZED
&&
!
lpSource
->
hData
32
))
!
lpSource
->
hData
))
return
FALSE
;
/* Ask the clipboard owner to render the source text if necessary */
if
(
!
lpSource
->
hData
32
&&
!
X11DRV_CLIPBOARD_RenderFormat
(
display
,
lpSource
))
if
(
!
lpSource
->
hData
&&
!
X11DRV_CLIPBOARD_RenderFormat
(
display
,
lpSource
))
return
FALSE
;
if
(
lpSource
->
hData32
)
{
lpstrS
=
GlobalLock
(
lpSource
->
hData32
);
}
else
{
lpstrS
=
GlobalLock16
(
lpSource
->
hData16
);
}
lpstrS
=
GlobalLock
(
lpSource
->
hData
);
if
(
!
lpstrS
)
return
FALSE
;
...
...
@@ -1020,25 +974,21 @@ static BOOL X11DRV_CLIPBOARD_RenderSynthesizedText(Display *display, UINT wForma
else
alloc_size
=
dst_chars
;
hData
32
=
GlobalAlloc
(
GMEM_ZEROINIT
|
GMEM_MOVEABLE
|
hData
=
GlobalAlloc
(
GMEM_ZEROINIT
|
GMEM_MOVEABLE
|
GMEM_DDESHARE
,
alloc_size
);
lpstrT
=
GlobalLock
(
hData
32
);
lpstrT
=
GlobalLock
(
hData
);
if
(
lpstrT
)
{
CLIPBOARD_ConvertText
(
lpSource
->
wFormatID
,
lpstrS
,
src_chars
,
wFormatID
,
lpstrT
,
dst_chars
);
GlobalUnlock
(
hData
32
);
GlobalUnlock
(
hData
);
}
/* Unlock source */
if
(
lpSource
->
hData32
)
GlobalUnlock
(
lpSource
->
hData32
);
else
GlobalUnlock16
(
lpSource
->
hData16
);
GlobalUnlock
(
lpSource
->
hData
);
return
X11DRV_CLIPBOARD_InsertClipboardData
(
wFormatID
,
0
,
hData32
,
0
,
NULL
,
TRUE
);
return
X11DRV_CLIPBOARD_InsertClipboardData
(
wFormatID
,
hData
,
0
,
NULL
,
TRUE
);
}
...
...
@@ -1054,27 +1004,27 @@ static BOOL X11DRV_CLIPBOARD_RenderSynthesizedDIB(Display *display)
TRACE
(
"
\n
"
);
if
((
lpSource
=
X11DRV_CLIPBOARD_LookupData
(
CF_DIB
))
&&
lpSource
->
hData
32
)
if
((
lpSource
=
X11DRV_CLIPBOARD_LookupData
(
CF_DIB
))
&&
lpSource
->
hData
)
{
bret
=
TRUE
;
}
/* If we have a bitmap and it's not synthesized or it has been rendered */
else
if
((
lpSource
=
X11DRV_CLIPBOARD_LookupData
(
CF_BITMAP
))
&&
(
!
(
lpSource
->
wFlags
&
CF_FLAG_SYNTHESIZED
)
||
lpSource
->
hData
32
))
(
!
(
lpSource
->
wFlags
&
CF_FLAG_SYNTHESIZED
)
||
lpSource
->
hData
))
{
/* Render source if required */
if
(
lpSource
->
hData
32
||
X11DRV_CLIPBOARD_RenderFormat
(
display
,
lpSource
))
if
(
lpSource
->
hData
||
X11DRV_CLIPBOARD_RenderFormat
(
display
,
lpSource
))
{
HDC
hdc
;
HGLOBAL
hData
32
;
HGLOBAL
hData
;
hdc
=
GetDC
(
NULL
);
hData
32
=
X11DRV_DIB_CreateDIBFromBitmap
(
hdc
,
lpSource
->
hData32
);
hData
=
X11DRV_DIB_CreateDIBFromBitmap
(
hdc
,
lpSource
->
hData
);
ReleaseDC
(
NULL
,
hdc
);
if
(
hData
32
)
if
(
hData
)
{
X11DRV_CLIPBOARD_InsertClipboardData
(
CF_DIB
,
0
,
hData32
,
0
,
NULL
,
TRUE
);
X11DRV_CLIPBOARD_InsertClipboardData
(
CF_DIB
,
hData
,
0
,
NULL
,
TRUE
);
bret
=
TRUE
;
}
}
...
...
@@ -1096,38 +1046,38 @@ static BOOL X11DRV_CLIPBOARD_RenderSynthesizedBitmap(Display *display)
TRACE
(
"
\n
"
);
if
((
lpSource
=
X11DRV_CLIPBOARD_LookupData
(
CF_BITMAP
))
&&
lpSource
->
hData
32
)
if
((
lpSource
=
X11DRV_CLIPBOARD_LookupData
(
CF_BITMAP
))
&&
lpSource
->
hData
)
{
bret
=
TRUE
;
}
/* If we have a dib and it's not synthesized or it has been rendered */
else
if
((
lpSource
=
X11DRV_CLIPBOARD_LookupData
(
CF_DIB
))
&&
(
!
(
lpSource
->
wFlags
&
CF_FLAG_SYNTHESIZED
)
||
lpSource
->
hData
32
))
(
!
(
lpSource
->
wFlags
&
CF_FLAG_SYNTHESIZED
)
||
lpSource
->
hData
))
{
/* Render source if required */
if
(
lpSource
->
hData
32
||
X11DRV_CLIPBOARD_RenderFormat
(
display
,
lpSource
))
if
(
lpSource
->
hData
||
X11DRV_CLIPBOARD_RenderFormat
(
display
,
lpSource
))
{
HDC
hdc
;
HBITMAP
hData
32
;
HBITMAP
hData
;
unsigned
int
offset
;
LPBITMAPINFOHEADER
lpbmih
;
hdc
=
GetDC
(
NULL
);
lpbmih
=
GlobalLock
(
lpSource
->
hData
32
);
lpbmih
=
GlobalLock
(
lpSource
->
hData
);
offset
=
sizeof
(
BITMAPINFOHEADER
)
+
((
lpbmih
->
biBitCount
<=
8
)
?
(
sizeof
(
RGBQUAD
)
*
(
1
<<
lpbmih
->
biBitCount
))
:
0
);
hData
32
=
CreateDIBitmap
(
hdc
,
lpbmih
,
CBM_INIT
,
(
LPBYTE
)
lpbmih
+
hData
=
CreateDIBitmap
(
hdc
,
lpbmih
,
CBM_INIT
,
(
LPBYTE
)
lpbmih
+
offset
,
(
LPBITMAPINFO
)
lpbmih
,
DIB_RGB_COLORS
);
GlobalUnlock
(
lpSource
->
hData
32
);
GlobalUnlock
(
lpSource
->
hData
);
ReleaseDC
(
NULL
,
hdc
);
if
(
hData
32
)
if
(
hData
)
{
X11DRV_CLIPBOARD_InsertClipboardData
(
CF_BITMAP
,
0
,
hData32
,
0
,
NULL
,
TRUE
);
X11DRV_CLIPBOARD_InsertClipboardData
(
CF_BITMAP
,
hData
,
0
,
NULL
,
TRUE
);
bret
=
TRUE
;
}
}
...
...
@@ -1488,19 +1438,19 @@ static HANDLE X11DRV_CLIPBOARD_ExportClipboardData(Display *display, Window requ
ERR
(
"Failed to export %04x format
\n
"
,
lpData
->
wFormatID
);
else
{
datasize
=
GlobalSize
(
lpData
->
hData
32
);
datasize
=
GlobalSize
(
lpData
->
hData
);
hClipData
=
GlobalAlloc
(
GMEM_MOVEABLE
|
GMEM_DDESHARE
,
datasize
);
if
(
hClipData
==
0
)
return
NULL
;
if
((
lpClipData
=
GlobalLock
(
hClipData
)))
{
LPVOID
lpdata
=
GlobalLock
(
lpData
->
hData
32
);
LPVOID
lpdata
=
GlobalLock
(
lpData
->
hData
);
memcpy
(
lpClipData
,
lpdata
,
datasize
);
*
lpBytes
=
datasize
;
GlobalUnlock
(
lpData
->
hData
32
);
GlobalUnlock
(
lpData
->
hData
);
GlobalUnlock
(
hClipData
);
}
else
{
GlobalFree
(
hClipData
);
...
...
@@ -1526,7 +1476,7 @@ static HANDLE X11DRV_CLIPBOARD_ExportXAString(LPWINE_CLIPDATA lpData, LPDWORD lp
*
lpBytes
=
0
;
/* Assume return has zero bytes */
text
=
GlobalLock
(
lpData
->
hData
32
);
text
=
GlobalLock
(
lpData
->
hData
);
size
=
strlen
(
text
);
/* remove carriage returns */
...
...
@@ -1546,7 +1496,7 @@ static HANDLE X11DRV_CLIPBOARD_ExportXAString(LPWINE_CLIPDATA lpData, LPDWORD lp
done:
HeapFree
(
GetProcessHeap
(),
0
,
text
);
GlobalUnlock
(
lpData
->
hData
32
);
GlobalUnlock
(
lpData
->
hData
);
return
lpstr
;
}
...
...
@@ -1567,7 +1517,7 @@ static HANDLE X11DRV_CLIPBOARD_ExportUTF8String(LPWINE_CLIPDATA lpData, LPDWORD
*
lpBytes
=
0
;
/* Assume return has zero bytes */
uni_text
=
GlobalLock
(
lpData
->
hData
32
);
uni_text
=
GlobalLock
(
lpData
->
hData
);
size
=
WideCharToMultiByte
(
CP_UTF8
,
0
,
uni_text
,
-
1
,
NULL
,
0
,
NULL
,
NULL
);
...
...
@@ -1593,7 +1543,7 @@ static HANDLE X11DRV_CLIPBOARD_ExportUTF8String(LPWINE_CLIPDATA lpData, LPDWORD
done:
HeapFree
(
GetProcessHeap
(),
0
,
text
);
GlobalUnlock
(
lpData
->
hData
32
);
GlobalUnlock
(
lpData
->
hData
);
return
lpstr
;
}
...
...
@@ -1616,7 +1566,7 @@ static HANDLE X11DRV_CLIPBOARD_ExportCompoundText(Display *display, Window reque
UINT
size
;
LPWSTR
uni_text
;
uni_text
=
GlobalLock
(
lpData
->
hData
32
);
uni_text
=
GlobalLock
(
lpData
->
hData
);
size
=
WideCharToMultiByte
(
CP_UNIXCP
,
0
,
uni_text
,
-
1
,
NULL
,
0
,
NULL
,
NULL
);
lpstr
=
HeapAlloc
(
GetProcessHeap
(),
0
,
size
);
...
...
@@ -1634,7 +1584,7 @@ static HANDLE X11DRV_CLIPBOARD_ExportCompoundText(Display *display, Window reque
}
lpstr
[
j
]
=
'\0'
;
GlobalUnlock
(
lpData
->
hData
32
);
GlobalUnlock
(
lpData
->
hData
);
if
(
aTarget
==
x11drv_atom
(
COMPOUND_TEXT
))
style
=
XCompoundTextStyle
;
...
...
@@ -1705,7 +1655,7 @@ static HANDLE X11DRV_CLIPBOARD_ExportXAPIXMAP(Display *display, Window requestor
{
/* For convert from packed DIB to Pixmap */
hdc
=
GetDC
(
0
);
lpdata
->
drvData
=
(
UINT
)
X11DRV_DIB_CreatePixmapFromDIB
(
lpdata
->
hData
32
,
hdc
);
lpdata
->
drvData
=
(
UINT
)
X11DRV_DIB_CreatePixmapFromDIB
(
lpdata
->
hData
,
hdc
);
ReleaseDC
(
0
,
hdc
);
}
...
...
@@ -1744,7 +1694,7 @@ static HANDLE X11DRV_CLIPBOARD_ExportImageBmp(Display *display, Window requestor
return
0
;
}
hpackeddib
=
lpdata
->
hData
32
;
hpackeddib
=
lpdata
->
hData
;
dibdata
=
GlobalLock
(
hpackeddib
);
if
(
!
dibdata
)
...
...
@@ -1804,7 +1754,7 @@ static HANDLE X11DRV_CLIPBOARD_ExportMetaFilePict(Display *display, Window reque
return
0
;
}
return
X11DRV_CLIPBOARD_SerializeMetafile
(
CF_METAFILEPICT
,
lpdata
->
hData
32
,
lpBytes
,
TRUE
);
return
X11DRV_CLIPBOARD_SerializeMetafile
(
CF_METAFILEPICT
,
lpdata
->
hData
,
lpBytes
,
TRUE
);
}
...
...
@@ -1822,7 +1772,7 @@ static HANDLE X11DRV_CLIPBOARD_ExportEnhMetaFile(Display *display, Window reques
return
0
;
}
return
X11DRV_CLIPBOARD_SerializeMetafile
(
CF_ENHMETAFILE
,
lpdata
->
hData
32
,
lpBytes
,
TRUE
);
return
X11DRV_CLIPBOARD_SerializeMetafile
(
CF_ENHMETAFILE
,
lpdata
->
hData
,
lpBytes
,
TRUE
);
}
...
...
@@ -1873,7 +1823,7 @@ static HANDLE X11DRV_CLIPBOARD_ExportTextHtml(Display *display, Window requestor
return
0
;
}
hdata
=
lpdata
->
hData
32
;
hdata
=
lpdata
->
hData
;
datasize
=
GlobalSize
(
hdata
);
...
...
@@ -2009,7 +1959,7 @@ static VOID X11DRV_CLIPBOARD_InsertSelectionProperties(Display *display, Atom* p
{
TRACE
(
"Atom#%d Property(%d): --> FormatID(%04x) %s
\n
"
,
i
,
lpFormat
->
drvData
,
lpFormat
->
wFormatID
,
debugstr_w
(
lpFormat
->
Name
));
X11DRV_CLIPBOARD_InsertClipboardData
(
lpFormat
->
wFormatID
,
0
,
0
,
0
,
lpFormat
,
FALSE
);
X11DRV_CLIPBOARD_InsertClipboardData
(
lpFormat
->
wFormatID
,
0
,
0
,
lpFormat
,
FALSE
);
lpFormat
=
X11DRV_CLIPBOARD_LookupProperty
(
lpFormat
,
properties
[
i
]);
}
}
...
...
@@ -2052,7 +2002,7 @@ static VOID X11DRV_CLIPBOARD_InsertSelectionProperties(Display *display, Atom* p
}
TRACE
(
"Atom#%d Property(%d): --> FormatID(%04x) %s
\n
"
,
i
,
lpFormat
->
drvData
,
lpFormat
->
wFormatID
,
debugstr_w
(
lpFormat
->
Name
));
X11DRV_CLIPBOARD_InsertClipboardData
(
lpFormat
->
wFormatID
,
0
,
0
,
0
,
lpFormat
,
FALSE
);
X11DRV_CLIPBOARD_InsertClipboardData
(
lpFormat
->
wFormatID
,
0
,
0
,
lpFormat
,
FALSE
);
}
wine_tsx11_lock
();
for
(
i
=
0
;
i
<
nb_atoms
;
i
++
)
XFree
(
names
[
i
]
);
...
...
@@ -2249,7 +2199,7 @@ static BOOL X11DRV_CLIPBOARD_ReadSelectionData(Display *display, LPWINE_CLIPDATA
HANDLE
hData
=
lpData
->
lpFormat
->
lpDrvImportFunc
(
display
,
xe
.
xselection
.
requestor
,
xe
.
xselection
.
property
);
bRet
=
X11DRV_CLIPBOARD_InsertClipboardData
(
lpData
->
wFormatID
,
0
,
hData
,
0
,
lpData
->
lpFormat
,
TRUE
);
bRet
=
X11DRV_CLIPBOARD_InsertClipboardData
(
lpData
->
wFormatID
,
hData
,
0
,
lpData
->
lpFormat
,
TRUE
);
}
else
{
...
...
@@ -2772,7 +2722,7 @@ void CDECL X11DRV_EmptyClipboard(BOOL keepunowned)
/**************************************************************************
* X11DRV_SetClipboardData
*/
BOOL
CDECL
X11DRV_SetClipboardData
(
UINT
wFormat
,
HANDLE
16
hData16
,
HANDLE
hData32
,
BOOL
owner
)
BOOL
CDECL
X11DRV_SetClipboardData
(
UINT
wFormat
,
HANDLE
hData
,
BOOL
owner
)
{
DWORD
flags
=
0
;
BOOL
bResult
=
TRUE
;
...
...
@@ -2786,7 +2736,7 @@ BOOL CDECL X11DRV_SetClipboardData(UINT wFormat, HANDLE16 hData16, HANDLE hData3
X11DRV_CLIPBOARD_UpdateCache
(
&
cbinfo
);
if
(
(
!
hData16
&&
!
hData32
)
||
if
(
!
hData
||
((
lpRender
=
X11DRV_CLIPBOARD_LookupData
(
wFormat
))
&&
!
(
lpRender
->
wFlags
&
CF_FLAG_UNOWNED
)))
bResult
=
FALSE
;
...
...
@@ -2794,7 +2744,7 @@ BOOL CDECL X11DRV_SetClipboardData(UINT wFormat, HANDLE16 hData16, HANDLE hData3
flags
=
CF_FLAG_UNOWNED
;
}
bResult
&=
X11DRV_CLIPBOARD_InsertClipboardData
(
wFormat
,
hData
16
,
hData32
,
flags
,
NULL
,
TRUE
);
bResult
&=
X11DRV_CLIPBOARD_InsertClipboardData
(
wFormat
,
hData
,
flags
,
NULL
,
TRUE
);
return
bResult
;
}
...
...
@@ -2868,7 +2818,7 @@ BOOL CDECL X11DRV_IsClipboardFormatAvailable(UINT wFormat)
/**************************************************************************
* GetClipboardData (USER.142)
*/
BOOL
CDECL
X11DRV_GetClipboardData
(
UINT
wFormat
,
HANDLE16
*
phData16
,
HANDLE
*
phData32
)
HANDLE
CDECL
X11DRV_GetClipboardData
(
UINT
wFormat
)
{
CLIPBOARDINFO
cbinfo
;
LPWINE_CLIPDATA
lpRender
;
...
...
@@ -2879,87 +2829,11 @@ BOOL CDECL X11DRV_GetClipboardData(UINT wFormat, HANDLE16* phData16, HANDLE* phD
if
((
lpRender
=
X11DRV_CLIPBOARD_LookupData
(
wFormat
)))
{
if
(
!
lpRender
->
hData
32
)
if
(
!
lpRender
->
hData
)
X11DRV_CLIPBOARD_RenderFormat
(
thread_init_display
(),
lpRender
);
/* Convert between 32 -> 16 bit data, if necessary */
if
(
lpRender
->
hData32
&&
!
lpRender
->
hData16
)
{
int
size
;
if
(
lpRender
->
wFormatID
==
CF_METAFILEPICT
)
size
=
sizeof
(
METAFILEPICT16
);
else
size
=
GlobalSize
(
lpRender
->
hData32
);
lpRender
->
hData16
=
GlobalAlloc16
(
GMEM_ZEROINIT
,
size
);
if
(
!
lpRender
->
hData16
)
ERR
(
"(%04X) -- not enough memory in 16b heap
\n
"
,
wFormat
);
else
{
if
(
lpRender
->
wFormatID
==
CF_METAFILEPICT
)
{
FIXME
(
"
\t
implement function CopyMetaFilePict32to16
\n
"
);
FIXME
(
"
\t
in the appropriate file.
\n
"
);
#ifdef SOMEONE_IMPLEMENTED_ME
CopyMetaFilePict32to16
(
GlobalLock16
(
lpRender
->
hData16
),
GlobalLock
(
lpRender
->
hData32
));
#endif
}
else
{
memcpy
(
GlobalLock16
(
lpRender
->
hData16
),
GlobalLock
(
lpRender
->
hData32
),
size
);
}
GlobalUnlock16
(
lpRender
->
hData16
);
GlobalUnlock
(
lpRender
->
hData32
);
}
}
/* Convert between 32 -> 16 bit data, if necessary */
if
(
lpRender
->
hData16
&&
!
lpRender
->
hData32
)
{
int
size
;
if
(
lpRender
->
wFormatID
==
CF_METAFILEPICT
)
size
=
sizeof
(
METAFILEPICT16
);
else
size
=
GlobalSize
(
lpRender
->
hData32
);
lpRender
->
hData32
=
GlobalAlloc
(
GMEM_ZEROINIT
|
GMEM_MOVEABLE
|
GMEM_DDESHARE
,
size
);
if
(
lpRender
->
wFormatID
==
CF_METAFILEPICT
)
{
FIXME
(
"
\t
implement function CopyMetaFilePict16to32
\n
"
);
FIXME
(
"
\t
in the appropriate file.
\n
"
);
#ifdef SOMEONE_IMPLEMENTED_ME
CopyMetaFilePict16to32
(
GlobalLock16
(
lpRender
->
hData32
),
GlobalLock
(
lpRender
->
hData16
));
#endif
}
else
{
memcpy
(
GlobalLock
(
lpRender
->
hData32
),
GlobalLock16
(
lpRender
->
hData16
),
size
);
}
GlobalUnlock
(
lpRender
->
hData32
);
GlobalUnlock16
(
lpRender
->
hData16
);
}
if
(
phData16
)
*
phData16
=
lpRender
->
hData16
;
if
(
phData32
)
*
phData32
=
lpRender
->
hData32
;
TRACE
(
" returning hData16(%04x) hData32(%p) (type %04x)
\n
"
,
lpRender
->
hData16
,
lpRender
->
hData32
,
lpRender
->
wFormatID
);
return
lpRender
->
hData16
||
lpRender
->
hData32
;
TRACE
(
" returning %p (type %04x)
\n
"
,
lpRender
->
hData
,
lpRender
->
wFormatID
);
return
lpRender
->
hData
;
}
return
0
;
...
...
@@ -3051,7 +2925,7 @@ static BOOL X11DRV_CLIPBOARD_SynthesizeData(UINT wFormatID)
}
if
(
bsyn
)
X11DRV_CLIPBOARD_InsertClipboardData
(
wFormatID
,
0
,
0
,
CF_FLAG_SYNTHESIZED
,
NULL
,
TRUE
);
X11DRV_CLIPBOARD_InsertClipboardData
(
wFormatID
,
0
,
CF_FLAG_SYNTHESIZED
,
NULL
,
TRUE
);
return
bsyn
;
}
...
...
dlls/winex11.drv/winex11.drv.spec
View file @
83b66549
...
...
@@ -91,7 +91,7 @@
@ cdecl EmptyClipboard(long) X11DRV_EmptyClipboard
@ cdecl EndClipboardUpdate() X11DRV_EndClipboardUpdate
@ cdecl EnumClipboardFormats(long) X11DRV_EnumClipboardFormats
@ cdecl GetClipboardData(long
ptr ptr
) X11DRV_GetClipboardData
@ cdecl GetClipboardData(long) X11DRV_GetClipboardData
@ cdecl GetClipboardFormatName(long ptr long) X11DRV_GetClipboardFormatName
@ cdecl GetDC(long long long ptr ptr long) X11DRV_GetDC
@ cdecl IsClipboardFormatAvailable(long) X11DRV_IsClipboardFormatAvailable
...
...
@@ -99,7 +99,7 @@
@ cdecl RegisterClipboardFormat(wstr) X11DRV_RegisterClipboardFormat
@ cdecl ReleaseDC(long long) X11DRV_ReleaseDC
@ cdecl ScrollDC(long long long ptr ptr long ptr) X11DRV_ScrollDC
@ cdecl SetClipboardData(long long long
long
) X11DRV_SetClipboardData
@ cdecl SetClipboardData(long long long) X11DRV_SetClipboardData
@ cdecl SetCapture(long long) X11DRV_SetCapture
@ cdecl SetFocus(long) X11DRV_SetFocus
@ cdecl SetLayeredWindowAttributes(long long long long) X11DRV_SetLayeredWindowAttributes
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment