kwo pushed a commit to branch master.

http://git.enlightenment.org/e16/e16.git/commit/?id=cf5927deb8958d3e8aee29b481c617e1ffd42443

commit cf5927deb8958d3e8aee29b481c617e1ffd42443
Author: Kim Woelders <[email protected]>
Date:   Sat Apr 30 19:34:59 2022 +0200

    Clamp window position on move
    
    In non-compositing mode the x/y coordinate limts are [-32768; 32767] as
    should be expected. If moving beyond these values the coordinates are
    just set modulo 2^16 (like in a signed 16 bit integer) and most likely
    this isn't noticed anywhere.
    
    In compositing mode the coordinates apperently must be clamped some
    more, but it is not clear why or where the limit is.
    The problem manifests itself in that a window moved "too far" seems to
    have disappeared when moving it back on screen, possibly because the
    name pixmap is invalidated.
    Shading/unshading the window makes it re-appear.
    
    The problem can be seen when dragging a window far off a (small) pager.
---
 src/ewin-ops.c | 11 +++++++++++
 1 file changed, 11 insertions(+)

diff --git a/src/ewin-ops.c b/src/ewin-ops.c
index ee07e2c8..8f5862e9 100644
--- a/src/ewin-ops.c
+++ b/src/ewin-ops.c
@@ -320,6 +320,17 @@ doEwinMoveResize(EWin * ewin, Desk * dsk, int x, int y, 
int w, int h, int flags)
          }
      }
 
+   /* Clamp window position or weirdness may happen.
+    * Not sure where the exact limit is. */
+   if (x < -32000)
+      x = -32000;
+   else if (x > 32000 - w)
+      x = 32000 - w;
+   if (y < -32000)
+      y = -32000;
+   else if (y > 32000 - h)
+      y = 32000 - h;
+
    dx = x - EoGetX(ewin);
    dy = y - EoGetY(ewin);
    if ((dx != 0) || (dy != 0))

-- 


Reply via email to