[geany/geany-plugins] 7d6d45: debugger: Use tree view cursor instead of selection in stack tree

Colomban Wendling git-noreply at xxxxx
Mon Feb 8 21:18:49 UTC 2016


Branch:      refs/heads/master
Author:      Colomban Wendling <ban at herbesfolles.org>
Committer:   Colomban Wendling <ban at herbesfolles.org>
Date:        Mon, 08 Feb 2016 21:18:49 UTC
Commit:      7d6d45b3c5fa49900cdcb1fa3355a2caf9e05b6e
             https://github.com/geany/geany-plugins/commit/7d6d45b3c5fa49900cdcb1fa3355a2caf9e05b6e

Log Message:
-----------
debugger: Use tree view cursor instead of selection in stack tree

This is both simpler and automatically scrolls to the row when setting
the cursor, ensuring it's initially visible.


Modified Paths:
--------------
    debugger/src/stree.c

Modified: debugger/src/stree.c
33 lines changed, 12 insertions(+), 21 deletions(-)
===================================================================
@@ -244,11 +244,10 @@ static gboolean on_msgwin_button_press(GtkWidget *widget, GdkEventButton *event,
 		{
 			if (2 == gtk_tree_path_get_depth(pressed_path))
 			{
-				GtkTreeSelection *selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(tree));
-				GList *rows = gtk_tree_selection_get_selected_rows(selection, &model);
-				GtkTreePath *selected_path = (GtkTreePath*)rows->data;
+				GtkTreePath *selected_path;
+				gtk_tree_view_get_cursor(GTK_TREE_VIEW(tree), &selected_path, NULL);
 
-				if (!gtk_tree_path_compare(pressed_path, selected_path))
+				if (selected_path && !gtk_tree_path_compare(pressed_path, selected_path))
 				{
 					frame *f;
 					GtkTreeIter iter;
@@ -268,8 +267,8 @@ static gboolean on_msgwin_button_press(GtkWidget *widget, GdkEventButton *event,
 					frame_unref(f);
 				}
 
-				g_list_foreach (rows, (GFunc) gtk_tree_path_free, NULL);
-				g_list_free (rows);
+				if (selected_path)
+					gtk_tree_path_free(selected_path);
 			}
 
 			gtk_tree_path_free(pressed_path);
@@ -280,20 +279,15 @@ static gboolean on_msgwin_button_press(GtkWidget *widget, GdkEventButton *event,
 }
 
 /*
- *  Tree view selection changed callback
+ *  Tree view cursor changed callback
  */
-static void on_selection_changed(GtkTreeSelection *treeselection, gpointer user_data)
+static void on_cursor_changed(GtkTreeView *treeview, gpointer user_data)
 {
-	GList *rows;
 	GtkTreePath *path;
 
-	if (!gtk_tree_selection_count_selected_rows(treeselection))
-	{
+	gtk_tree_view_get_cursor(treeview, &path, NULL);
+	if (! path)
 		return;
-	}
-	
-	rows = gtk_tree_selection_get_selected_rows(treeselection, &model);
-	path = (GtkTreePath*)rows->data;
 
 	if (2 == gtk_tree_path_get_depth(path))
 	{
@@ -318,8 +312,7 @@ static void on_selection_changed(GtkTreeSelection *treeselection, gpointer user_
 		frame_unref(f);
 	}
 
-	g_list_foreach (rows, (GFunc)gtk_tree_path_free, NULL);
-	g_list_free(rows);
+	gtk_tree_path_free(path);
 }
 
 static void on_render_function (GtkTreeViewColumn *tree_column, GtkCellRenderer *cell,
@@ -388,7 +381,7 @@ GtkWidget* stree_init(move_to_line_cb ml, select_frame_cb sf)
 	gtk_tree_view_set_show_expanders(GTK_TREE_VIEW(tree), FALSE);
 	
 	/* connect signals */
-	g_signal_connect(G_OBJECT(gtk_tree_view_get_selection(GTK_TREE_VIEW(tree))), "changed", G_CALLBACK (on_selection_changed), NULL);
+	g_signal_connect(G_OBJECT(tree), "cursor-changed", G_CALLBACK (on_cursor_changed), NULL);
 
 	/* for clicking on already selected frame */
 	g_signal_connect(G_OBJECT(tree), "button-press-event", G_CALLBACK(on_msgwin_button_press), NULL);
@@ -495,9 +488,7 @@ void stree_select_first_frame(gboolean make_active)
 
 		path = gtk_tree_model_get_path(model, &frame_iter);
 
-		gtk_tree_selection_select_path (
-			gtk_tree_view_get_selection(GTK_TREE_VIEW(tree)),
-			path);
+		gtk_tree_view_set_cursor(GTK_TREE_VIEW(tree), path, NULL, FALSE);
 
 		gtk_tree_path_free(path);
 	}



--------------
This E-Mail was brought to you by github_commit_mail.py (Source: https://github.com/geany/infrastructure).


More information about the Plugins-Commits mailing list