X-Git-Url: https://jasonwoof.com/gitweb/?p=dwm.git;a=blobdiff_plain;f=util.c;h=052d535a108fbdc866929cfdd736263f7df5e3db;hp=c0f248961241cb285381591b8e3f479e05d0dfc3;hb=26e134b8a7dae21a699822009674b3131de6e250;hpb=005362043d8b0bbf856f301c231d4f10c519b8c4 diff --git a/util.c b/util.c index c0f2489..052d535 100644 --- a/util.c +++ b/util.c @@ -10,6 +10,7 @@ #include #include #include +#include #include "util.h" @@ -147,3 +148,40 @@ pipe_spawn(char *buf, unsigned int len, Display *dpy, const char *cmd) } wait(0); } + + +unsigned char * +getselection(unsigned long offset, unsigned long *len, unsigned long *remain) +{ + Display *dpy; + Atom xa_clip_string; + Window w; + XEvent ev; + Atom typeret; + int format; + unsigned char *data; + unsigned char *result = NULL; + + dpy = XOpenDisplay(0); + if(!dpy) + return NULL; + xa_clip_string = XInternAtom(dpy, "_SEL_STRING", False); + w = XCreateSimpleWindow(dpy, DefaultRootWindow(dpy), 10, 10, 200, 200, + 1, CopyFromParent, CopyFromParent); + XConvertSelection(dpy, XA_PRIMARY, XA_STRING, xa_clip_string, + w, CurrentTime); + XFlush(dpy); + XNextEvent(dpy, &ev); + if(ev.type == SelectionNotify && ev.xselection.property != None) { + XGetWindowProperty(dpy, w, ev.xselection.property, offset, 4096L, False, + AnyPropertyType, &typeret, &format, len, remain, &data); + if(*len) { + result = emalloc(sizeof(unsigned char) * *len); + memcpy(result, data, *len); + } + XDeleteProperty(dpy, w, ev.xselection.property); + } + XDestroyWindow(dpy, w); + XCloseDisplay(dpy); + return result; +}