diff options
Diffstat (limited to 'src/wm-tester/test-size-hints.c')
-rw-r--r-- | src/wm-tester/test-size-hints.c | 136 |
1 files changed, 136 insertions, 0 deletions
diff --git a/src/wm-tester/test-size-hints.c b/src/wm-tester/test-size-hints.c new file mode 100644 index 00000000..72f1b486 --- /dev/null +++ b/src/wm-tester/test-size-hints.c @@ -0,0 +1,136 @@ +#include <X11/Xlib.h> +#include <X11/Xutil.h> +#include <stdlib.h> +#include <glib.h> + +static Bool +all_events (Display *display, + XEvent *event, + XPointer arg) +{ + return True; +} + +#if 0 +static void +get_size (Display *d, Drawable draw, + int *xp, int *yp, int *widthp, int *heightp) +{ + int x, y; + unsigned int width, height, border, depth; + Window root; + + XGetGeometry (d, draw, &root, &x, &y, &width, &height, &border, &depth); + + if (xp) + *xp = x; + if (yp) + *yp = y; + if (widthp) + *widthp = width; + if (*heightp) + *heightp = height; +} +#endif + +int +main (int argc, char **argv) +{ + Display *d; + Window zero_min_size; + XSizeHints hints; + int screen; + XEvent ev; + int x, y, width, height; + Pixmap pix; + GC gc; + XGCValues gc_vals; + gboolean redraw_pending; + + d = XOpenDisplay (NULL); + + screen = DefaultScreen (d); + + x = 0; + y = 0; + width = 100; + height = 100; + + zero_min_size = XCreateSimpleWindow (d, RootWindow (d, screen), + x, y, width, height, 0, + WhitePixel (d, screen), + WhitePixel (d, screen)); + + XSelectInput (d, zero_min_size, + ButtonPressMask | ExposureMask | StructureNotifyMask); + + hints.flags = PMinSize; + + hints.min_width = 0; + hints.min_height = 0; + + XSetWMNormalHints (d, zero_min_size, &hints); + XMapWindow (d, zero_min_size); + + redraw_pending = FALSE; + while (1) + { + XNextEvent (d, &ev); + + switch (ev.xany.type) + { + case ButtonPress: + if (ev.xbutton.button == 1) + { + g_print ("Exiting on button 1 press\n"); + exit (0); + } + break; + + case ConfigureNotify: + x = ev.xconfigure.x; + y = ev.xconfigure.y; + width = ev.xconfigure.width; + height = ev.xconfigure.height; + + redraw_pending = TRUE; + break; + + case Expose: + redraw_pending = TRUE; + break; + + default: + break; + } + + /* Primitive event compression */ + if (XCheckIfEvent (d, &ev, all_events, NULL)) + { + XPutBackEvent (d, &ev); + } + else if (redraw_pending) + { + pix = XCreatePixmap (d, zero_min_size, width, height, + DefaultDepth (d, screen)); + + gc_vals.foreground = WhitePixel (d, screen); + + gc = XCreateGC (d, pix, GCForeground, &gc_vals); + + XFillRectangle (d, pix, gc, 0, 0, width, height); + + XCopyArea (d, pix, zero_min_size, gc, 0, 0, width, height, 0, 0); + + XFreePixmap (d, pix); + XFreeGC (d, gc); + + redraw_pending = FALSE; + } + } + + /* This program has an infinite loop above so a return statement would + * just cause compiler warnings. + */ +} + |