Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
path: root/shell
diff options
context:
space:
mode:
authorMarco 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)
commitf300006b76ed905e52fb5b5848e09bf34a91216e (patch)
tree7928cacd4b7cbb16a8ac6da43ddf34cf027964d0 /shell
parent0daccca71f668b3dbf9990cc904e15a21e5cb44b (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/kbdconfig6
-rw-r--r--shell/model/homemodel.py14
-rw-r--r--shell/view/ActivityHost.py4
-rw-r--r--shell/view/Shell.py35
-rw-r--r--shell/view/keyhandler.py64
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))