diff options
author | Marco Pesenti Gritti <mpg@redhat.com> | 2007-10-23 13:19:17 (GMT) |
---|---|---|
committer | Marco Pesenti Gritti <mpg@redhat.com> | 2007-10-23 13:19:17 (GMT) |
commit | f300006b76ed905e52fb5b5848e09bf34a91216e (patch) | |
tree | 7928cacd4b7cbb16a8ac6da43ddf34cf027964d0 /shell | |
parent | 0daccca71f668b3dbf9990cc904e15a21e5cb44b (diff) |
Move window management keybindings inside sugar.
Add a TakeScreenshot dbus method and have the shell
call it when the activity can safely take a screenshot
to use as a preview.
Diffstat (limited to 'shell')
-rw-r--r-- | shell/kbdconfig | 6 | ||||
-rw-r--r-- | shell/model/homemodel.py | 14 | ||||
-rw-r--r-- | shell/view/ActivityHost.py | 4 | ||||
-rw-r--r-- | shell/view/Shell.py | 35 | ||||
-rw-r--r-- | shell/view/keyhandler.py | 64 |
5 files changed, 89 insertions, 34 deletions
diff --git a/shell/kbdconfig b/shell/kbdconfig index cab4906..03c288a 100644 --- a/shell/kbdconfig +++ b/shell/kbdconfig @@ -1,9 +1,3 @@ # This is the sugar keyboard configuration for matchbox -### Window operation short cuts - -<Alt>n=next -<Alt>p=prev -<Ctrl>escape=close -<Ctrl>Q=close <Alt>return=fullscreen diff --git a/shell/model/homemodel.py b/shell/model/homemodel.py index 1a27645..fb8cc56 100644 --- a/shell/model/homemodel.py +++ b/shell/model/homemodel.py @@ -70,6 +70,20 @@ class HomeModel(gobject.GObject): screen.connect('active-window-changed', self._active_window_changed_cb) + def get_previous_activity(self): + i = self._activities.index(self._pending_activity) + if i > 0: + return self._activities[i - 1] + else: + return None + + def get_next_activity(self): + i = self._activities.index(self._pending_activity) + if i < len(self._activities) - 1: + return self._activities[i + 1] + else: + return None + def get_pending_activity(self): """Returns the activity that would be seen in the Activity zoom level diff --git a/shell/view/ActivityHost.py b/shell/view/ActivityHost.py index c6c0853..4332372 100644 --- a/shell/view/ActivityHost.py +++ b/shell/view/ActivityHost.py @@ -72,6 +72,10 @@ class ActivityHost: else: logging.error('Invite failed, activity service not ') + def toggle_fullscreen(self): + fullscreen = not self._window.is_fullscreen() + self._window.set_fullscreen(fullscreen) + def present(self): # wnck.Window.activate() expects a timestamp, but we don't # always have one, and libwnck will complain if we pass "0", diff --git a/shell/view/Shell.py b/shell/view/Shell.py index 26d39a6..20cf5bc 100644 --- a/shell/view/Shell.py +++ b/shell/view/Shell.py @@ -160,10 +160,20 @@ class Shell(gobject.GObject): self._activities_starting.add(activity_type) activityfactory.create(activity_type) + def take_activity_screenshot(self): + home_model = self._model.get_home() + service = home_model.get_active_activity().get_service() + service.TakeScreenshot() + def set_zoom_level(self, level): - if level == self._model.get_zoom_level(): + old_level = self._model.get_zoom_level() + if level == old_level: return + if old_level == ShellModel.ZOOM_ACTIVITY and \ + not self.get_frame().visible: + self.take_activity_screenshot() + if level == ShellModel.ZOOM_ACTIVITY: if self._pending_host is not None: self._pending_host.present() @@ -173,6 +183,29 @@ class Shell(gobject.GObject): self._screen.toggle_showing_desktop(True) self._home_window.set_zoom_level(level) + def toggle_activity_fullscreen(self): + if self._model.get_zoom_level() == ShellModel.ZOOM_ACTIVITY: + self.get_current_activity().toggle_fullscreen() + + def activate_previous_activity(self): + home_model = self._model.get_home() + activity = home_model.get_previous_activity() + if activity: + self.take_activity_screenshot() + activity.get_window().activate(1) + + def activate_next_activity(self): + home_model = self._model.get_home() + activity = home_model.get_next_activity() + if activity: + self.take_activity_screenshot() + activity.get_window().activate(1) + + def close_current_activity(self): + self.take_activity_screenshot() + if self._model.get_zoom_level() == ShellModel.ZOOM_ACTIVITY: + self.get_current_activity().close() + def get_current_activity(self): return self._current_host diff --git a/shell/view/keyhandler.py b/shell/view/keyhandler.py index 6a8fb9b..007bf2d 100644 --- a/shell/view/keyhandler.py +++ b/shell/view/keyhandler.py @@ -32,29 +32,34 @@ _BRIGHTNESS_MAX = 15 _VOLUME_MAX = 100 _actions_table = { - 'F1' : 'zoom_mesh', - 'F2' : 'zoom_friends', - 'F3' : 'zoom_home', - 'F4' : 'zoom_activity', - 'F9' : 'brightness_down', - 'F10' : 'brightness_up', - '<ctrl>F9' : 'brightness_min', - '<ctrl>F10' : 'brightness_max', - 'F11' : 'volume_down', - 'F12' : 'volume_up', - '<ctrl>F11' : 'volume_min', - '<ctrl>F12' : 'volume_max', - '<alt>1' : 'screenshot', - '<alt>equal' : 'console', - '<alt>0' : 'console', - '<alt>f' : 'frame', - '0x93' : 'frame', - '<alt>o' : 'overlay', - '0xE0' : 'overlay', - '0xEB' : 'rotate', - '<alt>r' : 'rotate', - '<alt>Tab' : 'home', - '<alt>q' : 'quit_emulator', + 'F1' : 'zoom_mesh', + 'F2' : 'zoom_friends', + 'F3' : 'zoom_home', + 'F4' : 'zoom_activity', + 'F9' : 'brightness_down', + 'F10' : 'brightness_up', + '<ctrl>F9' : 'brightness_min', + '<ctrl>F10' : 'brightness_max', + 'F11' : 'volume_down', + 'F12' : 'volume_up', + '<ctrl>F11' : 'volume_min', + '<ctrl>F12' : 'volume_max', + '<alt>1' : 'screenshot', + '<alt>equal' : 'console', + '<alt>0' : 'console', + '<alt>f' : 'frame', + '0x93' : 'frame', + '<alt>o' : 'overlay', + '0xE0' : 'overlay', + '0xEB' : 'rotate', + '<alt>r' : 'rotate', + '<alt>q' : 'quit_emulator', + '<alt>tab' : 'next_window', + '<alt>n' : 'next_window', + '<ctrl><alt>tab' : 'previous_window', + '<alt>p' : 'previous_window', + '<ctrl>escape' : 'close_window', + '<ctrl>q' : 'close_window' } class KeyHandler(object): @@ -103,6 +108,15 @@ class KeyHandler(object): else: hw_manager.set_display_mode(hardwaremanager.COLOR_MODE) + def handle_previous_window(self): + self._shell.activate_previous_activity() + + def handle_next_window(self): + self._shell.activate_next_activity() + + def handle_close_window(self): + self._shell.close_current_activity() + def handle_zoom_mesh(self): self._shell.set_zoom_level(ShellModel.ZOOM_MESH) @@ -166,10 +180,6 @@ class KeyHandler(object): pid = int(os.environ['SUGAR_EMULATOR_PID']) os.kill(pid, signal.SIGTERM) - def handle_home(self): - # FIXME: finish alt+tab support - pass - def _key_pressed_cb(self, grabber, keycode, state): key = grabber.get_key(keycode, state) logging.debug('_key_pressed_cb: %i %i %s' % (keycode, state, key)) |