summarylogtreecommitdiffstats
path: root/fix-smart-resize-with-x11-frame-borders.patch
blob: 9311f9d70d8d04fd5efc922bdc4b9e2b233df3e4 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
commit bec3f19
Author: Emanuele Giaquinta <e.giaquinta@glauco.it>
Date:   Tue Jun 28 21:56:17 2016 +0000

    Fix invalid moves when smart resize is enabled and the wm uses X11 borders for the frame windows.
    
    Patch by Uli Schlachter.
---
 src/main.C | 25 +++++++++++++++++++++++--
 1 file changed, 23 insertions(+), 2 deletions(-)

diff --git a/src/main.C b/src/main.C
index 39aa5ec..5fa605e 100644
--- a/src/main.C
+++ b/src/main.C
@@ -1054,6 +1054,25 @@ rxvt_term::alias_color (int dst, int src)
   pix_colors[dst].set (this, rs[Rs_color + dst] = rs[Rs_color + src]);
 }
 
+#ifdef SMART_RESIZE
+static unsigned int
+get_parent_bw (Display *dpy, Window w)
+{
+  int idummy;
+  unsigned int udummy;
+  Window wdummy, parent;
+  Window *children;
+  unsigned int nchildren, border_width;
+
+  XQueryTree (dpy, w, &wdummy, &parent, &children, &nchildren);
+  XFree (children);
+  XGetGeometry (dpy, parent, &wdummy, &idummy, &idummy,
+                &udummy, &udummy, &border_width, &udummy);
+
+  return border_width;
+}
+#endif
+
 /* -------------------------------------------------------------------- *
  * -                         WINDOW RESIZING                          - *
  * -------------------------------------------------------------------- */
@@ -1098,8 +1117,10 @@ rxvt_term::resize_all_windows (unsigned int newwidth, unsigned int newheight, in
        */
       if (x1 != x || y1 != y)
         {
-          x -= x1;
-          y -= y1;
+          unsigned int border_width = get_parent_bw (dpy, parent);
+
+          x -= x1 + border_width;
+          y -= y1 + border_width;
         }
 
       x1 = (DisplayWidth  (dpy, display->screen) - old_width ) / 2;