]> Dogcows Code - chaz/openbox/blobdiff - scripts/motion.py
force a binding with a modifier
[chaz/openbox] / scripts / motion.py
index 3d6937813ddff9ce9973058624d45ba5d61bb319..03546b84e74147ee01fdf0621053f7987e3b0484 100644 (file)
@@ -86,13 +86,18 @@ def _motion_grab(data):
             else:
                 raise RuntimeError
 
+_last_x = 0
+_last_y = 0
+
 def _do_move():
     global _screen, _client, _cx, _cy, _dx, _dy
 
-    x = _cx + _dx
-    y = _cy + _dy
+    # get destination x/y for the *frame*
+    x = _cx + _dx + _client.frame.rect().x() - _client.area().x()
+    y = _cy + _dy + _client.frame.rect().y() - _client.area().y()
 
     global edge_resistance
+    global _last_x, _last_y
     if edge_resistance:
         fs = _client.frame.size()
         w = _client.area().width() + fs.left + fs.right
@@ -100,22 +105,30 @@ def _do_move():
         # use the area based on the struts
         area = ob.openbox.screen(_screen).area()
         l = area.left()
-        r = area.right() - w
+        r = area.right() - w + 1
         t = area.top()
-        b = area.bottom() - h
+        b = area.bottom() - h + 1
         # left screen edge
-        if x < l and x >= l - edge_resistance:
+        if _last_x > x and x < l and x >= l - edge_resistance:
             x = l
         # right screen edge
-        if x > r and x <= r + edge_resistance:
+        if _last_x < x and x > r and x <= r + edge_resistance:
             x = r
         # top screen edge
-        if y < t and y >= t - edge_resistance:
+        if _last_y > y and y < t and y >= t - edge_resistance:
             y = t
         # right screen edge
-        if y > b and y <= b + edge_resistance:
+        if _last_y < y and y > b and y <= b + edge_resistance:
             y = b
 
+    global _inmove
+    if not _inmove:
+        _last_x = 0
+        _last_y = 0
+    else:
+        _last_x = x
+        _last_y = y
+
     global move_rubberband
     if move_rubberband:
         # draw the outline ...
This page took 0.021347 seconds and 4 git commands to generate.