import windowplacement # fallback routines
##############################################################################
-### Options for the historyplacement module: ###
+### Options for the historyplacement module (Options in the ###
+### windowplacement module also apply!): ###
### ###
-# fallback - The window placement algorithm that will be used when history ###
-### placement does not have a place for the window. ###
-fallback = windowplacement.random ###
-# ignore_requested_positions - When true, the history algorithm will ###
+# ignore_requested_positions - When true, the placement algorithm will ###
### attempt to place windows even when they ###
### request a position (like XMMS). ###
+### Note this only applies to normal windows, ###
+### not to special cases like desktops and ###
+### docks. ###
ignore_requested_positions = 0 ###
### ###
+# fallback - The window placement algorithm that will be used when history ###
+### placement does not have a place for the window. ###
+fallback = windowplacement.random ###
+### ###
+# confirm_callback - set this to a function to have the function called ###
+### before attempting to place a window via history. If ###
+### the function returns 'true' then an attempt will be ###
+### made to place the window. If it returns 'false', the ###
+### fallback method will be directly applied instead. ###
+confirm_callback = 0 ###
+### ###
# filename - The name of the file where history data will be stored. The ###
### number of the screen is appended onto this filename. ###
filename = 'historydb' ###
def place(data):
global _data
if data.client:
- if not ignore_requested_positions:
+ if not (ignore_requested_positions and data.client.normal()):
if data.client.positionRequested(): return
state = _create_state(data)
- print "looking for : " + state.appname + " : " + state.appclass + \
- " : " + state.role
-
- i = _find(data.screen, state)
- if i >= 0:
- coords = _data[data.screen][i]
- print "Found in history ("+str(coords.x)+","+str(coords.y)+")"
- data.client.move(coords.x, coords.y)
- else:
- print "No match in history"
- if fallback: fallback(data)
+ try:
+ if not confirm_callback or confirm_callback(data):
+ print "looking for : " + state.appname + " : " + \
+ state.appclass + " : " + state.role
+
+ i = _find(data.screen, state)
+ if i >= 0:
+ coords = _data[data.screen][i]
+ print "Found in history ("+str(coords.x)+","+\
+ str(coords.y)+")"
+ data.client.move(coords.x, coords.y)
+ return
+ else:
+ print "No match in history"
+ except TypeError:
+ pass
+ if fallback: fallback(data)
def _save_window(data):
global _data