Kaydet (Commit) 2ed1d6d8 authored tarafından Colomban Wendling's avatar Colomban Wendling

Do not apply color scheme upon color scheme selection dialog display

Current color scheme was applied upon color scheme selection dialog
display because the GtkTreeView::cursor-changed signal is emitted when
the tree view is initially shown (since it actually gets the focus for
the first time), uselessly re-applying the current color scheme.

This is a performance issue because when many documents are open
updating the color scheme can take a few seconds.

Now we watch for the GtkTreeSelection::changed signal on the tree
view's selection, which is only emitted when the selected item actually
changes.  We also connect to that signal after filling the tree so we
don't get notified on the initial selection setup.
üst ffd3d739
...@@ -1175,16 +1175,13 @@ enum ...@@ -1175,16 +1175,13 @@ enum
SCHEME_COLUMNS SCHEME_COLUMNS
}; };
static void static void on_color_scheme_changed(GtkTreeSelection *treesel, gpointer dummy)
on_color_scheme_changed(void)
{ {
GtkTreeSelection *treesel;
GtkTreeModel *model; GtkTreeModel *model;
GtkTreeIter iter; GtkTreeIter iter;
gchar *fname; gchar *fname;
gchar *path; gchar *path;
treesel = gtk_tree_view_get_selection(GTK_TREE_VIEW(scheme_tree));
if (!gtk_tree_selection_get_selected(treesel, &model, &iter)) if (!gtk_tree_selection_get_selected(treesel, &model, &iter))
return; return;
gtk_tree_model_get(model, &iter, SCHEME_FILE, &fname, -1); gtk_tree_model_get(model, &iter, SCHEME_FILE, &fname, -1);
...@@ -1319,13 +1316,13 @@ void highlighting_show_color_scheme_dialog(void) ...@@ -1319,13 +1316,13 @@ void highlighting_show_color_scheme_dialog(void)
G_TYPE_STRING, G_TYPE_STRING); G_TYPE_STRING, G_TYPE_STRING);
GtkCellRenderer *text_renderer; GtkCellRenderer *text_renderer;
GtkTreeViewColumn *column; GtkTreeViewColumn *column;
GtkTreeSelection *treesel;
GtkWidget *vbox, *swin, *tree; GtkWidget *vbox, *swin, *tree;
scheme_tree = tree = gtk_tree_view_new_with_model(GTK_TREE_MODEL(store)); scheme_tree = tree = gtk_tree_view_new_with_model(GTK_TREE_MODEL(store));
g_object_unref(store); g_object_unref(store);
gtk_tree_view_set_rules_hint(GTK_TREE_VIEW(tree), TRUE); gtk_tree_view_set_rules_hint(GTK_TREE_VIEW(tree), TRUE);
gtk_tree_view_set_headers_visible(GTK_TREE_VIEW(tree), FALSE); gtk_tree_view_set_headers_visible(GTK_TREE_VIEW(tree), FALSE);
g_signal_connect(tree, "cursor-changed", on_color_scheme_changed, NULL);
text_renderer = gtk_cell_renderer_text_new(); text_renderer = gtk_cell_renderer_text_new();
g_object_set(text_renderer, "wrap-mode", PANGO_WRAP_WORD, NULL); g_object_set(text_renderer, "wrap-mode", PANGO_WRAP_WORD, NULL);
...@@ -1335,6 +1332,9 @@ void highlighting_show_color_scheme_dialog(void) ...@@ -1335,6 +1332,9 @@ void highlighting_show_color_scheme_dialog(void)
add_color_scheme_items(store); add_color_scheme_items(store);
treesel = gtk_tree_view_get_selection(GTK_TREE_VIEW(tree));
g_signal_connect(treesel, "changed", G_CALLBACK(on_color_scheme_changed), NULL);
/* old dialog may still be showing */ /* old dialog may still be showing */
if (dialog) if (dialog)
gtk_widget_destroy(dialog); gtk_widget_destroy(dialog);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment