gnome-specimen r7 - trunk-from-bzr
- From: wbolster svn gnome org
- To: svn-commits-list gnome org
- Subject: gnome-specimen r7 - trunk-from-bzr
- Date: Tue, 17 Jun 2008 18:41:20 +0000 (UTC)
Author: wbolster
Date: Tue Jun 17 18:41:19 2008
New Revision: 7
URL: http://svn.gnome.org/viewvc/gnome-specimen?rev=7&view=rev
Log:
* specimenwindow.py:
- Populate the tree model/view in an idle handler so that
the interface does not block on startup.
Modified:
trunk-from-bzr/ (props changed)
trunk-from-bzr/specimenwindow.py
Modified: trunk-from-bzr/specimenwindow.py
==============================================================================
--- trunk-from-bzr/specimenwindow.py (original)
+++ trunk-from-bzr/specimenwindow.py Tue Jun 17 18:41:19 2008
@@ -1,4 +1,5 @@
+import gobject
import gtk
import gtk.glade
import pango
@@ -24,6 +25,7 @@
# windows and dialogs
self.window = tree.get_widget('main-window')
self.fonts_treeview = tree.get_widget('fonts-treeview')
+ self.fonts_treeview_window = tree.get_widget('fonts-treeview-window')
self.preview_treeview = tree.get_widget('preview-treeview')
# populate the UI
@@ -45,22 +47,6 @@
self.fonts_treeview.set_model(self.fonts_treemodelsort)
self.fonts_treemodelsort.set_sort_column_id(0, gtk.SORT_ASCENDING)
- # retrieve all available fonts
- context = self.window.get_pango_context()
- self.families = context.list_families()
-
- # FIXME: cut-off for speed. Ultimately loading should be done
- # asynchronously in an idle handler.
- self.families = self.families[:20]
-
- # populate the tree model
- for family in self.families:
- piter = self.fonts_treestore.append(None,
- [family.get_name(), family, None])
- for face in family.list_faces():
- self.fonts_treestore.append(piter,
- [face.get_face_name(), family, face])
-
# prepare the font name column
name_column = gtk.TreeViewColumn()
self.fonts_treeview.append_column(name_column)
@@ -76,6 +62,37 @@
# setup interaction
self.fonts_treeview.connect('row-activated', self.on_row_activated)
+ # populate the treemodel with all available fonts
+ context = self.window.get_pango_context()
+ self.families = list(context.list_families())
+ self.families = list(self.families)
+ gobject.idle_add(self.load_fonts_cb)
+
+ def load_fonts_cb(self, user_data=None):
+ "Idle callback that adds font families to the tree model"
+
+ howmany_at_once = 25
+
+ try:
+ # add a bunch of fonts and faces to the treemodel
+ for i in range(howmany_at_once):
+ family = self.families.pop(-1)
+ piter = self.fonts_treestore.append(None,
+ [family.get_name(), family, None])
+ for face in family.list_faces():
+ self.fonts_treestore.append(piter,
+ [face.get_face_name(), family, face])
+
+ # scroll to the top, since the treeview may have scrolled after all
+ # the insertions
+ self.fonts_treeview_window.set_vadjustment(gtk.Adjustment(0))
+
+ return True
+ except (IndexError):
+ # loading is done; the list of remaining families is empty
+ return False
+
+
def on_row_activated(self, treeview, path, viewcolumn, *user_data):
if len(path) == 1:
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]