From b1d437f93282c895d8219e6fac0e8c2fad4de078 Mon Sep 17 00:00:00 2001
From: Aleksey Lim <alsroot@member.fsf.org>
Date: Fri, 4 Sep 2009 14:10:50 +0000
Subject: Details dialog blinks while requery #1271
---
src/jarabe/journal/detailview.py | 8 ++--
src/jarabe/journal/expandedentry.py | 92 ++++++++++++++++++++++-------------
2 files changed, 62 insertions(+), 38 deletions(-)
diff --git a/src/jarabe/journal/detailview.py b/src/jarabe/journal/detailview.py
index 47fdb1f..b4a2339 100644
a
|
b
|
class DetailView(gtk.VBox): |
64 | 64 | return False |
65 | 65 | |
66 | 66 | def _update_view(self): |
67 | | if self._expanded_entry: |
68 | | self._root.remove(self._expanded_entry) |
69 | | self._expanded_entry = ExpandedEntry(self._metadata) |
70 | | self._root.append(self._expanded_entry, hippo.PACK_EXPAND) |
| 67 | if self._expanded_entry is None: |
| 68 | self._expanded_entry = ExpandedEntry() |
| 69 | self._root.append(self._expanded_entry, hippo.PACK_EXPAND) |
| 70 | self._expanded_entry.set_metadata(self._metadata) |
71 | 71 | |
72 | 72 | def refresh(self): |
73 | 73 | logging.debug('DetailView.refresh') |
diff --git a/src/jarabe/journal/expandedentry.py b/src/jarabe/journal/expandedentry.py
index ff830bf..fdf3478 100644
a
|
b
|
class BuddyList(hippo.CanvasBox): |
63 | 63 | self.append(hbox) |
64 | 64 | |
65 | 65 | class ExpandedEntry(hippo.CanvasBox): |
66 | | def __init__(self, metadata): |
| 66 | def __init__(self): |
67 | 67 | hippo.CanvasBox.__init__(self) |
68 | 68 | self.props.orientation = hippo.ORIENTATION_VERTICAL |
69 | 69 | self.props.background_color = style.COLOR_WHITE.get_int() |
70 | 70 | self.props.padding_top = style.DEFAULT_SPACING * 3 |
71 | 71 | |
72 | | self._metadata = metadata |
| 72 | self._metadata = None |
73 | 73 | self._update_title_sid = None |
74 | 74 | |
75 | 75 | # Create header |
… |
… |
class ExpandedEntry(hippo.CanvasBox): |
102 | 102 | self._keep_icon = self._create_keep_icon() |
103 | 103 | header.append(self._keep_icon) |
104 | 104 | |
105 | | self._icon = self._create_icon() |
106 | | header.append(self._icon) |
| 105 | self._icon = None |
| 106 | self._icon_box = hippo.CanvasBox() |
| 107 | header.append(self._icon_box) |
107 | 108 | |
108 | 109 | self._title = self._create_title() |
109 | 110 | header.append(self._title, hippo.PACK_EXPAND) |
… |
… |
class ExpandedEntry(hippo.CanvasBox): |
117 | 118 | |
118 | 119 | # First column |
119 | 120 | |
120 | | self._preview = self._create_preview() |
121 | | first_column.append(self._preview) |
| 121 | self._preview_box = hippo.CanvasBox() |
| 122 | first_column.append(self._preview_box) |
122 | 123 | |
123 | | technical_box = self._create_technical() |
124 | | first_column.append(technical_box) |
| 124 | self._technical_box = hippo.CanvasBox() |
| 125 | first_column.append(self._technical_box) |
125 | 126 | |
126 | 127 | # Second column |
127 | 128 | |
… |
… |
class ExpandedEntry(hippo.CanvasBox): |
131 | 132 | tags_box, self._tags = self._create_tags() |
132 | 133 | second_column.append(tags_box) |
133 | 134 | |
134 | | self._buddy_list = self._create_buddy_list() |
| 135 | self._buddy_list = hippo.CanvasBox() |
135 | 136 | second_column.append(self._buddy_list) |
136 | 137 | |
| 138 | def set_metadata(self, metadata): |
| 139 | if self._metadata == metadata: |
| 140 | return |
| 141 | self._metadata = metadata |
| 142 | |
| 143 | self._keep_icon.keep = (int(metadata.get('keep', 0)) == 1) |
| 144 | |
| 145 | self._icon = self._create_icon() |
| 146 | self._icon_box.clear() |
| 147 | self._icon_box.append(self._icon) |
| 148 | |
| 149 | self._date.props.text = misc.get_date(metadata) |
| 150 | |
| 151 | title = self._title.props.widget |
| 152 | title.props.text = metadata.get('title', _('Untitled')) |
| 153 | title.props.editable = model.is_editable(metadata) |
| 154 | |
| 155 | self._preview_box.clear() |
| 156 | self._preview_box.append(self._create_preview()) |
| 157 | |
| 158 | self._technical_box.clear() |
| 159 | self._technical_box.append(self._create_technical()) |
| 160 | |
| 161 | self._buddy_list.clear() |
| 162 | self._buddy_list.append(self._create_buddy_list()) |
| 163 | |
| 164 | description = self._description.text_view_widget |
| 165 | description.props.buffer.props.text = metadata.get('description', '') |
| 166 | description.props.editable = model.is_editable(metadata) |
| 167 | |
| 168 | tags = self._tags.text_view_widget |
| 169 | tags.props.buffer.props.text = metadata.get('tags', '') |
| 170 | tags.props.editable = model.is_editable(metadata) |
| 171 | |
137 | 172 | def _create_keep_icon(self): |
138 | | keep = int(self._metadata.get('keep', 0)) == 1 |
139 | | keep_icon = KeepIcon(keep) |
| 173 | keep_icon = KeepIcon(False) |
140 | 174 | keep_icon.connect('activated', self._keep_icon_activated_cb) |
141 | 175 | return keep_icon |
142 | 176 | |
… |
… |
class ExpandedEntry(hippo.CanvasBox): |
160 | 194 | |
161 | 195 | def _create_title(self): |
162 | 196 | entry = gtk.Entry() |
163 | | entry.props.text = self._metadata.get('title', _('Untitled')) |
| 197 | entry.connect('focus-out-event', self._title_focus_out_event_cb) |
164 | 198 | |
165 | 199 | bg_color = style.COLOR_WHITE.get_gdk_color() |
166 | 200 | entry.modify_bg(gtk.STATE_INSENSITIVE, bg_color) |
167 | 201 | entry.modify_base(gtk.STATE_INSENSITIVE, bg_color) |
168 | 202 | |
169 | | entry.props.editable = model.is_editable(self._metadata) |
170 | | if entry.props.editable: |
171 | | entry.connect('focus-out-event', self._title_focus_out_event_cb) |
172 | | |
173 | 203 | return hippo.CanvasWidget(widget=entry) |
174 | 204 | |
175 | 205 | def _create_date(self): |
176 | 206 | date = hippo.CanvasText(xalign=hippo.ALIGNMENT_START, |
177 | | font_desc=style.FONT_NORMAL.get_pango_desc(), |
178 | | text = misc.get_date(self._metadata)) |
| 207 | font_desc=style.FONT_NORMAL.get_pango_desc()) |
179 | 208 | return date |
180 | 209 | |
181 | 210 | def _create_preview(self): |
… |
… |
class ExpandedEntry(hippo.CanvasBox): |
297 | 326 | |
298 | 327 | vbox.append(text) |
299 | 328 | |
300 | | description = self._metadata.get('description', '') |
301 | | text_view = CanvasTextView(description, |
302 | | box_height=style.GRID_CELL_SIZE * 2) |
| 329 | text_view = CanvasTextView('', |
| 330 | box_height=style.GRID_CELL_SIZE * 2) |
303 | 331 | vbox.append(text_view, hippo.PACK_EXPAND) |
304 | 332 | |
305 | 333 | text_view.text_view_widget.props.accepts_tab = False |
306 | | editable = model.is_editable(self._metadata) |
307 | | if editable: |
308 | | text_view.text_view_widget.connect('focus-out-event', |
309 | | self._description_focus_out_event_cb) |
310 | | text_view.text_view_widget.props.editable = editable |
| 334 | text_view.text_view_widget.connect('focus-out-event', |
| 335 | self._description_focus_out_event_cb) |
311 | 336 | |
312 | 337 | return vbox, text_view |
313 | 338 | |
… |
… |
class ExpandedEntry(hippo.CanvasBox): |
326 | 351 | |
327 | 352 | vbox.append(text) |
328 | 353 | |
329 | | tags = self._metadata.get('tags', '') |
330 | | text_view = CanvasTextView(tags, box_height=style.GRID_CELL_SIZE * 2) |
| 354 | text_view = CanvasTextView('', |
| 355 | box_height=style.GRID_CELL_SIZE * 2) |
331 | 356 | vbox.append(text_view, hippo.PACK_EXPAND) |
332 | 357 | |
333 | 358 | text_view.text_view_widget.props.accepts_tab = False |
334 | | editable = model.is_editable(self._metadata) |
335 | | if editable: |
336 | | text_view.text_view_widget.connect('focus-out-event', |
337 | | self._tags_focus_out_event_cb) |
338 | | text_view.text_view_widget.props.editable = editable |
| 359 | text_view.text_view_widget.connect('focus-out-event', |
| 360 | self._tags_focus_out_event_cb) |
339 | 361 | |
340 | 362 | return vbox, text_view |
341 | 363 | |
… |
… |
class ExpandedEntry(hippo.CanvasBox): |
354 | 376 | self._update_entry() |
355 | 377 | |
356 | 378 | def _update_entry(self): |
| 379 | if not model.is_editable(self._metadata): |
| 380 | return |
| 381 | |
357 | 382 | needs_update = False |
358 | 383 | |
359 | 384 | old_title = self._metadata.get('title', None) |
… |
… |
class ExpandedEntry(hippo.CanvasBox): |
405 | 430 | logging.debug('_preview_box_button_release_event_cb') |
406 | 431 | misc.resume(self._metadata) |
407 | 432 | return True |
408 | | |