steve9000
May 25th, 2008, 01:54 PM
Hi all, the old style maximize-{horizontally,vertically} shortcuts aren't good
enough any more on our big screens. There's a really sweet program for
windows "Winsplit Revolution" (http://www.winsplit-revolution.com/) which
does a really good job. I'd love to see this as a core part of compiz.
I have attached a really simple implementation which does the simple stuff.
Stephen.
http://winsplit-revolution.com/screenshots/videos-demos
#! /usr/bin/env python
import wnck
import gtk
import gtk.gdk as gdk
import deskbar.core.keybinder as keybinder
wnck_WINDOW_CHANGE_ALL = ( wnck.WINDOW_CHANGE_X|wnck.WINDOW_CHANGE_Y|wnck.WIN DOW_CHANGE_WIDTH|wnck.WINDOW_CHANGE_HEIGHT)
def handle(num):
screen = wnck.screen_get_default()
screen.force_update()
workspace = screen.get_active_workspace()
window = screen.get_active_window()
# TODO - get usable desktop size instead of hardcoding
dx,dy, dw,dh = 0,25, screen.get_width(), screen.get_height()-25
if num in (1,3,7,9): w,h = dw/2, dh/2
elif num in (4,6): w,h = dw/2, dh
elif num in (8,2): w,h = dw, dh/2
elif num in (5,): w,h = dw, dh
if num in (1,4,7,2,5,8): x = 0
else: x = dw/2
if num in (7,8,9,4,5,6): y = 0
else: y = dh/2
# TODO - set_geometry does not work for gnome-terminal windows
# or rather, it seems to work on the tabbed contents instead.
print "%i pressed\nSet geometry of '%s' to %ix%i+%i+%i" % (num, window.get_name(), w,h,x,y)
window.set_geometry(gdk.GRAVITY_NORTH_WEST, wnck_WINDOW_CHANGE_ALL, dx+x,dy+y,w,h)
window.activate(0) # TODO - current gtk time
print """Linsplit started:
Please ensure NumLock is activated.
Use <Ctrl><Alt><Numpad> to move the active window
Use <Ctrl><Alt><NumpadEnter> to quit"""
for i in range(1,10):
keybinder.tomboy_keybinder_bind( "<Ctrl><Alt>KP_%i"%i, lambda i=i: handle(i) )
keybinder.tomboy_keybinder_bind("<Ctrl><Alt>KP_Enter", gtk.main_quit)
gtk.main()
enough any more on our big screens. There's a really sweet program for
windows "Winsplit Revolution" (http://www.winsplit-revolution.com/) which
does a really good job. I'd love to see this as a core part of compiz.
I have attached a really simple implementation which does the simple stuff.
Stephen.
http://winsplit-revolution.com/screenshots/videos-demos
#! /usr/bin/env python
import wnck
import gtk
import gtk.gdk as gdk
import deskbar.core.keybinder as keybinder
wnck_WINDOW_CHANGE_ALL = ( wnck.WINDOW_CHANGE_X|wnck.WINDOW_CHANGE_Y|wnck.WIN DOW_CHANGE_WIDTH|wnck.WINDOW_CHANGE_HEIGHT)
def handle(num):
screen = wnck.screen_get_default()
screen.force_update()
workspace = screen.get_active_workspace()
window = screen.get_active_window()
# TODO - get usable desktop size instead of hardcoding
dx,dy, dw,dh = 0,25, screen.get_width(), screen.get_height()-25
if num in (1,3,7,9): w,h = dw/2, dh/2
elif num in (4,6): w,h = dw/2, dh
elif num in (8,2): w,h = dw, dh/2
elif num in (5,): w,h = dw, dh
if num in (1,4,7,2,5,8): x = 0
else: x = dw/2
if num in (7,8,9,4,5,6): y = 0
else: y = dh/2
# TODO - set_geometry does not work for gnome-terminal windows
# or rather, it seems to work on the tabbed contents instead.
print "%i pressed\nSet geometry of '%s' to %ix%i+%i+%i" % (num, window.get_name(), w,h,x,y)
window.set_geometry(gdk.GRAVITY_NORTH_WEST, wnck_WINDOW_CHANGE_ALL, dx+x,dy+y,w,h)
window.activate(0) # TODO - current gtk time
print """Linsplit started:
Please ensure NumLock is activated.
Use <Ctrl><Alt><Numpad> to move the active window
Use <Ctrl><Alt><NumpadEnter> to quit"""
for i in range(1,10):
keybinder.tomboy_keybinder_bind( "<Ctrl><Alt>KP_%i"%i, lambda i=i: handle(i) )
keybinder.tomboy_keybinder_bind("<Ctrl><Alt>KP_Enter", gtk.main_quit)
gtk.main()