X-Git-Url: https://git.dogcows.com/gitweb?a=blobdiff_plain;f=scripts%2Fcallbacks.py;h=1b7bf17761f43dac549fee9849c2e37ce2e7c124;hb=33c0058f75cf8f100761254247e64e89256346ab;hp=0852a3aca8d5d68fdc6cbb54de65c2700ce1ba48;hpb=c2527df85a011041e3c78abcc4e6789c0a204542;p=chaz%2Fopenbox diff --git a/scripts/callbacks.py b/scripts/callbacks.py index 0852a3ac..1b7bf177 100644 --- a/scripts/callbacks.py +++ b/scripts/callbacks.py @@ -6,8 +6,14 @@ import ob import otk 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. @@ -15,8 +21,8 @@ def state_above(data, add=StateAdd): 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_above) + otk.atoms.net_wm_state, data.client.window(), + add, otk.atoms.net_wm_state_above) def state_below(data, add=StateAdd): """Toggles, adds or removes the 'below' state on a window. @@ -24,8 +30,8 @@ def state_below(data, add=StateAdd): 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_below) + otk.atoms.net_wm_state, data.client.window(), + add, otk.atoms.net_wm_state_below) def state_shaded(data, add=StateAdd): """Toggles, adds or removes the 'shaded' state on a window. @@ -33,8 +39,8 @@ def state_shaded(data, add=StateAdd): 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) + otk.atoms.net_wm_state, data.client.window(), + add, otk.atoms.net_wm_state_shaded) def state_maximize(data, add=StateAdd): """Toggles, adds or removes the horizontal and vertical 'maximized' state @@ -42,9 +48,9 @@ def state_maximize(data, add=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) + otk.atoms.net_wm_state, data.client.window(), + add, otk.atoms.net_wm_state_maximized_horz, + otk.atoms.net_wm_state_maximized_vert) def state_maximize_horz(data, add=StateAdd): """Toggles, adds or removes the horizontal 'maximized' state on a window. @@ -52,8 +58,8 @@ def state_maximize_horz(data, add=StateAdd): 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.atoms.net_wm_state, data.client.window(), + add, otk.atoms.net_wm_state_maximized_horz) def state_maximize_vert(data, add=StateAdd): """Toggles, adds or removes the vertical 'maximized' state on a window. @@ -61,8 +67,8 @@ def state_maximize_vert(data, add=StateAdd): 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) + otk.atoms.net_wm_state, data.client.window(), + add, otk.atoms.net_wm_state_maximized_vert) def state_skip_taskbar(data, add=StateAdd): """Toggles, adds or removes the 'skip_taskbar' state on a window. @@ -70,8 +76,8 @@ def state_skip_taskbar(data, add=StateAdd): 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) + otk.atoms.net_wm_state, data.client.window(), + add, otk.atoms.net_wm_state_skip_taskbar) def state_skip_pager(data, add=StateAdd): """Toggles, adds or removes the 'skip_pager' state on a window. @@ -79,14 +85,14 @@ def state_skip_pager(data, add=StateAdd): 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) + otk.atoms.net_wm_state, data.client.window(), + add, otk.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(otk.display.screenInfo(data.screen).rootWindow(), - otk.Property_atoms().wm_change_state, + otk.atoms.wm_change_state, data.client.window(), 3) # IconicState def restore(data): @@ -95,14 +101,14 @@ def restore(data): use the activate() function.""" if not data.client: return ob.send_client_msg(otk.display.screenInfo(data.screen).rootWindow(), - otk.Property_atoms().wm_change_state, + otk.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(otk.display.screenInfo(data.screen).rootWindow(), - otk.Property_atoms().net_close_window, + otk.atoms.net_close_window, data.client.window(), 0) def focus(data): @@ -113,14 +119,6 @@ def focus(data): return data.client.focus() -def restart(data, other = ""): - """Restarts Openbox, optionally starting another window manager.""" - ob.openbox.restart(other) - -def exit(data=0): - """Exits Openbox.""" - ob.openbox.shutdown() - def raise_win(data): """Raises the window on which the event occured""" if not data.client: return @@ -184,9 +182,32 @@ def unshade(data): def change_desktop(data, num): """Switches to a specified desktop""" root = otk.display.screenInfo(data.screen).rootWindow() - ob.send_client_msg(root, otk.Property_atoms().net_current_desktop, + ob.send_client_msg(root, otk.atoms.net_current_desktop, root, num) +def show_desktop(data, show=1): + """Shows and focuses the desktop, hiding any client windows. Optionally, + if show is zero, this will hide the desktop, leaving show-desktop + mode.""" + root = otk.display.screenInfo(data.screen).rootWindow() + ob.send_client_msg(root, otk.atoms.net_showing_desktop, root, show) + +def hide_desktop(data): + """Hides the desktop, re-showing the client windows. Leaves show-desktop + mode.""" + show_desktop(data, 0) + +def toggle_show_desktop(data): + """Requests the Openbox to show the desktop, hiding the client windows, or + redisplay the clients.""" + # get the current desktop state + root = otk.display.screenInfo(data.screen).rootWindow() + result, value = otk.Property_get(root, otk.atoms.net_showing_desktop, + otk.atoms.cardinal) + if not result: return + show = not value + ob.send_client_msg(root, otk.atoms.net_showing_desktop, root, show) + def next_desktop(data, no_wrap=0): """Switches to the next desktop, optionally (by default) cycling around to the first when going past the last.""" @@ -211,11 +232,75 @@ def prev_desktop(data, no_wrap=0): d = n - 1 change_desktop(data, d) -def send_to_desktop(data, num): +def up_desktop(data, num=1): + """Switches to the desktop vertically above the current one. This is based + on the desktop layout chosen by an EWMH compliant pager. Optionally, num + can be specified to move more than one row at a time.""" + screen = ob.openbox.screen(data.screen) + d = screen.desktop() + n = screen.numDesktops() + l = screen.desktopLayout() + + target = d - num * l.columns + if target < 0: + target += l.rows * l.columns + while target >= n: + target -= l.columns + change_desktop(data, target) + +def down_desktop(data, num=1): + """Switches to the desktop vertically below the current one. This is based + on the desktop layout chosen by an EWMH compliant pager. Optionally, num + can be specified to move more than one row at a time.""" + screen = ob.openbox.screen(data.screen) + d = screen.desktop() + n = screen.numDesktops() + l = screen.desktopLayout() + + target = d + num * l.columns + if target >= n: + target -= l.rows * l.columns + while target < 0: + target += l.columns + change_desktop(data, target) + +def left_desktop(data, num=1): + """Switches to the desktop horizotally left of the current one. This is + based on the desktop layout chosen by an EWMH compliant pager. + Optionally, num can be specified to move more than one column at a + time.""" + screen = ob.openbox.screen(data.screen) + d = screen.desktop() + n = screen.numDesktops() + l = screen.desktopLayout() + + rowstart = d - d % l.columns + target = d - num + while target < rowstart: + target += l.columns + change_desktop(data, target) + +def right_desktop(data, num=1): + """Switches to the desktop horizotally right of the current one. This is + based on the desktop layout chosen by an EWMH compliant pager. + Optionally, num can be specified to move more than one column at a + time.""" + screen = ob.openbox.screen(data.screen) + d = screen.desktop() + n = screen.numDesktops() + l = screen.desktopLayout() + + rowstart = d - d % l.columns + target = d + num + while target >= rowstart + l.columns: + target -= l.columns + change_desktop(data, target) + +def send_to_desktop(data, num=1): """Sends a client to a specified desktop""" if not data.client: return ob.send_client_msg(otk.display.screenInfo(data.screen).rootWindow(), - otk.Property_atoms().net_wm_desktop, + otk.atoms.net_wm_desktop, data.client.window(),num) def toggle_all_desktops(data): @@ -264,4 +349,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"