1
0
mirror of https://github.com/gryf/wmaker.git synced 2025-12-19 20:38:08 +01:00

misc update relates to xdnd.

This commit is contained in:
id
1999-05-18 20:40:30 +00:00
parent 16a5105912
commit 5a7a706fc4
4 changed files with 43 additions and 48 deletions

View File

@@ -436,27 +436,7 @@ saveTimestamp(XEvent *event)
case SelectionNotify: case SelectionNotify:
LastTimestamp = event->xselection.time; LastTimestamp = event->xselection.time;
#ifdef XDND #ifdef XDND
wXDNDProcessSelection(&event->xselection); wXDNDProcessSelection(event);
{
char *retain = scr->xdestring;
for (;retain[0];retain++) {
if (retain[0] < 32) retain[0] = 32;
if (!strncmp(retain, "file:", 5)) {
int i;
for (i=0;i<5;retain[i++]=' ');
}
}
retain = scr->xdestring;
if (scr->xdestring){
if (!strncmp(scr->xdestring, "file:", 5))
scr->xdestring+=5;
}
wDockReceiveDNDDrop(scr,event);
if (retain){
XFree(retain);
scr->xdestring = NULL;
}
}
#endif #endif
break; break;
} }

View File

@@ -875,14 +875,6 @@ get_dnd_selection(WScreen *scr)
char *flat_string; char *flat_string;
int count; int count;
#ifdef XDND
if(scr->xdestring) {
/*
printf(" return %s\n",scr->xdestring);
*/
return (wstrdup(scr->xdestring));
}
#endif
result=XGetTextProperty(dpy, scr->root_win, &text_ret, _XA_DND_SELECTION); result=XGetTextProperty(dpy, scr->root_win, &text_ret, _XA_DND_SELECTION);
if (result==0 || text_ret.value==NULL || text_ret.encoding==None if (result==0 || text_ret.value==NULL || text_ret.encoding==None
@@ -936,7 +928,7 @@ ExpandOptions(WScreen *scr, char *cmdline)
char *out, *nout; char *out, *nout;
char *selection=NULL; char *selection=NULL;
char *user_input=NULL; char *user_input=NULL;
#ifdef OFFIX_DND #if defined(OFFIX_DND) || defined(XDND)
char *dropped_thing=NULL; char *dropped_thing=NULL;
#endif #endif
char tmpbuf[TMPBUFSIZE]; char tmpbuf[TMPBUFSIZE];
@@ -1047,8 +1039,13 @@ ExpandOptions(WScreen *scr, char *cmdline)
} }
break; break;
#ifdef OFFIX_DND #if defined(OFFIX_DND) || defined(XDND)
case 'd': case 'd':
#ifdef XDND
if(scr->xdestring) {
dropped_thing = wstrdup(scr->xdestring);
}
#endif
if (!dropped_thing) { if (!dropped_thing) {
dropped_thing = get_dnd_selection(scr); dropped_thing = get_dnd_selection(scr);
} }

View File

@@ -90,17 +90,20 @@ void wXDNDClearAwareness(Window window) {
} }
Bool Bool
wXDNDProcessSelection(XSelectionEvent *event) wXDNDProcessSelection(XEvent *event)
{ {
WScreen *scr = wScreenForWindow(event->requestor); WScreen *scr = wScreenForWindow(event->xselection.requestor);
char *dropdata; char *dropdata;
char *retain = scr->xdestring;
Atom ret_type; Atom ret_type;
int ret_format; int ret_format;
unsigned long ret_item; unsigned long ret_item;
unsigned long remain_byte; unsigned long remain_byte;
char * delme; char * delme;
XEvent xevent;
Window selowner = XGetSelectionOwner(dpy,_XA_XdndSelection); Window selowner = XGetSelectionOwner(dpy,_XA_XdndSelection);
XGetWindowProperty(dpy, event->requestor, _XA_WINDOWMAKER_XDNDEXCHANGE, XGetWindowProperty(dpy, event->xselection.requestor,
_XA_WINDOWMAKER_XDNDEXCHANGE,
0, 65536, True, atom_support, &ret_type, &ret_format, 0, 65536, True, atom_support, &ret_type, &ret_format,
&ret_item, &remain_byte, (unsigned char **)&delme); &ret_item, &remain_byte, (unsigned char **)&delme);
if (delme){ if (delme){
@@ -110,19 +113,34 @@ wXDNDProcessSelection(XSelectionEvent *event)
scr->xdestring=delme; scr->xdestring=delme;
} }
{ /*send finished*/
/*finished*/ memset (&xevent, 0, sizeof(xevent));
XEvent xevent; xevent.xany.type = ClientMessage;
memset (&xevent, 0, sizeof(xevent)); xevent.xany.display = dpy;
xevent.xany.type = ClientMessage; xevent.xclient.window = selowner;
xevent.xany.display = dpy; xevent.xclient.message_type = _XA_XdndFinished;
xevent.xclient.window = selowner; xevent.xclient.format = 32;
xevent.xclient.message_type = _XA_XdndFinished; XDND_FINISHED_TARGET_WIN(&xevent) = event->xselection.requestor;
xevent.xclient.format = 32; XSendEvent(dpy, selowner, 0, 0, &xevent);
XDND_FINISHED_TARGET_WIN(&xevent) = event->requestor; /*process dropping*/
XSendEvent(dpy, selowner, 0, 0, &xevent); for (;retain[0];retain++) {
} if (retain[0] < 32) retain[0] = 32;
if (!strncmp(retain, "file:", 5)) {
int i;
for (i=0;i<5;retain[i++]=' ');
}
}
retain = scr->xdestring;
if (scr->xdestring){
if (!strncmp(scr->xdestring, "file:", 5))
scr->xdestring+=5;
}
wDockReceiveDNDDrop(scr,event);
if (retain){
XFree(retain);
scr->xdestring = NULL;
}
} }
Bool Bool

View File

@@ -4,7 +4,7 @@
void wXDNDInitializeAtoms(); void wXDNDInitializeAtoms();
Bool wXDNDProcessSelection(XSelectionEvent *event); Bool wXDNDProcessSelection(XEvent *event);
Bool wXDNDProcessClientMessage(XClientMessageEvent *event); Bool wXDNDProcessClientMessage(XClientMessageEvent *event);
void wXDNDMakeAwareness(Window window); void wXDNDMakeAwareness(Window window);
void wXDNDClearAwareness(Window window); void wXDNDClearAwareness(Window window);