From 41af9218267071a605c684fad90ca81fd4c10c3d Mon Sep 17 00:00:00 2001 From: Marco Pesenti Gritti Date: Mon, 2 Jul 2007 14:53:50 +0200 Subject: [PATCH] Cleanup zoom level management --- shell/model/shellmodel.py | 29 ++++++++++++++++++++++++++--- shell/view/Shell.py | 34 +++++++++++++--------------------- 2 files changed, 39 insertions(+), 24 deletions(-) diff --git a/shell/model/shellmodel.py b/shell/model/shellmodel.py index 1117ea59..4c3dfeab 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 4f752418..1be2b6bb 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,25 +147,20 @@ 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 - - if self._zoom_level == ShellModel.ZOOM_ACTIVITY: - self._screen.toggle_showing_desktop(False) - else: - self._screen.toggle_showing_desktop(True) - self._home_window.set_zoom_level(self._zoom_level) - - if self._zoom_level == ShellModel.ZOOM_HOME: + def _zoom_level_changed_cb(self, model, pspec): + if model.get_zoom_level() == ShellModel.ZOOM_HOME: self._frame.show() else: self._frame.hide() + 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(level) + def get_current_activity(self): return self._current_host