<Space> and <Enter> keys do the same thing on Symbols tab. The following patch modifies that of <Space> key, so it only scrolls to corresponding symbol on editor but retains focus on Symbols tab. (Feature request #2919444)
Index: src/sidebar.c =================================================================== --- src/sidebar.c (revision 4704) +++ src/sidebar.c (working copy) @@ -59,6 +59,12 @@ } doc_items = {NULL, NULL, NULL, NULL};
+static struct sel_chg +{ + GtkTreeSelection *selection; + guint keyval; +} sel_chgdata; + enum { TREEVIEW_SYMBOL = 0, @@ -90,7 +96,7 @@ /* callback prototypes */ static gboolean on_openfiles_tree_selection_changed(GtkTreeSelection *selection); static void on_openfiles_document_action(GtkMenuItem *menuitem, gpointer user_data); -static gboolean on_taglist_tree_selection_changed(GtkTreeSelection *selection); +static gboolean on_taglist_tree_selection_changed(struct sel_chg *p_sel_chgdata); static gboolean sidebar_button_press_cb(GtkWidget *widget, GdkEventButton *event, gpointer user_data); static gboolean sidebar_key_press_cb(GtkWidget *widget, GdkEventKey *event, @@ -735,13 +741,13 @@ }
-static gboolean on_taglist_tree_selection_changed(GtkTreeSelection *selection) +static gboolean on_taglist_tree_selection_changed(struct sel_chg *p_sel_chgdata) { GtkTreeIter iter; GtkTreeModel *model; gint line = 0;
- if (gtk_tree_selection_get_selected(selection, &model, &iter)) + if (gtk_tree_selection_get_selected(p_sel_chgdata->selection, &model, &iter)) { const TMTag *tag;
@@ -757,7 +763,8 @@ if (doc != NULL) { navqueue_goto_line(doc, doc, line); - change_focus_to_editor(doc); + if (p_sel_chgdata->keyval != GDK_space) + change_focus_to_editor(doc); } } } @@ -780,8 +787,11 @@ * changes the selection (g_signal_connect_after would be better but it doesn't work) */ if (widget == tv.tree_openfiles) /* tag and doc list have separate handlers */ g_idle_add((GSourceFunc) on_openfiles_tree_selection_changed, selection); - else - g_idle_add((GSourceFunc) on_taglist_tree_selection_changed, selection); + else { + sel_chgdata.selection = selection; + sel_chgdata.keyval = event->keyval; + g_idle_add((GSourceFunc) on_taglist_tree_selection_changed, &sel_chgdata); + } } return FALSE; } @@ -822,8 +832,11 @@ * changes the selection (g_signal_connect_after would be better but it doesn't work) */ if (widget == tv.tree_openfiles) g_idle_add((GSourceFunc) on_openfiles_tree_selection_changed, selection); - else - g_idle_add((GSourceFunc) on_taglist_tree_selection_changed, selection); + else { + sel_chgdata.selection = selection; + sel_chgdata.keyval = GDK_VoidSymbol; + g_idle_add((GSourceFunc) on_taglist_tree_selection_changed, &sel_chgdata); + } } else if (event->button == 3) {