emacs-diffs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Emacs-diffs] master e1c27db 2/5: Reduce some data dependencies between


From: Ken Raeburn
Subject: [Emacs-diffs] master e1c27db 2/5: Reduce some data dependencies between X calls
Date: Thu, 12 Nov 2015 09:03:51 +0000

branch: master
commit e1c27dbd25ab22f6000d1e46259e2a60d56416c1
Author: Ken Raeburn <address@hidden>
Commit: Ken Raeburn <address@hidden>

    Reduce some data dependencies between X calls
    
    Gains nothing in the traditional-Xlib code, but more closely aligns
    with how the XCB version will work.
    
    * src/xfns.c (x_real_pos_and_offsets): When translating coordinates,
    send coordinates (0,0) to the X server and add in the real coordinates
    after getting the response.  Move XGetGeometry for outer window inside
    error-trapping block.  Use DPY variable more, since it's available.
---
 src/xfns.c |   46 +++++++++++++++++++++++++++-------------------
 1 files changed, 27 insertions(+), 19 deletions(-)

diff --git a/src/xfns.c b/src/xfns.c
index db87fcc..c55e6fe 100644
--- a/src/xfns.c
+++ b/src/xfns.c
@@ -194,6 +194,7 @@ x_real_pos_and_offsets (struct frame *f,
   unsigned char *tmp_data = NULL;
   Atom target_type = XA_CARDINAL;
   unsigned int ow IF_LINT (= 0), oh IF_LINT (= 0);
+  unsigned int fw, fh;
 
   block_input ();
 
@@ -223,10 +224,10 @@ x_real_pos_and_offsets (struct frame *f,
       unsigned int tmp_nchildren;
       int success;
 
-      success = XQueryTree (FRAME_X_DISPLAY (f), win, &rootw,
+      success = XQueryTree (dpy, win, &rootw,
                            &wm_window, &tmp_children, &tmp_nchildren);
 
-      had_errors = x_had_errors_p (FRAME_X_DISPLAY (f));
+      had_errors = x_had_errors_p (dpy);
 
       /* Don't free tmp_children if XQueryTree failed.  */
       if (! success)
@@ -246,7 +247,7 @@ x_real_pos_and_offsets (struct frame *f,
       Window child, rootw;
 
       /* Get the real coordinates for the WM window upper left corner */
-      XGetGeometry (FRAME_X_DISPLAY (f), win,
+      XGetGeometry (dpy, win,
                     &rootw, &real_x, &real_y, &ow, &oh, &bw, &ign);
 
       if (outer_border)
@@ -262,18 +263,21 @@ x_real_pos_and_offsets (struct frame *f,
          | -----------------         v y
          | |  our window
       */
-      XTranslateCoordinates (FRAME_X_DISPLAY (f),
+      XTranslateCoordinates (dpy,
 
                             /* From-window, to-window.  */
                             FRAME_DISPLAY_INFO (f)->root_window,
                              FRAME_X_WINDOW (f),
 
                             /* From-position, to-position.  */
-                             real_x, real_y, &win_x, &win_y,
+                             0, 0, &win_x, &win_y,
 
                             /* Child of win.  */
                             &child);
 
+      win_x += real_x;
+      win_y += real_y;
+
       if (FRAME_X_WINDOW (f) == FRAME_OUTER_WINDOW (f))
        {
           outer_x = win_x;
@@ -281,20 +285,23 @@ x_real_pos_and_offsets (struct frame *f,
        }
       else
         {
-          XTranslateCoordinates (FRAME_X_DISPLAY (f),
+          XTranslateCoordinates (dpy,
 
                                  /* From-window, to-window.  */
                                  FRAME_DISPLAY_INFO (f)->root_window,
                                  FRAME_OUTER_WINDOW (f),
 
                                  /* From-position, to-position.  */
-                                 real_x, real_y, &outer_x, &outer_y,
+                                 0, 0, &outer_x, &outer_y,
 
                                  /* Child of win.  */
                                  &child);
+
+         outer_x += real_x;
+         outer_y += real_y;
        }
 
-      had_errors = x_had_errors_p (FRAME_X_DISPLAY (f));
+      had_errors = x_had_errors_p (dpy);
     }
 
   if (!had_errors && dpyinfo->root_window == f->output_data.x->parent_desc)
@@ -319,6 +326,16 @@ x_real_pos_and_offsets (struct frame *f,
       if (tmp_data) XFree (tmp_data);
     }
 
+  if (right_offset_x || bottom_offset_y)
+    {
+      int xy_ign;
+      unsigned int ign;
+      Window rootw;
+
+      XGetGeometry (dpy, FRAME_OUTER_WINDOW (f),
+                   &rootw, &xy_ign, &xy_ign, &fw, &fh, &ign, &ign);
+    }
+
   x_uncatch_errors ();
 
   unblock_input ();
@@ -334,17 +351,8 @@ x_real_pos_and_offsets (struct frame *f,
   if (xptr) *xptr = real_x;
   if (yptr) *yptr = real_y;
 
-  if (right_offset_x || bottom_offset_y)
-    {
-      int xy_ign;
-      unsigned int ign, fw, fh;
-      Window rootw;
-
-      XGetGeometry (FRAME_X_DISPLAY (f), FRAME_OUTER_WINDOW (f),
-                   &rootw, &xy_ign, &xy_ign, &fw, &fh, &ign, &ign);
-      if (right_offset_x) *right_offset_x = ow - fw + outer_x;
-      if (bottom_offset_y) *bottom_offset_y = oh - fh + outer_y;
-    }
+  if (right_offset_x) *right_offset_x = ow - fw + outer_x;
+  if (bottom_offset_y) *bottom_offset_y = oh - fh + outer_y;
 }
 
 /* Store the screen positions of frame F into XPTR and YPTR.



reply via email to

[Prev in Thread] Current Thread [Next in Thread]