]> git.sur5r.net Git - i3/i3/commitdiff
Reply to _NET_REQUEST_FRAME_EXTENTS correctly
authorTony Crisci <tony@dubstepdish.com>
Wed, 9 Oct 2013 16:49:15 +0000 (12:49 -0400)
committerMichael Stapelberg <michael@stapelberg.de>
Wed, 9 Oct 2013 17:49:37 +0000 (19:49 +0200)
Reply to _NET_REQUEST_FRAME_EXTENTS by settings _NET_FRAME_EXTENTS
property of the window to widths of the respective borders added by i3.

fixes #1093
fixes #1069

src/handlers.c

index 084a728561ae1db27e0be907ec8f68141fccb9f5..72ef291cf96d60c30ba7e9a0f0fb92a060317606 100644 (file)
@@ -706,35 +706,26 @@ static void handle_client_message(xcb_client_message_event_t *event) {
         xcb_flush(conn);
         free(reply);
     } else if (event->type == A__NET_REQUEST_FRAME_EXTENTS) {
-        // A client can request an estimate for the frame size which the window
-        // manager will put around it before actually mapping its window. Java
-        // does this (as of openjdk-7).
-        //
-        // Note that the calculation below is not entirely accurate — once you
-        // set a different border type, it’s off. We _could_ request all the
-        // window properties (which have to be set up at this point according
-        // to EWMH), but that seems rather elaborate. The standard explicitly
-        // says the application must cope with an estimate that is not entirely
-        // accurate.
+        /*
+         * A client can request an estimate for the frame size which the window
+         * manager will put around it before actually mapping its window. Java
+         * does this (as of openjdk-7).
+         *
+         * Note that the calculation below is not entirely accurate — once you
+         * set a different border type, it’s off. We _could_ request all the
+         * window properties (which have to be set up at this point according
+         * to EWMH), but that seems rather elaborate. The standard explicitly
+         * says the application must cope with an estimate that is not entirely
+         * accurate.
+         */
         DLOG("_NET_REQUEST_FRAME_EXTENTS for window 0x%08x\n", event->window);
-        xcb_get_geometry_reply_t *geometry;
-        xcb_get_geometry_cookie_t cookie = xcb_get_geometry(conn, event->window);
-
-        if (!(geometry = xcb_get_geometry_reply(conn, cookie, NULL))) {
-            ELOG("Could not get geometry of X11 window 0x%08x while handling "
-                 "the _NET_REQUEST_FRAME_EXTENTS ClientMessage\n",
-                 event->window);
-            return;
-        }
-
-        DLOG("Current geometry = x=%d, y=%d, width=%d, height=%d\n",
-             geometry->x, geometry->y, geometry->width, geometry->height);
 
+        /* The reply data: approximate frame size */
         Rect r = {
-            0, // left
-            geometry->width + 4, // right
-            0, // top
-            geometry->height + config.font.height + 5, // bottom
+            config.default_border_width, /* left */
+            config.default_border_width, /* right */
+            config.font.height + 5, /* top */
+            config.default_border_width /* bottom */
         };
         xcb_change_property(
                 conn,