From 07618f5dc257bf70170d2a9f3321d894dc36a49b Mon Sep 17 00:00:00 2001 From: Aleksey Lim Date: Sat, 22 Aug 2009 07:11:35 +0000 Subject: Do not blink by preview while re-reading entries --- (limited to 'src') diff --git a/src/jarabe/journal/objectmodel.py b/src/jarabe/journal/objectmodel.py index 621f261..6e98967 100644 --- a/src/jarabe/journal/objectmodel.py +++ b/src/jarabe/journal/objectmodel.py @@ -26,6 +26,8 @@ from jarabe.journal.source import Source from jarabe.journal.browse.lazymodel import LazyModel class ObjectModel(LazyModel): + FIELD_FETCHED_FLAG = 50 + def __init__(self): LazyModel.__init__(self, Source.FIELDS_BASE, Source.FIELDS_CALC) self._fetch_queue = [] @@ -37,22 +39,23 @@ class ObjectModel(LazyModel): int(row[Source.FIELD_TIMESTAMP]) or 0) if column == Source.FIELD_THUMB: - row = self.fetch_metadata(row) - if row is not None: - return + if self.fetch_metadata(row): + return row[Source.FIELD_THUMB] return None return None def fetch_metadata(self, row, force=False): - if row.has_key(Source.FIELD_FETCHED): - return row + if row.has_key(self.FIELD_FETCHED_FLAG): + return True if row not in self._fetch_queue: self._fetch_queue.append(row) if len(self._fetch_queue) == 1: gobject.idle_add(self.__idle_cb, force) + return False + def __idle_cb(self, force): while len(self._fetch_queue): row = self._fetch_queue[0] @@ -67,10 +70,12 @@ class ObjectModel(LazyModel): del self._fetch_queue[0] if metadata is not None: - row[Source.FIELD_THUMB] = misc.load_preview(metadata) row.metadata.update(metadata) - row[Source.FIELD_FETCHED] = True - self.emit('row-changed', row.path, row.iter) + + row[Source.FIELD_THUMB] = misc.load_preview(metadata) + row[self.FIELD_FETCHED_FLAG] = True + + self.emit('row-changed', row.path, row.iter) if len(self._fetch_queue): self.__idle_cb(False) diff --git a/src/jarabe/journal/source.py b/src/jarabe/journal/source.py index 72a963b..a7c9084 100644 --- a/src/jarabe/journal/source.py +++ b/src/jarabe/journal/source.py @@ -42,8 +42,6 @@ class Source(GObject): FIELD_MODIFY_TIME = 31 FIELD_THUMB = 32 - FIELD_FETCHED = 50 - FIELDS_BASE = {'uid': (FIELD_UID, str), 'title': (FIELD_TITLE, str), 'mtime': (FIELD_MTIME, str), diff --git a/src/jarabe/journal/thumbsview.py b/src/jarabe/journal/thumbsview.py index 3debb94..ac553bd 100644 --- a/src/jarabe/journal/thumbsview.py +++ b/src/jarabe/journal/thumbsview.py @@ -25,7 +25,8 @@ from sugar.graphics.xocolor import XoColor from sugar.graphics.palette import CanvasInvoker from jarabe.journal.keepicon import KeepIcon -from jarabe.journal.objectmodel import Source +from jarabe.journal.source import Source +from jarabe.journal.objectmodel import ObjectModel from jarabe.journal.browse.tableview import TableView, TableCell from jarabe.journal.palettes import ObjectPalette from jarabe.journal import misc @@ -39,6 +40,8 @@ class ThumbsCell(TableCell, hippo.CanvasBox): def __init__(self): TableCell.__init__(self) + self._last_uid = None + hippo.CanvasBox.__init__(self, orientation=hippo.ORIENTATION_VERTICAL, padding_left=style.DEFAULT_SPACING, @@ -110,13 +113,22 @@ class ThumbsCell(TableCell, hippo.CanvasBox): self.date.props.text = self.row[Source.FIELD_MODIFY_TIME] or '' self.keep.props.keep = int(self.row[Source.FIELD_KEEP] or 0) == 1 - thumb = self.row[Source.FIELD_THUMB] - w, h = self.activity_box.get_allocation() if w / 4. * 3. > h: w = int(h / 3. * 4.) else: h = int(w / 4. * 3.) + thumb = self.row[Source.FIELD_THUMB] + + + logging.error('> %r %r %r %r' % (self, self._last_uid, self.row[Source.FIELD_UID], self.row.has_key(ObjectModel.FIELD_FETCHED_FLAG))) + + if self._last_uid == self.row[Source.FIELD_UID] and \ + not self.row.has_key(ObjectModel.FIELD_FETCHED_FLAG): + # do not blink by preview while re-reading entries + return + else: + self._last_uid = self.row[Source.FIELD_UID] if thumb is None: self.thumb.set_visible(False) -- cgit v0.9.1