Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
path: root/shell/model/homemodel.py
diff options
context:
space:
mode:
authorMarco Pesenti Gritti <marco@localhost.localdomain>2006-12-24 14:39:00 (GMT)
committer Marco Pesenti Gritti <marco@localhost.localdomain>2006-12-24 14:39:00 (GMT)
commitb3c2368eaccd666066ba57bb496091f2631d64dc (patch)
tree4d8acda2b466c94548d76dc24e1fb531c6935415 /shell/model/homemodel.py
parent0d1e07d9c34a4e1c24cc5f374963ad55b7ee035b (diff)
Complete the shell model/view split, finally
Diffstat (limited to 'shell/model/homemodel.py')
-rw-r--r--shell/model/homemodel.py41
1 files changed, 34 insertions, 7 deletions
diff --git a/shell/model/homemodel.py b/shell/model/homemodel.py
index c1eefe4..5f98571 100644
--- a/shell/model/homemodel.py
+++ b/shell/model/homemodel.py
@@ -14,6 +14,8 @@
# along with this program; if not, write to the Free Software
# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+import logging
+
import gobject
import wnck
@@ -22,12 +24,15 @@ from model.homeactivity import HomeActivity
class HomeModel(gobject.GObject):
__gsignals__ = {
- 'activity-added': (gobject.SIGNAL_RUN_FIRST,
- gobject.TYPE_NONE,
- ([gobject.TYPE_PYOBJECT])),
- 'activity-removed': (gobject.SIGNAL_RUN_FIRST,
- gobject.TYPE_NONE,
- ([gobject.TYPE_PYOBJECT]))
+ 'activity-added': (gobject.SIGNAL_RUN_FIRST,
+ gobject.TYPE_NONE,
+ ([gobject.TYPE_PYOBJECT])),
+ 'activity-removed': (gobject.SIGNAL_RUN_FIRST,
+ gobject.TYPE_NONE,
+ ([gobject.TYPE_PYOBJECT])),
+ 'active-activity-changed': (gobject.SIGNAL_RUN_FIRST,
+ gobject.TYPE_NONE,
+ ([gobject.TYPE_PYOBJECT]))
}
def __init__(self, bundle_registry):
@@ -35,11 +40,17 @@ class HomeModel(gobject.GObject):
self._activities = {}
self._bundle_registry = bundle_registry
+ self._current_activity = None
screen = wnck.screen_get_default()
screen.connect('window-opened', self._window_opened_cb)
screen.connect('window-closed', self._window_closed_cb)
-
+ screen.connect('active-window-changed',
+ self._active_window_changed_cb)
+
+ def get_current_activity(self):
+ return self._current_activity
+
def __iter__(self):
return iter(self._activities)
@@ -56,6 +67,20 @@ class HomeModel(gobject.GObject):
def _window_closed_cb(self, screen, window):
if window.get_window_type() == wnck.WINDOW_NORMAL:
self._remove_activity(window.get_xid())
+
+ def _active_window_changed_cb(self, screen):
+ window = screen.get_active_window()
+ if not window or window.get_window_type() != wnck.WINDOW_NORMAL:
+ return
+
+ xid = window.get_xid()
+ if self._activities.has_key(xid):
+ self._current_activity = self._activities[xid]
+ else:
+ self._current_activity = None
+ logging.error('Model for window %d does not exist.' % xid)
+
+ self.emit('active-activity-changed', self._current_activity)
def _add_activity(self, window):
activity = HomeActivity(self._bundle_registry, window)
@@ -66,3 +91,5 @@ class HomeModel(gobject.GObject):
if self._activities.has_key(xid):
self.emit('activity-removed', self._activities[xid])
del self._activities[xid]
+ else:
+ logging.error('Model for window %d does not exist.' % xid)