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.