From 84ec8f14274814b66ce8762cfe7acb7ed3665da8 Mon Sep 17 00:00:00 2001 From: deuce <> Date: Mon, 24 Jan 2005 01:34:53 +0000 Subject: [PATCH] When pasting, if you're the primary selection owner, do not go through the X server. --- src/conio/console.c | 25 ++++++++++++++++++------- 1 file changed, 18 insertions(+), 7 deletions(-) diff --git a/src/conio/console.c b/src/conio/console.c index ae4d1d6ecb..5e8883b180 100644 --- a/src/conio/console.c +++ b/src/conio/console.c @@ -1014,23 +1014,34 @@ video_async_event(void *crap) x11.XSetSelectionOwner(dpy, XA_PRIMARY, win, CurrentTime); } if(!sem_trywait(&pastebuf_request)) { - Window sowner; + Window sowner=None; int format; unsigned long len, bytes_left, dummy; Atom type; sowner=x11.XGetSelectionOwner(dpy, XA_PRIMARY); if(sowner != None) { - x11.XConvertSelection(dpy, XA_PRIMARY, XA_STRING, None, sowner, CurrentTime); - x11.XFlush(dpy); - x11.XGetWindowProperty(dpy, sowner, XA_STRING, 0, 0, 0, AnyPropertyType, &type, &format, &len, &bytes_left, (unsigned char **)(&pastebuf)); - if(bytes_left > 0) - x11.XGetWindowProperty(dpy,sowner,XA_STRING,0,bytes_left,0,AnyPropertyType,&type,&format,&len,&dummy,(unsigned char **)&pastebuf); + if(sowner==win) { + /* Get your own primary selection */ + pastebuf=(unsigned char *)malloc(strlen(copybuf)+1); + if(pastebuf!=NULL) + strcpy(pastebuf,copybuf); + } + else { + x11.XConvertSelection(dpy, XA_PRIMARY, XA_STRING, None, sowner, CurrentTime); + x11.XFlush(dpy); + x11.XGetWindowProperty(dpy, sowner, XA_STRING, 0, 0, 0, AnyPropertyType, &type, &format, &len, &bytes_left, (unsigned char **)(&pastebuf)); + if(bytes_left > 0) + x11.XGetWindowProperty(dpy,sowner,XA_STRING,0,bytes_left,0,AnyPropertyType,&type,&format,&len,&dummy,(unsigned char **)&pastebuf); + } } /* Set paste buffer */ sem_post(&pastebuf_set); sem_wait(&pastebuf_request); - x11.XFree(pastebuf); + if(sowner==win) + free(pastebuf); + else + x11.XFree(pastebuf); } break; default: -- GitLab