comparison 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
comparison
equal deleted inserted replaced
10:703255003abb 11:ea9c08ec4b48
8 #include <stdlib.h> 8 #include <stdlib.h>
9 #include <string.h> 9 #include <string.h>
10 #include <sys/types.h> 10 #include <sys/types.h>
11 #include <sys/wait.h> 11 #include <sys/wait.h>
12 #include <unistd.h> 12 #include <unistd.h>
13 #include <X11/Xatom.h>
13 14
14 #include "util.h" 15 #include "util.h"
15 16
16 static char *shell = NULL; 17 static char *shell = NULL;
17 18
145 close(pfd[0]); 146 close(pfd[0]);
146 buf[n - 1] = 0; 147 buf[n - 1] = 0;
147 } 148 }
148 wait(0); 149 wait(0);
149 } 150 }
151
152
153 unsigned char *
154 getselection(unsigned long offset, unsigned long *len, unsigned long *remain)
155 {
156 Display *dpy;
157 Atom xa_clip_string;
158 Window w;
159 XEvent ev;
160 Atom typeret;
161 int format;
162 unsigned char *data;
163 unsigned char *result = NULL;
164
165 dpy = XOpenDisplay(0);
166 if(!dpy)
167 return NULL;
168 xa_clip_string = XInternAtom(dpy, "_SEL_STRING", False);
169 w = XCreateSimpleWindow(dpy, DefaultRootWindow(dpy), 10, 10, 200, 200,
170 1, CopyFromParent, CopyFromParent);
171 XConvertSelection(dpy, XA_PRIMARY, XA_STRING, xa_clip_string,
172 w, CurrentTime);
173 XFlush(dpy);
174 XNextEvent(dpy, &ev);
175 if(ev.type == SelectionNotify && ev.xselection.property != None) {
176 XGetWindowProperty(dpy, w, ev.xselection.property, offset, 4096L, False,
177 AnyPropertyType, &typeret, &format, len, remain, &data);
178 if(*len) {
179 result = emalloc(sizeof(unsigned char) * *len);
180 memcpy(result, data, *len);
181 }
182 XDeleteProperty(dpy, w, ev.xselection.property);
183 }
184 XDestroyWindow(dpy, w);
185 XCloseDisplay(dpy);
186 return result;
187 }