[geany/geany-plugins] b90ee2: file paths in stack and breaks are truncated to file names, full paths are shown in the tooltips
Alexander Petukhov
git-noreply at xxxxx
Fri Feb 10 15:28:35 UTC 2012
Branch: refs/heads/master
Author: Alexander Petukhov <devel at apetukhov.ru>
Committer: Frank Lanitz <frank at frank.uvena.de>
Date: Fri, 10 Feb 2012 15:28:35
Commit: b90ee233da25c14a689a5f046942fbd9c974d075
https://github.com/geany/geany-plugins/commit/b90ee233da25c14a689a5f046942fbd9c974d075
Log Message:
-----------
file paths in stack and breaks are truncated to file names, full paths are shown in the tooltips
Modified Paths:
--------------
debugger/ChangeLog
debugger/TODO
debugger/src/bptree.c
debugger/src/stree.c
Modified: debugger/ChangeLog
4 files changed, 4 insertions(+), 0 deletions(-)
===================================================================
@@ -1,3 +1,7 @@
+10-02-2012 Alexander Petukhov <devel at apetukhov.ru>
+
+ * file paths in stack and breaks are truncated to file names, full paths are shown in the tooltips
+
09-02-2012 Alexander Petukhov <devel at apetukhov.ru>
* switch break in the break window through clicking a break icon, all breaks for a file - by a file checkbox(moved to the left)
Modified: debugger/TODO
2 files changed, 1 insertions(+), 1 deletions(-)
===================================================================
@@ -10,7 +10,6 @@ FEATURES:
- jump to a frame (change frame that affects locals, watch etc., caused by clicking a frame in the stack trace tab/margin stack marker)
- geany menu integration
- toolbar buttons
-- ellipsize file names at the left in stack and breaks windows (buttons to switch full path or file names mode)
- margin context menu
- step back
- tree views column width/autowidth
@@ -19,3 +18,4 @@ FEATURES:
- bashdb support
- windows support
- gdb backend step speed
+- threads: integrate into existing stack window, add threads callbacks to dbm interface
Modified: debugger/src/bptree.c
63 files changed, 62 insertions(+), 1 deletions(-)
===================================================================
@@ -150,6 +150,65 @@ static void update_file_node(GtkTreeIter *file_iter)
}
/*
+ * shows a tooltip for a file name
+ */
+static gboolean on_query_tooltip(GtkWidget *widget, gint x, gint y, gboolean keyboard_mode, GtkTooltip *tooltip, gpointer user_data)
+{
+ gboolean show = FALSE;
+ int bx, by;
+ gtk_tree_view_convert_widget_to_bin_window_coords(GTK_TREE_VIEW(widget), x, y, &bx, &by);
+
+ GtkTreePath *tpath = NULL;
+ GtkTreeViewColumn *column = NULL;
+ if (gtk_tree_view_get_path_at_pos(GTK_TREE_VIEW(widget), bx, by, &tpath, &column, NULL, NULL))
+ {
+ if (1 == gtk_tree_path_get_depth(tpath) && column == gtk_tree_view_get_column(GTK_TREE_VIEW(widget), FILEPATH))
+ {
+ GtkTreeIter iter;
+ gtk_tree_model_get_iter(model, &iter, tpath);
+
+ gchar *path = NULL;
+ gtk_tree_model_get(model, &iter, FILEPATH, &path, -1);
+
+ gtk_tooltip_set_text(tooltip, path);
+
+ gtk_tree_view_set_tooltip_row(GTK_TREE_VIEW(widget), tooltip, tpath);
+
+ show = TRUE;
+ }
+ gtk_tree_path_free(tpath);
+ }
+
+ return show;
+}
+
+/*
+ * shows only the file name instead of a full path
+ */
+static void on_render_filename(GtkTreeViewColumn *tree_column, GtkCellRenderer *cell, GtkTreeModel *tree_model,
+ GtkTreeIter *iter, gpointer data)
+{
+ gchar *path = NULL;
+ gtk_tree_model_get(model, iter, FILEPATH, &path, -1);
+
+ GtkTreePath *tpath = gtk_tree_model_get_path(model, iter);
+ if (1 != gtk_tree_path_get_depth(tpath))
+ {
+ g_object_set(cell, "text", path, NULL);
+ }
+ else
+ {
+ const gchar *name = g_basename(path);
+ g_object_set(cell, "text", name ? name : path, NULL);
+ }
+
+ if (path)
+ {
+ g_free(path);
+ }
+}
+
+/*
* hides file checkbox for breaks rows
*/
void on_render_enable_for_file(GtkTreeViewColumn *tree_column, GtkCellRenderer *cell, GtkTreeModel *tree_model,
@@ -560,6 +619,7 @@ gboolean bptree_init(move_to_line_cb cb)
/* set tree view properties */
gtk_tree_view_set_headers_visible(GTK_TREE_VIEW(tree), 1);
+ gtk_widget_set_has_tooltip(GTK_WIDGET(tree), TRUE);
/* multiple selection */
GtkTreeSelection *selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(tree));
gtk_tree_selection_set_mode(selection, GTK_SELECTION_MULTIPLE);
@@ -567,6 +627,7 @@ gboolean bptree_init(move_to_line_cb cb)
/* connect signals */
g_signal_connect(G_OBJECT(tree), "key-press-event", G_CALLBACK (on_key_pressed), NULL);
g_signal_connect(G_OBJECT(tree), "row-activated", G_CALLBACK (on_row_double_click), NULL);
+ g_signal_connect(G_OBJECT(tree), "query-tooltip", G_CALLBACK (on_query_tooltip), NULL);
/* creating columns */
GtkTreeViewColumn *column;
@@ -575,7 +636,7 @@ gboolean bptree_init(move_to_line_cb cb)
GtkCellRenderer *renderer = gtk_cell_renderer_text_new ();
column = gtk_tree_view_column_new();
gtk_tree_view_column_pack_end(column, renderer, TRUE);
- gtk_tree_view_column_set_attributes(column, renderer, "text", FILEPATH, NULL);
+ gtk_tree_view_column_set_cell_data_func(column, renderer, on_render_filename, NULL, NULL);
/* enable for file */
GtkCellRenderer *file_enable_renderer = cell_renderer_toggle_new ();
Modified: debugger/src/stree.c
60 files changed, 56 insertions(+), 4 deletions(-)
===================================================================
@@ -66,6 +66,56 @@ enum
/* flag to indicate whether to handle selection change */
static gboolean handle_selection = TRUE;
+/*
+ * shows a tooltip for a file name
+ */
+static gboolean on_query_tooltip(GtkWidget *widget, gint x, gint y, gboolean keyboard_mode, GtkTooltip *tooltip, gpointer user_data)
+{
+ gboolean show = FALSE;
+ int bx, by;
+ gtk_tree_view_convert_widget_to_bin_window_coords(GTK_TREE_VIEW(widget), x, y, &bx, &by);
+
+ GtkTreePath *tpath = NULL;
+ GtkTreeViewColumn *column = NULL;
+ if (gtk_tree_view_get_path_at_pos(GTK_TREE_VIEW(widget), bx, by, &tpath, &column, NULL, NULL))
+ {
+ if (column == gtk_tree_view_get_column(GTK_TREE_VIEW(widget), S_FILEPATH))
+ {
+ GtkTreeIter iter;
+ gtk_tree_model_get_iter(model, &iter, tpath);
+
+ gchar *path = NULL;
+ gtk_tree_model_get(model, &iter, S_FILEPATH, &path, -1);
+
+ gtk_tooltip_set_text(tooltip, path);
+
+ gtk_tree_view_set_tooltip_row(GTK_TREE_VIEW(widget), tooltip, tpath);
+
+ show = TRUE;
+ }
+ gtk_tree_path_free(tpath);
+ }
+
+ return show;
+}
+
+/*
+ * shows only the file name instead of a full path
+ */
+static void on_render_filename(GtkTreeViewColumn *tree_column, GtkCellRenderer *cell, GtkTreeModel *tree_model,
+ GtkTreeIter *iter, gpointer data)
+{
+ gchar *path = NULL;
+ gtk_tree_model_get(model, iter, S_FILEPATH, &path, -1);
+ const gchar *name = g_basename(path);
+ g_object_set(cell, "text", name ? name : path, NULL);
+
+ if (path)
+ {
+ g_free(path);
+ }
+}
+
/*
* Handles same tree row click to open frame position
*/
@@ -173,10 +223,11 @@ void on_selection_changed(GtkTreeSelection *treeselection, gpointer user_data)
/* set tree view properties */
gtk_tree_view_set_headers_visible(GTK_TREE_VIEW(tree), 1);
-
+ gtk_widget_set_has_tooltip(GTK_WIDGET(tree), TRUE);
+
/* 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(gtk_tree_view_get_selection(GTK_TREE_VIEW(tree))), "changed", G_CALLBACK (on_selection_changed), NULL);
+ g_signal_connect(G_OBJECT(tree), "query-tooltip", G_CALLBACK (on_query_tooltip), NULL);
/* for clicking on already selected frame */
g_signal_connect(tree, "button-press-event",
@@ -205,9 +256,10 @@ void on_selection_changed(GtkTreeSelection *treeselection, gpointer user_data)
/* file */
renderer_file = gtk_cell_renderer_text_new ();
- column = gtk_tree_view_column_new_with_attributes (_("File"), renderer_file, "text", S_FILEPATH, NULL);
+ column = gtk_tree_view_column_new_with_attributes (_("File"), renderer_file, NULL);
gtk_tree_view_column_set_resizable (column, TRUE);
gtk_tree_view_append_column (GTK_TREE_VIEW (tree), column);
+ gtk_tree_view_column_set_cell_data_func(column, renderer_file, on_render_filename, NULL, NULL);
/* line */
renderer_line = gtk_cell_renderer_text_new ();
--------------
This E-Mail was brought to you by github_commit_mail.py (Source: TBD).
More information about the Plugins-Commits
mailing list