diff --git a/src/conio/console.c b/src/conio/console.c index ae4d1d6ecbf3a036631d6e21ba86f7b42ed57139..5e8883b180e7cc86ccda2545c0f2e578e30b98dc 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: