#############################################################################
### Options that can be modified to change the functions' behaviors. ###
### ###
-# snap - snap windows to other windows and screen edges while moving them ###
-snap = 1
-###
+# edge_resistance - the amount of resistance to provide to moving a ###
+### window past a screen boundary. Specify a value of 0 ###
+### to disable edge resistance. ###
+edge_resistance = 10 ###
+### ###
# move_popup - display a coordinates popup when moving windows. ###
move_popup = 1 ###
### ###
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 snap
- if snap:
- pass
+ global edge_resistance
+ global _last_x, _last_y
+ if edge_resistance:
+ fs = _client.frame.size()
+ w = _client.area().width() + fs.left + fs.right
+ h = _client.area().height() + fs.top + fs.bottom
+ # use the area based on the struts
+ area = ob.openbox.screen(_screen).area()
+ l = area.left()
+ r = area.right() - w + 1
+ t = area.top()
+ b = area.bottom() - h + 1
+ # left screen edge
+ if _last_x > x and x < l and x >= l - edge_resistance:
+ x = l
+ # right screen edge
+ if _last_x < x and x > r and x <= r + edge_resistance:
+ x = r
+ # top screen edge
+ if _last_y > y and y < t and y >= t - edge_resistance:
+ y = t
+ # right screen edge
+ 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:
_popwidget.setTexture(style.titlebarFocusBackground())
_poplabel = otk.Label(_popwidget)
_poplabel.setTexture(style.labelFocusBackground())
- _popwidget.show(1)
_poplabel.fitString(text)
_poplabel.setText(text)
- area = otk.display.screenInfo(_screen).rect()
_popwidget.update()
+ area = otk.display.screenInfo(_screen).rect()
_popwidget.move(area.x() + (area.width() -
_popwidget.width()) / 2,
area.y() + (area.height() -
_popwidget.height()) / 2)
+ _popwidget.show(1)
def move(data):
"""Moves the window interactively. This should only be used with
_popwidget.setTexture(style.titlebarFocusBackground())
_poplabel = otk.Label(_popwidget)
_poplabel.setTexture(style.labelFocusBackground())
- _popwidget.show(1)
_poplabel.fitString(text)
_poplabel.setText(text)
area = otk.display.screenInfo(_screen).rect()
_popwidget.width()) / 2,
area.y() + (area.height() -
_popwidget.height()) / 2)
+ _popwidget.show(1)
def resize(data):
"""Resizes the window interactively. This should only be used with