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
30e17220
Commit
30e17220
authored
May 01, 2022
by
Jacek Caban
Committed by
Alexandre Julliard
May 03, 2022
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
winex11: Use import_text_uri_list code in EVENT_DropURLs.
Signed-off-by:
Jacek Caban
<
jacek@codeweavers.com
>
Signed-off-by:
Alexandre Julliard
<
julliard@winehq.org
>
parent
0e37ee61
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
54 additions
and
82 deletions
+54
-82
clipboard.c
dlls/winex11.drv/clipboard.c
+13
-4
event.c
dlls/winex11.drv/event.c
+40
-78
x11drv.h
dlls/winex11.drv/x11drv.h
+1
-0
No files found.
dlls/winex11.drv/clipboard.c
View file @
30e17220
...
...
@@ -1043,11 +1043,9 @@ static void *import_text_html( Atom type, const void *data, size_t size, size_t
/**************************************************************************
* import_text_uri_list
*
* Import text/uri-list.
* uri_list_to_drop_files
*/
static
void
*
import_text_uri_list
(
Atom
type
,
const
void
*
data
,
size_t
size
,
size_t
*
ret_size
)
void
*
uri_list_to_drop_files
(
const
void
*
data
,
size_t
size
,
size_t
*
ret_size
)
{
const
char
*
uriList
=
data
;
char
*
uri
;
...
...
@@ -1122,6 +1120,17 @@ static void *import_text_uri_list( Atom type, const void *data, size_t size, siz
/**************************************************************************
* import_text_uri_list
*
* Import text/uri-list.
*/
static
void
*
import_text_uri_list
(
Atom
type
,
const
void
*
data
,
size_t
size
,
size_t
*
ret_size
)
{
return
uri_list_to_drop_files
(
data
,
size
,
ret_size
);
}
/**************************************************************************
* import_targets
*
* Import TARGETS and mark the corresponding clipboard formats as available.
...
...
dlls/winex11.drv/event.c
View file @
30e17220
...
...
@@ -1476,6 +1476,20 @@ static HWND find_drop_window( HWND hQueryWnd, LPPOINT lpPt )
return
hQueryWnd
;
}
static
void
post_drop
(
HWND
hwnd
,
DROPFILES
*
drop
,
ULONG
size
)
{
HDROP
handle
;
if
((
handle
=
GlobalAlloc
(
GMEM_SHARE
,
size
)))
{
DROPFILES
*
ptr
=
GlobalLock
(
handle
);
memcpy
(
ptr
,
drop
,
size
);
ptr
->
fWide
=
TRUE
;
GlobalUnlock
(
handle
);
PostMessageW
(
hwnd
,
WM_DROPFILES
,
(
WPARAM
)
handle
,
0
);
}
}
/**********************************************************************
* EVENT_DropFromOffix
*
...
...
@@ -1573,14 +1587,11 @@ static void EVENT_DropURLs( HWND hWnd, XClientMessageEvent *event )
{
struct
x11drv_win_data
*
win_data
;
unsigned
long
data_length
;
unsigned
long
aux_long
,
drop_len
=
0
;
unsigned
long
aux_long
;
unsigned
char
*
p_data
=
NULL
;
/* property data */
char
*
p_drop
=
NULL
;
char
*
p
,
*
next
;
int
x
,
y
;
POINT
pos
;
DROPFILES
*
lpDrop
;
HDROP
hDrop
;
DROPFILES
*
drop
;
int
format
;
union
{
Atom
atom_aux
;
int
i
;
...
...
@@ -1592,87 +1603,38 @@ static void EVENT_DropURLs( HWND hWnd, XClientMessageEvent *event )
XGetWindowProperty
(
event
->
display
,
DefaultRootWindow
(
event
->
display
),
x11drv_atom
(
DndSelection
),
0
,
65535
,
FALSE
,
AnyPropertyType
,
&
u
.
atom_aux
,
&
u
.
i
,
AnyPropertyType
,
&
u
.
atom_aux
,
&
format
,
&
data_length
,
&
aux_long
,
&
p_data
);
if
(
aux_long
)
WARN
(
"property too large, truncated!
\n
"
);
TRACE
(
"urls=%s
\n
"
,
p_data
);
if
(
!
aux_long
&&
p_data
)
{
/* don't bother if > 64K */
/* calculate length */
p
=
(
char
*
)
p_data
;
next
=
strchr
(
p
,
'\n'
);
while
(
p
)
{
if
(
next
)
*
next
=
0
;
if
(
strncmp
(
p
,
"file:"
,
5
)
==
0
)
{
INT
len
=
GetShortPathNameA
(
p
+
5
,
NULL
,
0
);
if
(
len
)
drop_len
+=
len
+
1
;
}
if
(
next
)
{
*
next
=
'\n'
;
p
=
next
+
1
;
next
=
strchr
(
p
,
'\n'
);
}
else
{
p
=
NULL
;
}
}
if
(
drop_len
&&
drop_len
<
65535
)
{
XQueryPointer
(
event
->
display
,
root_window
,
&
u
.
w_aux
,
&
u
.
w_aux
,
&
x
,
&
y
,
&
u
.
i
,
&
u
.
i
,
&
u
.
u
);
pos
=
root_to_virtual_screen
(
x
,
y
);
drop_len
+=
sizeof
(
DROPFILES
)
+
1
;
hDrop
=
GlobalAlloc
(
GMEM_SHARE
,
drop_len
);
lpDrop
=
GlobalLock
(
hDrop
);
if
(
!
aux_long
&&
p_data
)
/* don't bother if > 64K */
{
size_t
drop_size
;
drop
=
uri_list_to_drop_files
(
p_data
,
get_property_size
(
format
,
data_length
),
&
drop_size
);
if
(
lpDrop
&&
(
win_data
=
get_win_data
(
hWnd
))
)
if
(
drop
)
{
lpDrop
->
pFiles
=
sizeof
(
DROPFILES
);
lpDrop
->
pt
=
pos
;
lpDrop
->
fNC
=
(
pos
.
x
<
(
win_data
->
client_rect
.
left
-
win_data
->
whole_rect
.
left
)
||
pos
.
y
<
(
win_data
->
client_rect
.
top
-
win_data
->
whole_rect
.
top
)
||
pos
.
x
>
(
win_data
->
client_rect
.
right
-
win_data
->
whole_rect
.
left
)
||
pos
.
y
>
(
win_data
->
client_rect
.
bottom
-
win_data
->
whole_rect
.
top
)
);
lpDrop
->
fWide
=
FALSE
;
p_drop
=
(
char
*
)(
lpDrop
+
1
);
release_win_data
(
win_data
);
XQueryPointer
(
event
->
display
,
root_window
,
&
u
.
w_aux
,
&
u
.
w_aux
,
&
x
,
&
y
,
&
u
.
i
,
&
u
.
i
,
&
u
.
u
);
drop
->
pt
=
root_to_virtual_screen
(
x
,
y
);
if
((
win_data
=
get_win_data
(
hWnd
)))
{
drop
->
fNC
=
(
drop
->
pt
.
x
<
(
win_data
->
client_rect
.
left
-
win_data
->
whole_rect
.
left
)
||
drop
->
pt
.
y
<
(
win_data
->
client_rect
.
top
-
win_data
->
whole_rect
.
top
)
||
drop
->
pt
.
x
>
(
win_data
->
client_rect
.
right
-
win_data
->
whole_rect
.
left
)
||
drop
->
pt
.
y
>
(
win_data
->
client_rect
.
bottom
-
win_data
->
whole_rect
.
top
)
);
release_win_data
(
win_data
);
}
post_drop
(
hWnd
,
drop
,
drop_size
);
free
(
drop
);
}
/* create message content */
if
(
p_drop
)
{
p
=
(
char
*
)
p_data
;
next
=
strchr
(
p
,
'\n'
);
while
(
p
)
{
if
(
next
)
*
next
=
0
;
if
(
strncmp
(
p
,
"file:"
,
5
)
==
0
)
{
INT
len
=
GetShortPathNameA
(
p
+
5
,
p_drop
,
65535
);
if
(
len
)
{
TRACE
(
"drop file %s as %s
\n
"
,
p
+
5
,
p_drop
);
p_drop
+=
len
+
1
;
}
else
{
WARN
(
"can't convert file %s to dos name
\n
"
,
p
+
5
);
}
}
else
{
WARN
(
"unknown mime type %s
\n
"
,
p
);
}
if
(
next
)
{
*
next
=
'\n'
;
p
=
next
+
1
;
next
=
strchr
(
p
,
'\n'
);
}
else
{
p
=
NULL
;
}
*
p_drop
=
'\0'
;
}
GlobalUnlock
(
hDrop
);
PostMessageA
(
hWnd
,
WM_DROPFILES
,
(
WPARAM
)
hDrop
,
0L
);
}
}
}
if
(
p_data
)
XFree
(
p_data
);
if
(
p_data
)
XFree
(
p_data
);
}
...
...
dlls/winex11.drv/x11drv.h
View file @
30e17220
...
...
@@ -661,6 +661,7 @@ extern void update_systray_balloon_position(void) DECLSPEC_HIDDEN;
extern
HWND
create_foreign_window
(
Display
*
display
,
Window
window
)
DECLSPEC_HIDDEN
;
extern
BOOL
update_clipboard
(
HWND
hwnd
)
DECLSPEC_HIDDEN
;
extern
void
init_win_context
(
void
)
DECLSPEC_HIDDEN
;
extern
void
*
uri_list_to_drop_files
(
const
void
*
data
,
size_t
size
,
size_t
*
ret_size
)
DECLSPEC_HIDDEN
;
static
inline
void
mirror_rect
(
const
RECT
*
window_rect
,
RECT
*
rect
)
{
...
...
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