2006-07-08 15:47:51 +02:00
|
|
|
import gtk
|
2006-07-12 22:17:57 +02:00
|
|
|
import gobject
|
2006-07-27 10:35:59 +02:00
|
|
|
import wnck
|
2006-07-06 23:34:23 +02:00
|
|
|
|
2006-08-19 01:29:42 +02:00
|
|
|
from home.HomeWindow import HomeWindow
|
2006-07-20 11:34:06 +02:00
|
|
|
from ActivityHost import ActivityHost
|
2006-09-01 15:11:52 +02:00
|
|
|
from frame.Frame import Frame
|
2006-08-25 14:39:58 +02:00
|
|
|
from globalkeys import KeyGrabber
|
2006-08-30 11:15:21 +02:00
|
|
|
import sugar
|
2006-07-09 17:37:54 +02:00
|
|
|
|
2006-08-10 00:54:54 +02:00
|
|
|
class Shell(gobject.GObject):
|
2006-09-15 12:40:22 +02:00
|
|
|
def __init__(self, model):
|
2006-08-10 00:54:54 +02:00
|
|
|
gobject.GObject.__init__(self)
|
|
|
|
|
2006-09-15 12:40:22 +02:00
|
|
|
self._model = model
|
2006-08-28 23:03:01 +02:00
|
|
|
self._screen = wnck.screen_get_default()
|
|
|
|
|
2006-08-25 17:44:07 +02:00
|
|
|
self._key_grabber = KeyGrabber()
|
|
|
|
self._key_grabber.connect('key-pressed', self.__global_key_pressed_cb)
|
|
|
|
self._key_grabber.grab('F1')
|
|
|
|
self._key_grabber.grab('F2')
|
|
|
|
self._key_grabber.grab('F3')
|
|
|
|
self._key_grabber.grab('F4')
|
2006-08-28 16:53:29 +02:00
|
|
|
self._key_grabber.grab('F5')
|
2006-09-04 22:37:17 +02:00
|
|
|
self._key_grabber.grab('F6')
|
2006-08-25 12:28:52 +02:00
|
|
|
|
2006-09-15 12:40:22 +02:00
|
|
|
self._home_window = HomeWindow(self.get_model())
|
2006-08-22 16:15:34 +02:00
|
|
|
self._home_window.show()
|
2006-09-10 01:33:34 +02:00
|
|
|
self.set_zoom_level(sugar.ZOOM_HOME)
|
2006-08-22 16:15:34 +02:00
|
|
|
|
|
|
|
self._screen.connect('window-opened', self.__window_opened_cb)
|
|
|
|
self._screen.connect('window-closed', self.__window_closed_cb)
|
2006-08-28 18:40:41 +02:00
|
|
|
self._screen.connect('active-window-changed',
|
|
|
|
self.__active_window_changed_cb)
|
2006-08-22 16:15:34 +02:00
|
|
|
|
2006-09-15 12:40:22 +02:00
|
|
|
self._frame = Frame(self)
|
2006-09-01 15:11:52 +02:00
|
|
|
self._frame.show_and_hide(10)
|
2006-08-23 11:52:18 +02:00
|
|
|
|
2006-09-04 21:34:54 +02:00
|
|
|
def __global_key_pressed_cb(self, grabber, key):
|
|
|
|
if key == 'F1':
|
|
|
|
self.set_zoom_level(sugar.ZOOM_ACTIVITY)
|
|
|
|
elif key == 'F2':
|
|
|
|
self.set_zoom_level(sugar.ZOOM_HOME)
|
|
|
|
elif key == 'F3':
|
|
|
|
self.set_zoom_level(sugar.ZOOM_FRIENDS)
|
|
|
|
elif key == 'F4':
|
|
|
|
self.set_zoom_level(sugar.ZOOM_MESH)
|
|
|
|
elif key == 'F5':
|
|
|
|
self._frame.toggle_visibility()
|
2006-09-04 22:37:17 +02:00
|
|
|
elif key == 'F6':
|
2006-09-15 12:40:22 +02:00
|
|
|
self._model.start_activity('org.sugar.Terminal')
|
2006-08-12 16:19:47 +02:00
|
|
|
|
2006-08-09 14:22:58 +02:00
|
|
|
def __window_opened_cb(self, screen, window):
|
|
|
|
if window.get_window_type() == wnck.WINDOW_NORMAL:
|
2006-09-15 12:40:22 +02:00
|
|
|
self._model.add_activity(ActivityHost(self, window))
|
2006-08-09 14:22:58 +02:00
|
|
|
|
2006-08-28 18:40:41 +02:00
|
|
|
def __active_window_changed_cb(self, screen):
|
|
|
|
window = screen.get_active_window()
|
|
|
|
if window and window.get_window_type() == wnck.WINDOW_NORMAL:
|
2006-09-15 12:40:22 +02:00
|
|
|
self._model.set_current_activity(window.get_xid())
|
2006-08-28 18:40:41 +02:00
|
|
|
|
2006-08-09 14:22:58 +02:00
|
|
|
def __window_closed_cb(self, screen, window):
|
|
|
|
if window.get_window_type() == wnck.WINDOW_NORMAL:
|
2006-09-15 12:40:22 +02:00
|
|
|
self._model.remove_activity(window.get_xid())
|
2006-08-09 12:57:42 +02:00
|
|
|
|
2006-09-15 12:40:22 +02:00
|
|
|
def get_model(self):
|
|
|
|
return self._model
|
2006-07-08 15:47:51 +02:00
|
|
|
|
2006-08-25 14:03:48 +02:00
|
|
|
def set_zoom_level(self, level):
|
2006-08-28 14:36:48 +02:00
|
|
|
if level == sugar.ZOOM_ACTIVITY:
|
2006-08-19 02:00:04 +02:00
|
|
|
self._screen.toggle_showing_desktop(False)
|
|
|
|
else:
|
|
|
|
self._screen.toggle_showing_desktop(True)
|
2006-08-29 11:48:20 +02:00
|
|
|
self._home_window.set_zoom_level(level)
|