]> Dogcows Code - chaz/openbox/blobdiff - tests/extentsrequest.c
Fix the EXTENTS reported on window frames.
[chaz/openbox] / tests / extentsrequest.c
index 3fb0c7ac80ba1bec0dd68344bcd9fd47014aa323..055624d5d35468a64b7cb128773b9c6a95514770 100644 (file)
 #include <X11/Xlib.h>
 #include <X11/Xatom.h>
 
-int main () {
-  Display   *display;
-  Window     win;
-  XEvent     report;
-  Atom       _request, _extents, _type, _normal, _desktop;
+void request (Display *display, Atom _request, Atom _extents, Window win) {
   XEvent     msg;
-  int        x=10,y=10,h=100,w=400;
-
-  display = XOpenDisplay(NULL);
-
-  if (display == NULL) {
-    fprintf(stderr, "couldn't connect to X server :0\n");
-    return 0;
-  }
-
-  _type = XInternAtom(display, "_NET_WM_WINDOW_TYPE", False);
-  _normal = XInternAtom(display, "_NET_WM_WINDOW_TYPE_NORMAL", False);
-  _desktop = XInternAtom(display, "_NET_WM_WINDOW_TYPE_DESKTOP", False);
-  _request = XInternAtom(display, "_NET_REQUEST_FRAME_EXTENTS", False);
-  _extents = XInternAtom(display, "_NET_FRAME_EXTENTS", False);
-
-  win = XCreateWindow(display, RootWindow(display, 0),
-                     x, y, w, h, 10, CopyFromParent, CopyFromParent,
-                     CopyFromParent, 0, NULL);
-  XSelectInput(display, win, PropertyChangeMask);
-
-  printf("requesting for type normal\n");
-  XChangeProperty(display, win, _type, XA_ATOM, 32,
-                  PropModeReplace, (unsigned char*)&_normal, 1);
   msg.xclient.type = ClientMessage;
   msg.xclient.message_type = _request;
   msg.xclient.display = display;
@@ -63,9 +36,12 @@ int main () {
   XSendEvent(display, RootWindow(display, 0), False,
              SubstructureNotifyMask | SubstructureRedirectMask, &msg);
   XFlush(display);
+}
 
-  printf("waiting for extents\n");
+void reply (Display* display, Atom _extents) {
+  printf("  waiting for extents\n");
   while (1) {
+    XEvent     report;
     XNextEvent(display, &report);
 
     if (report.type == PropertyNotify &&
@@ -75,57 +51,83 @@ int main () {
         int ret_format;
         unsigned long ret_items, ret_bytesleft;
         unsigned long *prop_return;
-        XGetWindowProperty(display, win, _extents, 0, 4,
+        XGetWindowProperty(display, report.xproperty.window, _extents, 0, 4,
                            False, XA_CARDINAL, &ret_type, &ret_format,
                            &ret_items, &ret_bytesleft,
                            (unsigned char**) &prop_return);
         if (ret_type == XA_CARDINAL && ret_format == 32 && ret_items == 4)
-            printf("got new extents %d, %d, %d, %d\n",
+            printf("  got new extents %d, %d, %d, %d\n",
                    prop_return[0], prop_return[1], prop_return[2],
                    prop_return[3]);
         break;
     }
   }
+}
 
-  printf("requesting for type desktop\n");
-  XChangeProperty(display, win, _type, XA_ATOM, 32,
-                  PropModeReplace, (unsigned char*)&_desktop, 1);
-  msg.xclient.type = ClientMessage;
-  msg.xclient.message_type = _request;
-  msg.xclient.display = display;
-  msg.xclient.window = win;
-  msg.xclient.format = 32;
-  msg.xclient.data.l[0] = 0l;
-  msg.xclient.data.l[1] = 0l;
-  msg.xclient.data.l[2] = 0l;
-  msg.xclient.data.l[3] = 0l;
-  msg.xclient.data.l[4] = 0l;
-  XSendEvent(display, RootWindow(display, 0), False,
-            SubstructureNotifyMask | SubstructureRedirectMask, &msg);
-  XFlush(display);
+int main () {
+  Display   *display;
+  Window     win;
+  Atom       _request, _extents, _type, _normal, _desktop, _state;
+  Atom       _state_fs, _state_mh, _state_mv;
+  int        x=10,y=10,h=100,w=400;
 
-  printf("waiting for extents\n");
-  while (1) {
-    XNextEvent(display, &report);
+  display = XOpenDisplay(NULL);
 
-    if (report.type == PropertyNotify &&
-        report.xproperty.atom == _extents)
-    {
-        Atom ret_type;
-        int ret_format;
-        unsigned long ret_items, ret_bytesleft;
-        unsigned long *prop_return;
-        XGetWindowProperty(display, win, _extents, 0, 4,
-                           False, XA_CARDINAL, &ret_type, &ret_format,
-                           &ret_items, &ret_bytesleft,
-                           (unsigned char**) &prop_return);
-        if (ret_type == XA_CARDINAL && ret_format == 32 && ret_items == 4)
-            printf("got new extents %d, %d, %d, %d\n",
-                   prop_return[0], prop_return[1], prop_return[2],
-                   prop_return[3]);
-        break;
-    }
+  if (display == NULL) {
+    fprintf(stderr, "couldn't connect to X server :0\n");
+    return 0;
   }
 
+  _type = XInternAtom(display, "_NET_WM_WINDOW_TYPE", False);
+  _normal = XInternAtom(display, "_NET_WM_WINDOW_TYPE_NORMAL", False);
+  _desktop = XInternAtom(display, "_NET_WM_WINDOW_TYPE_DESKTOP", False);
+  _request = XInternAtom(display, "_NET_REQUEST_FRAME_EXTENTS", False);
+  _extents = XInternAtom(display, "_NET_FRAME_EXTENTS", False);
+  _state = XInternAtom(display, "_NET_WM_STATE", False);
+  _state_fs = XInternAtom(display, "_NET_WM_STATE_FULLSCREEN", False);
+  _state_mh = XInternAtom(display, "_NET_WM_STATE_MAXIMIZED_HORZ", False);
+  _state_mv = XInternAtom(display, "_NET_WM_STATE_MAXIMIZED_VERT", False);
+
+  win = XCreateWindow(display, RootWindow(display, 0),
+                     x, y, w, h, 10, CopyFromParent, CopyFromParent,
+                     CopyFromParent, 0, NULL);
+  XSelectInput(display, win, PropertyChangeMask);
+
+  printf("requesting for type normal\n");
+  XChangeProperty(display, win, _type, XA_ATOM, 32,
+                  PropModeReplace, (unsigned char*)&_normal, 1);
+  request(display, _request, _extents, win);
+  reply(display, _extents);
+
+  printf("requesting for type normal+fullscreen\n");
+  XChangeProperty(display, win, _type, XA_ATOM, 32,
+                  PropModeReplace, (unsigned char*)&_normal, 1);
+  XChangeProperty(display, win, _state, XA_ATOM, 32,
+                  PropModeReplace, (unsigned char*)&_state_fs, 1);
+  request(display, _request, _extents, win);
+  reply(display, _extents);
+
+  printf("requesting for type normal+maxv\n");
+  XChangeProperty(display, win, _type, XA_ATOM, 32,
+                  PropModeReplace, (unsigned char*)&_normal, 1);
+  XChangeProperty(display, win, _state, XA_ATOM, 32,
+                  PropModeReplace, (unsigned char*)&_state_mv, 1);
+  request(display, _request, _extents, win);
+  reply(display, _extents);
+
+  printf("requesting for type normal+maxh\n");
+  XChangeProperty(display, win, _type, XA_ATOM, 32,
+                  PropModeReplace, (unsigned char*)&_normal, 1);
+  XChangeProperty(display, win, _state, XA_ATOM, 32,
+                  PropModeReplace, (unsigned char*)&_state_mh, 1);
+  request(display, _request, _extents, win);
+  reply(display, _extents);
+
+  printf("requesting for type desktop\n");
+  XChangeProperty(display, win, _type, XA_ATOM, 32,
+                  PropModeReplace, (unsigned char*)&_desktop, 1);
+  request(display, _request, _extents, win);
+  reply(display, _extents);
+
   return 1;
 }
This page took 0.028175 seconds and 4 git commands to generate.