diff options
-rw-r--r-- | shell/model/shellmodel.py | 29 | ||||
-rw-r--r-- | shell/view/Shell.py | 32 |
2 files changed, 38 insertions, 23 deletions
diff --git a/shell/model/shellmodel.py b/shell/model/shellmodel.py index 1117ea5..4c3dfea 100644 --- a/shell/model/shellmodel.py +++ b/shell/model/shellmodel.py @@ -16,6 +16,7 @@ import os +import wnck import gobject from sugar.presence import presenceservice @@ -37,9 +38,12 @@ class ShellModel(gobject.GObject): ZOOM_ACTIVITY = 3 __gproperties__ = { - 'state' : (int, None, None, - 0, 2, STATE_RUNNING, - gobject.PARAM_READWRITE) + 'state' : (int, None, None, + 0, 2, STATE_RUNNING, + gobject.PARAM_READWRITE), + 'zoom-level' : (int, None, None, + 0, 3, ZOOM_HOME, + gobject.PARAM_READABLE) } def __init__(self): @@ -47,6 +51,7 @@ class ShellModel(gobject.GObject): self._current_activity = None self._state = self.STATE_RUNNING + self._zoom_level = self.ZOOM_HOME self._pservice = presenceservice.get_instance() @@ -57,6 +62,19 @@ class ShellModel(gobject.GObject): self._home = HomeModel() self._devices = DevicesModel() + self._screen = wnck.screen_get_default() + self._screen.connect('showing-desktop-changed', + self._showing_desktop_changed_cb) + + def set_zoom_level(self, level): + self._zoom_level = level + + def get_zoom_level(self): + if self._screen.get_showing_desktop(): + return self._zoom_level + else: + return self.ZOOM_ACTIVITY + def do_set_property(self, pspec, value): if pspec.name == 'state': self._state = value @@ -64,6 +82,8 @@ class ShellModel(gobject.GObject): def do_get_property(self, pspec): if pspec.name == 'state': return self._state + elif pspec.name == 'zoom-level': + return self.get_zoom_level() def get_mesh(self): return self._mesh @@ -82,3 +102,6 @@ class ShellModel(gobject.GObject): def get_devices(self): return self._devices + + def _showing_desktop_changed_cb(self, screen): + self.notify('zoom-level') diff --git a/shell/view/Shell.py b/shell/view/Shell.py index 4f75241..1be2b6b 100644 --- a/shell/view/Shell.py +++ b/shell/view/Shell.py @@ -59,6 +59,9 @@ class Shell(gobject.GObject): self._zoom_level = ShellModel.ZOOM_HOME + self._model.connect('notify::zoom-level', + self._zoom_level_changed_cb) + home_model = self._model.get_home() home_model.connect('activity-started', self._activity_started_cb) home_model.connect('activity-removed', self._activity_removed_cb) @@ -99,12 +102,6 @@ class Shell(gobject.GObject): self._current_host = host - if self._current_host: - self._current_host.set_active(True) - self.set_zoom_level(ShellModel.ZOOM_ACTIVITY) - else: - self.set_zoom_level(ShellModel.ZOOM_HOME) - def get_model(self): return self._model @@ -150,24 +147,19 @@ class Shell(gobject.GObject): self._activities_starting.add(activity_type) activityfactory.create(activity_type) - def set_zoom_level(self, level): - if self._zoom_level == level: - return - if len(self._hosts) == 0 and level == ShellModel.ZOOM_ACTIVITY: - return - - self._zoom_level = level + def _zoom_level_changed_cb(self, model, pspec): + if model.get_zoom_level() == ShellModel.ZOOM_HOME: + self._frame.show() + else: + self._frame.hide() - if self._zoom_level == ShellModel.ZOOM_ACTIVITY: + def set_zoom_level(self, level): + if level == ShellModel.ZOOM_ACTIVITY: self._screen.toggle_showing_desktop(False) else: + self._model.set_zoom_level(level) self._screen.toggle_showing_desktop(True) - self._home_window.set_zoom_level(self._zoom_level) - - if self._zoom_level == ShellModel.ZOOM_HOME: - self._frame.show() - else: - self._frame.hide() + self._home_window.set_zoom_level(level) def get_current_activity(self): return self._current_host |