This is an automated email from the git hooks/post-receive script.

git pushed a commit to branch master
in repository efl.

View the commit online.

commit 14049351d5736ba3e7841724452c459ee098817a
Author: Carsten Haitzler <ras...@rasterman.com>
AuthorDate: Fri Sep 22 11:29:05 2023 +0100

    ecore-x - fix barrier rect setup for screen edge barriers
    
    @fix
---
 src/lib/ecore_x/ecore_x_fixes.c | 75 ++++++++++++++++++++---------------------
 1 file changed, 37 insertions(+), 38 deletions(-)

diff --git a/src/lib/ecore_x/ecore_x_fixes.c b/src/lib/ecore_x/ecore_x_fixes.c
index ac6f9bcab7..7712bae4bb 100644
--- a/src/lib/ecore_x/ecore_x_fixes.c
+++ b/src/lib/ecore_x/ecore_x_fixes.c
@@ -467,7 +467,7 @@ ecore_x_root_screen_barriers_set(Ecore_X_Rectangle *screens, int num)
    Region reg, reg2, reg3;
    Window rwin, cwin;
    int rx, ry, wx, wy;
-   int i, j;
+   int i;
    int closest_dist, dist;
    int sx, sy, dx, dy;
    unsigned int mask;
@@ -537,50 +537,48 @@ ecore_x_root_screen_barriers_set(Ecore_X_Rectangle *screens, int num)
    bar_alloc = 0;
    if ((!screens) || (num <= 0)) return;
 
-   // set up new ones given the screen list given
+   // new region
+   reg = XCreateRegion();
+   // add each screen rect + 1 pixel around it to reg
    for (i = 0; i < num; i++)
      {
         XRectangle xrect;
 
-        reg = XCreateRegion();
         reg2 = XCreateRegion();
-        xrect.x = screens[i].x - 1;
-        xrect.y = screens[i].y - 1;
-        xrect.width = screens[i].width + 2;
+        xrect.x      = screens[i].x - 1;
+        xrect.y      = screens[i].y - 1;
+        xrect.width  = screens[i].width + 2;
         xrect.height = screens[i].height + 2;
         XUnionRectWithRegion(&xrect, reg, reg2);
         XDestroyRegion(reg);
         reg = reg2;
+     }
+   // del the content of each screen from the above
+   for (i = 0; i < num; i++)
+     {
+        XRectangle xrect;
 
-        // reg == screen i + 1 pixel surrounding it
-        for (j = 0; j < num; j++)
-          {
-             // create a region representing screen j
-             reg2 = XCreateRegion();
-             reg3 = XCreateRegion();
-             xrect.x = screens[j].x;
-             xrect.y = screens[j].y;
-             xrect.width = screens[j].width;
-             xrect.height = screens[j].height;
-             XUnionRectWithRegion(&xrect, reg2, reg3);
-             XDestroyRegion(reg2);
-             reg2 = reg3;
-             // reg2 == screen j
-
-             reg3 = XCreateRegion();
-             XSubtractRegion(reg, reg2, reg3);
-             XDestroyRegion(reg);
-             XDestroyRegion(reg2);
-             reg = reg3;
-             // reg now has had screen j cut out of the boundary
-          }
-        // reg is the result of starting with screen i and then with a
-        // 1 pixel boundary around it havnig adjacent screens "cut out"
-        // of that boundary leaving only extra bounds where no screens
-        // are adjacent
-
+        // create just a rect with the screen in it
+        reg2 = XCreateRegion();
+        reg3 = XCreateRegion();
+        xrect.x      = screens[i].x;
+        xrect.y      = screens[i].y;
+        xrect.width  = screens[i].width;
+        xrect.height = screens[i].height;
+        XUnionRectWithRegion(&xrect, reg3, reg2);
+        XDestroyRegion(reg3);
+
+        // now subtract it
+        reg3 = XCreateRegion();
+        XSubtractRegion(reg, reg2, reg3);
+        XDestroyRegion(reg);
+        XDestroyRegion(reg2);
+        reg = reg3;
+     }
+   if (reg)
+     {
         // walk rects and create barriers
-        for (j = 0; j < reg->numRects; j++)
+        for (i = 0; i < reg->numRects; i++)
           {
              int x1, y1, x2, y2;
 
@@ -592,14 +590,15 @@ ecore_x_root_screen_barriers_set(Ecore_X_Rectangle *screens, int num)
                   if (!t)
                     {
                        bar_num--;
+                       XDestroyRegion(reg);
                        return;
                     }
                   bar = t;
                }
-             x1 = reg->rects[j].x1;
-             y1 = reg->rects[j].y1;
-             x2 = reg->rects[j].x2 - 1;
-             y2 = reg->rects[j].y2 - 1;
+             x1 = reg->rects[i].x1;
+             y1 = reg->rects[i].y1;
+             x2 = reg->rects[i].x2 - 1;
+             y2 = reg->rects[i].y2 - 1;
              bar[bar_num - 1] =
                XFixesCreatePointerBarrier(_ecore_x_disp,
                                           DefaultRootWindow(_ecore_x_disp),

-- 
To stop receiving notification emails like this one, please contact
the administrator of this repository.

Reply via email to