From f5445488cc0b2c44fa19d9712fe30857129f617a Mon Sep 17 00:00:00 2001 From: Thomas Leonard Date: Sun, 16 Mar 2008 17:41:39 +0000 Subject: [PATCH] Use an existing DirModel when possible. --- rox/shell/directory.py | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/rox/shell/directory.py b/rox/shell/directory.py index 14606a1..151c353 100644 --- a/rox/shell/directory.py +++ b/rox/shell/directory.py @@ -33,14 +33,13 @@ class DirModel: def __init__(self, file): assert isinstance(file, gio.File), file self.file = file - self.users = set() + self.users = [] def __del__(self): assert not self.users, "DirModel garbage collected while still monitoring! Monitored by " + str(self.users) def add_ref(self, user): user = id(user) - assert user not in self.users if not self.users: # First user... @@ -53,7 +52,7 @@ class DirModel: self.monitor.connect('changed', lambda *args: weakself().contents_changed(*args)) self.build_contents() - self.users.add(user) + self.users.append(user) def del_ref(self, user): user = id(user) @@ -100,6 +99,14 @@ class DirModel: self.model[new] = [name, pixbuf, info] +dirs = weakref.WeakValueDictionary() def get_dir_model(file): # Might want some caching here... - return DirModel(file) + uri = file.get_uri() + try: + return dirs[uri] + except KeyError: + dm = DirModel(file) + print "new", uri + dirs[uri] = dm + return dm -- 2.11.4.GIT