X-Git-Url: https://git.dogcows.com/gitweb?a=blobdiff_plain;f=scripts%2Fcallbacks.py;h=8c220e6451db1efd4430fdc940f1986ab9ffce3f;hb=220b5c40f91c6509951ccd0d506a9bd77d9d6bac;hp=caea758632403802e0de5bd71e902ef1260e1e8c;hpb=5168a8add5ed46f74b615ecc60738c1113606734;p=chaz%2Fopenbox diff --git a/scripts/callbacks.py b/scripts/callbacks.py index caea7586..8c220e64 100644 --- a/scripts/callbacks.py +++ b/scripts/callbacks.py @@ -1,35 +1,98 @@ -########################################################################### -### Functions that can be used as callbacks for mouse/keyboard bindings ### -########################################################################### +############################################################################ +### Functions that can be used as callbacks for mouse/keyboard bindings ### +############################################################################ import ob +import otk -def state_above(data, add=2): - """Toggles, adds or removes the 'above' state on a window.""" +StateRemove = 0 +"""For the state_* callbacks. Indicates the state should be removed from the + window.""" +StateAdd = 1 +"""For the state_* callbacks. Indicates the state should be add to the + window.""" +StateToggle = 2 +"""For the state_* callbacks. Indicates the state should be toggled on the + window.""" + +def state_above(data, add=StateAdd): + """Toggles, adds or removes the 'above' state on a window. + The second paramater should one of: StateRemove, StateAdd, or + StateToggle.""" if not data.client: return - ob.send_client_msg(ob.display.screenInfo(data.screen).rootWindow(), - ob.Property_atoms().net_wm_state, data.client.window(), - add, ob.Property_atoms().net_wm_state_above) + ob.send_client_msg(otk.display.screenInfo(data.screen).rootWindow(), + otk.Property_atoms().net_wm_state, data.client.window(), + add, otk.Property_atoms().net_wm_state_above) -def state_below(data, add=2): - """Toggles, adds or removes the 'below' state on a window.""" +def state_below(data, add=StateAdd): + """Toggles, adds or removes the 'below' state on a window. + The second paramater should one of: StateRemove, StateAdd, or + StateToggle.""" if not data.client: return - ob.send_client_msg(ob.display.screenInfo(data.screen).rootWindow(), - ob.Property_atoms().net_wm_state, data.client.window(), - add, ob.Property_atoms().net_wm_state_below) + ob.send_client_msg(otk.display.screenInfo(data.screen).rootWindow(), + otk.Property_atoms().net_wm_state, data.client.window(), + add, otk.Property_atoms().net_wm_state_below) -def state_shaded(data, add=2): - """Toggles, adds or removes the 'shaded' state on a window.""" +def state_shaded(data, add=StateAdd): + """Toggles, adds or removes the 'shaded' state on a window. + The second paramater should one of: StateRemove, StateAdd, or + StateToggle.""" + if not data.client: return + ob.send_client_msg(otk.display.screenInfo(data.screen).rootWindow(), + otk.Property_atoms().net_wm_state, data.client.window(), + add, otk.Property_atoms().net_wm_state_shaded) + +def state_maximize(data, add=StateAdd): + """Toggles, adds or removes the horizontal and vertical 'maximized' state + on a window. The second paramater should one of: StateRemove, StateAdd, + or StateToggle.""" + if not data.client: return + ob.send_client_msg(otk.display.screenInfo(data.screen).rootWindow(), + otk.Property_atoms().net_wm_state, data.client.window(), + add, otk.Property_atoms().net_wm_state_maximized_horz, + otk.Property_atoms().net_wm_state_maximized_vert) + +def state_maximize_horz(data, add=StateAdd): + """Toggles, adds or removes the horizontal 'maximized' state on a window. + The second paramater should one of: StateRemove, StateAdd, or + StateToggle.""" if not data.client: return - ob.send_client_msg(ob.display.screenInfo(data.screen).rootWindow(), - ob.Property_atoms().net_wm_state, data.client.window(), - add, ob.Property_atoms().net_wm_state_shaded) + ob.send_client_msg(otk.display.screenInfo(data.screen).rootWindow(), + otk.Property_atoms().net_wm_state, data.client.window(), + add, otk.Property_atoms().net_wm_state_maximized_horz) +def state_maximize_vert(data, add=StateAdd): + """Toggles, adds or removes the vertical 'maximized' state on a window. + The second paramater should one of: StateRemove, StateAdd, or + StateToggle.""" + if not data.client: return + ob.send_client_msg(otk.display.screenInfo(data.screen).rootWindow(), + otk.Property_atoms().net_wm_state, data.client.window(), + add, otk.Property_atoms().net_wm_state_maximized_vert) + +def state_skip_taskbar(data, add=StateAdd): + """Toggles, adds or removes the 'skip_taskbar' state on a window. + The second paramater should one of: StateRemove, StateAdd, or + StateToggle.""" + if not data.client: return + ob.send_client_msg(otk.display.screenInfo(data.screen).rootWindow(), + otk.Property_atoms().net_wm_state, data.client.window(), + add, otk.Property_atoms().net_wm_state_skip_taskbar) + +def state_skip_pager(data, add=StateAdd): + """Toggles, adds or removes the 'skip_pager' state on a window. + The second paramater should one of: StateRemove, StateAdd, or + StateToggle.""" + if not data.client: return + ob.send_client_msg(otk.display.screenInfo(data.screen).rootWindow(), + otk.Property_atoms().net_wm_state, data.client.window(), + add, otk.Property_atoms().net_wm_state_skip_pager) + def iconify(data): """Iconifies the window on which the event occured""" if not data.client: return - ob.send_client_msg(ob.display.screenInfo(data.screen).rootWindow(), - ob.Property_atoms().wm_change_state, + ob.send_client_msg(otk.display.screenInfo(data.screen).rootWindow(), + otk.Property_atoms().wm_change_state, data.client.window(), 3) # IconicState def restore(data): @@ -37,15 +100,15 @@ def restore(data): if. If you want to focus the window too, it is recommended that you use the activate() function.""" if not data.client: return - ob.send_client_msg(ob.display.screenInfo(data.screen).rootWindow(), - ob.Property_atoms().wm_change_state, + ob.send_client_msg(otk.display.screenInfo(data.screen).rootWindow(), + otk.Property_atoms().wm_change_state, data.client.window(), 1) # NormalState def close(data): """Closes the window on which the event occured""" if not data.client: return - ob.send_client_msg(ob.display.screenInfo(data.screen).rootWindow(), - ob.Property_atoms().net_close_window, + ob.send_client_msg(otk.display.screenInfo(data.screen).rootWindow(), + otk.Property_atoms().net_close_window, data.client.window(), 0) def focus(data): @@ -56,59 +119,6 @@ def focus(data): return data.client.focus() -def move(data): - """Moves the window interactively. This should only be used with - MouseMotion events""" - if not data.client: return - - # not-normal windows dont get moved - if not data.client.normal(): return - - dx = data.xroot - data.pressx - dy = data.yroot - data.pressy - data.client.move(data.press_clientx + dx, data.press_clienty + dy) - -def resize(data): - """Resizes the window interactively. This should only be used with - MouseMotion events""" - if not data.client: return - - # not-normal windows dont get resized - if not data.client.normal(): return - - px = data.pressx - py = data.pressy - dx = data.xroot - px - dy = data.yroot - py - - # pick a corner to anchor - if not (resize_nearest or data.context == MC_Grip): - corner = Client.TopLeft - else: - x = px - data.press_clientx - y = py - data.press_clienty - if y < data.press_clientheight / 2: - if x < data.press_clientwidth / 2: - corner = Client.BottomRight - dx *= -1 - else: - corner = Client.BottomLeft - dy *= -1 - else: - if x < data.press_clientwidth / 2: - corner = Client.TopRight - dx *= -1 - else: - corner = Client.TopLeft - - data.client.resize(corner, - data.press_clientwidth + dx, - data.press_clientheight + dy); - -def restart(data, other = ""): - """Restarts openbox, optionally starting another window manager.""" - ob.openbox.restart(other) - def raise_win(data): """Raises the window on which the event occured""" if not data.client: return @@ -119,22 +129,60 @@ def lower_win(data): if not data.client: return ob.openbox.screen(data.screen).lowerWindow(data.client) +def toggle_maximize(data): + """Toggles the maximized status of the window on which the event occured""" + state_maximize(data, StateToggle) + +def toggle_maximize_horz(data): + """Toggles the horizontal maximized status of the window on which the event + occured""" + state_maximize_horz(data, StateToggle) + +def toggle_maximize_vert(data): + """Toggles the vertical maximized status of the window on which the event + occured""" + state_maximize_vert(data, StateToggle) + +def maximize(data): + """Maximizes the window on which the event occured""" + state_maximize(data, StateAdd) + +def maximize_horz(data): + """Horizontally maximizes the window on which the event occured""" + state_maximize_horz(data, StateAdd) + +def maximize_vert(data): + """Vertically maximizes the window on which the event occured""" + state_maximize_vert(data, StateAdd) + +def unmaximize(data): + """Unmaximizes the window on which the event occured""" + state_maximize(data, StateRemove) + +def unmaximize_horz(data): + """Horizontally unmaximizes the window on which the event occured""" + state_maximize_horz(data, StateRemove) + +def unmaximize_vert(data): + """Vertically unmaximizes the window on which the event occured""" + state_maximize_vert(data, StateRemove) + def toggle_shade(data): """Toggles the shade status of the window on which the event occured""" - state_shaded(data) + state_shaded(data, StateToggle) def shade(data): """Shades the window on which the event occured""" - state_shaded(data, 1) + state_shaded(data, StateAdd) def unshade(data): """Unshades the window on which the event occured""" - state_shaded(data, 0) + state_shaded(data, StateRemove) def change_desktop(data, num): """Switches to a specified desktop""" - root = ob.display.screenInfo(data.screen).rootWindow() - ob.send_client_msg(root, ob.Property_atoms().net_current_desktop, + root = otk.display.screenInfo(data.screen).rootWindow() + ob.send_client_msg(root, otk.Property_atoms().net_current_desktop, root, num) def next_desktop(data, no_wrap=0): @@ -164,8 +212,8 @@ def prev_desktop(data, no_wrap=0): def send_to_desktop(data, num): """Sends a client to a specified desktop""" if not data.client: return - ob.send_client_msg(ob.display.screenInfo(data.screen).rootWindow(), - ob.Property_atoms().net_wm_desktop, + ob.send_client_msg(otk.display.screenInfo(data.screen).rootWindow(), + otk.Property_atoms().net_wm_desktop, data.client.window(),num) def toggle_all_desktops(data): @@ -175,7 +223,7 @@ def toggle_all_desktops(data): if not data.client.desktop() == 0xffffffff: send_to_desktop(data, 0xffffffff) else: - send_to_desktop(data, openbox.screen(data.screen).desktop()) + send_to_desktop(data, ob.openbox.screen(data.screen).desktop()) def send_to_all_desktops(data): """Sends a client to all desktops""" @@ -214,4 +262,12 @@ def send_to_prev_desktop(data, no_wrap=0, follow=1): if follow: change_desktop(data, d) +def restart(data=0, other = ""): + """Restarts Openbox, optionally starting another window manager.""" + ob.openbox.restart(other) + +def exit(data=0): + """Exits Openbox.""" + ob.openbox.shutdown() + print "Loaded callbacks.py"