Skip to content

Commit

Permalink
Fixed bug 2676 - xdnd_version check issue in case ClientMessage
Browse files Browse the repository at this point in the history
Nitz

I added xdnd_version check to XdndPosition case also
under DEBUG_XEVENTS macro.
by this we can get the action requested by user.

I analysed further and found out that removing xdnd_version check at XdndDrop case is a bad idea because
in XConvertSelection API timestamp should be passed if(xdnd_version >= 1)
otherwise CurrentTime should be passed
So xdnd_version check is important at XdndDrop case

I made xdnd_version as a static so that it can store the version in other cases also.
  • Loading branch information
slouken committed Nov 28, 2014
1 parent 7ed41da commit 767bb36
Showing 1 changed file with 17 additions and 1 deletion.
18 changes: 17 additions & 1 deletion src/video/x11/SDL_x11events.c
Expand Up @@ -866,12 +866,19 @@ X11_DispatchEvent(_THIS)
/* Have we been requested to quit (or another client message?) */
case ClientMessage:{

int xdnd_version=0;
static int xdnd_version=0;

if (xevent.xclient.message_type == videodata->XdndEnter) {

SDL_bool use_list = xevent.xclient.data.l[1] & 1;
data->xdnd_source = xevent.xclient.data.l[0];
xdnd_version = ( xevent.xclient.data.l[1] >> 24);
#ifdef DEBUG_XEVENTS
printf("XID of source window : %ld\n", data->xdnd_source);
printf("Protocol version to use : %ld\n", xdnd_version);
printf("More then 3 data types : %ld\n", use_list);
#endif

if (use_list) {
/* fetch conversion targets */
SDL_x11Prop p;
Expand All @@ -885,6 +892,15 @@ X11_DispatchEvent(_THIS)
}
}
else if (xevent.xclient.message_type == videodata->XdndPosition) {

#ifdef DEBUG_XEVENTS
Atom act= videodata->XdndActionCopy;
if(xdnd_version >= 2) {
act = xevent.xclient.data.l[4];
}
printf("Action requested by user is : %s\n", X11_XGetAtomName(display , act));
#endif


/* reply with status */
memset(&m, 0, sizeof(XClientMessageEvent));
Expand Down

0 comments on commit 767bb36

Please sign in to comment.