From 26e134b8a7dae21a699822009674b3131de6e250 Mon Sep 17 00:00:00 2001 From: "Anselm R. Garbe" Date: Tue, 11 Jul 2006 13:21:57 +0200 Subject: added gridsel to gridwm --- util.c | 38 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 38 insertions(+) (limited to 'util.c') 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; +} -- cgit v1.2.3