aewl
diff util.c @ 11:ea9c08ec4b48
added gridsel to gridwm
author | Anselm R. Garbe <garbeam@wmii.de> |
---|---|
date | Tue, 11 Jul 2006 13:21:57 +0200 |
parents | d567f430a81d |
children | 5c078b66347b |
line diff
1.1 --- a/util.c Tue Jul 11 13:02:22 2006 +0200 1.2 +++ b/util.c Tue Jul 11 13:21:57 2006 +0200 1.3 @@ -10,6 +10,7 @@ 1.4 #include <sys/types.h> 1.5 #include <sys/wait.h> 1.6 #include <unistd.h> 1.7 +#include <X11/Xatom.h> 1.8 1.9 #include "util.h" 1.10 1.11 @@ -147,3 +148,40 @@ 1.12 } 1.13 wait(0); 1.14 } 1.15 + 1.16 + 1.17 +unsigned char * 1.18 +getselection(unsigned long offset, unsigned long *len, unsigned long *remain) 1.19 +{ 1.20 + Display *dpy; 1.21 + Atom xa_clip_string; 1.22 + Window w; 1.23 + XEvent ev; 1.24 + Atom typeret; 1.25 + int format; 1.26 + unsigned char *data; 1.27 + unsigned char *result = NULL; 1.28 + 1.29 + dpy = XOpenDisplay(0); 1.30 + if(!dpy) 1.31 + return NULL; 1.32 + xa_clip_string = XInternAtom(dpy, "_SEL_STRING", False); 1.33 + w = XCreateSimpleWindow(dpy, DefaultRootWindow(dpy), 10, 10, 200, 200, 1.34 + 1, CopyFromParent, CopyFromParent); 1.35 + XConvertSelection(dpy, XA_PRIMARY, XA_STRING, xa_clip_string, 1.36 + w, CurrentTime); 1.37 + XFlush(dpy); 1.38 + XNextEvent(dpy, &ev); 1.39 + if(ev.type == SelectionNotify && ev.xselection.property != None) { 1.40 + XGetWindowProperty(dpy, w, ev.xselection.property, offset, 4096L, False, 1.41 + AnyPropertyType, &typeret, &format, len, remain, &data); 1.42 + if(*len) { 1.43 + result = emalloc(sizeof(unsigned char) * *len); 1.44 + memcpy(result, data, *len); 1.45 + } 1.46 + XDeleteProperty(dpy, w, ev.xselection.property); 1.47 + } 1.48 + XDestroyWindow(dpy, w); 1.49 + XCloseDisplay(dpy); 1.50 + return result; 1.51 +}