[gtk/matthiasc/for-master] fontchooser: Populate the list incrementally
- From: Matthias Clasen <matthiasc src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gtk/matthiasc/for-master] fontchooser: Populate the list incrementally
- Date: Tue, 25 Aug 2020 19:14:51 +0000 (UTC)
commit 717419030b3122326a16e2d0e4052956438a5a71
Author: Matthias Clasen <mclasen redhat com>
Date: Tue Aug 25 15:13:39 2020 -0400
fontchooser: Populate the list incrementally
By adding 20 fonts / frame to the font list, we can
get the font chooser dialog to show up much faster.
This change gets the font chooser up in 265ms here.
gtk/gtkfontchooserwidget.c | 32 ++++++++++++++++++++++++++++++++
1 file changed, 32 insertions(+)
---
diff --git a/gtk/gtkfontchooserwidget.c b/gtk/gtkfontchooserwidget.c
index 480cd88d54..3bb2b925ef 100644
--- a/gtk/gtkfontchooserwidget.c
+++ b/gtk/gtkfontchooserwidget.c
@@ -54,6 +54,7 @@
#include "gtkroot.h"
#include "gtkfilterlistmodel.h"
#include "gtkflattenlistmodel.h"
+#include "gtkslicelistmodel.h"
#include "gtkmaplistmodel.h"
#include <hb-ot.h>
@@ -770,6 +771,33 @@ axis_free (gpointer v)
g_free (a);
}
+static gboolean
+add_to_fontlist (GtkWidget *widget,
+ GdkFrameClock *clock,
+ gpointer user_data)
+{
+ GtkFontChooserWidget *self = GTK_FONT_CHOOSER_WIDGET (widget);
+ GtkSliceListModel *model = user_data;
+ GListModel *child_model;
+ guint n;
+
+ if (gtk_filter_list_model_get_model (self->filter_model) != G_LIST_MODEL (model))
+ return G_SOURCE_REMOVE;
+
+ child_model = gtk_slice_list_model_get_model (model);
+
+ n = g_list_model_get_n_items (G_LIST_MODEL (model));
+
+ n += 10;
+
+ gtk_slice_list_model_set_size (model, n);
+
+ if (n < g_list_model_get_n_items (child_model))
+ return G_SOURCE_CONTINUE;
+ else
+ return G_SOURCE_REMOVE;
+}
+
static void
update_fontlist (GtkFontChooserWidget *self)
{
@@ -784,6 +812,10 @@ update_fontlist (GtkFontChooserWidget *self)
model = g_object_ref (G_LIST_MODEL (fontmap));
else
model = G_LIST_MODEL (gtk_flatten_list_model_new (G_LIST_MODEL (g_object_ref (fontmap))));
+
+ model = G_LIST_MODEL (gtk_slice_list_model_new (model, 0, 20));
+ gtk_widget_add_tick_callback (GTK_WIDGET (self), add_to_fontlist, g_object_ref (model), g_object_unref);
+
gtk_filter_list_model_set_model (self->filter_model, model);
g_object_unref (model);
}
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]