Revision: 1718 http://geany.svn.sourceforge.net/geany/?rev=1718&view=rev Author: ntrel Date: 2007-07-17 09:11:38 -0700 (Tue, 17 Jul 2007)
Log Message: ----------- Add a navigation queue position when clicking on symbol list items. Prevent duplicates in the navigation queue. Add navqueue_append() which adds the current document position to the queue before adding the new position.
Modified Paths: -------------- trunk/ChangeLog trunk/src/navqueue.c trunk/src/navqueue.h trunk/src/treeviews.c trunk/src/utils.c
Modified: trunk/ChangeLog =================================================================== --- trunk/ChangeLog 2007-07-17 15:48:53 UTC (rev 1717) +++ trunk/ChangeLog 2007-07-17 16:11:38 UTC (rev 1718) @@ -4,6 +4,11 @@ src/document.h: Move font & file open/save dialog callbacks to dialogs.c. Add document_clone() in document.c (for Save As open in new tab). + * src/utils.c, src/navqueue.c, src/navqueue.h, src/treeviews.c: + Add a navigation queue position when clicking on symbol list items. + Prevent duplicates in the navigation queue. + Add navqueue_append() which adds the current document position to the + queue before adding the new position.
2007-07-17 Enrico Tröger enrico.troeger@uvena.de
Modified: trunk/src/navqueue.c =================================================================== --- trunk/src/navqueue.c 2007-07-17 15:48:53 UTC (rev 1717) +++ trunk/src/navqueue.c 2007-07-17 16:11:38 UTC (rev 1718) @@ -35,10 +35,10 @@ // for the navigation history queue typedef struct { - gchar *file; + gchar *file; // this is the tagmanager filename, not document::file_name /// TODO maybe it is better to work on positions than on lines to be more accurate when /// switching back or forward, sci_get_position_from_line() could be used for tm_tag lines - gint line; + gint line; // line is counted with 1 as the first line, not 0 } filepos;
GQueue *navigation_queue; @@ -86,13 +86,29 @@ }
-void navqueue_new_position(gchar *file, gint line) +static gboolean +queue_pos_matches(guint queue_pos, const gchar *fname, gint line) { + if (queue_pos < g_queue_get_length(navigation_queue)) + { + filepos *fpos = g_queue_peek_nth(navigation_queue, queue_pos); + + return (utils_str_equal(fpos->file, fname) && fpos->line == line); + } + return FALSE; +} + + +void navqueue_new_position(gchar *tm_filename, gint line) +{ filepos *npos; guint i;
+ if (queue_pos_matches(nav_queue_pos, tm_filename, line)) + return; // prevent duplicates + npos = g_new0(filepos, 1); - npos->file = file; + npos->file = tm_filename; npos->line = line;
// if we've jumped to a new position from @@ -111,6 +127,30 @@ }
+/* line is counted with 1 as the first line, not 0. */ +gboolean navqueue_append(gint new_idx, gint line) +{ + gint old_idx = document_get_cur_idx(); + + g_return_val_if_fail(DOC_IDX_VALID(old_idx), FALSE); + g_return_val_if_fail(DOC_IDX_VALID(new_idx), FALSE); + g_return_val_if_fail(line >= 1, FALSE); + + // first add old file as old position + if (doc_list[old_idx].tm_file) + { + gint cur_line = sci_get_current_line(doc_list[old_idx].sci, -1); + + navqueue_new_position(doc_list[old_idx].tm_file->file_name, cur_line + 1); + } + + g_return_val_if_fail(doc_list[new_idx].tm_file, FALSE); + + navqueue_new_position(doc_list[new_idx].tm_file->file_name, line); + return TRUE; +} + + void navqueue_go_back() { filepos *fprev;
Modified: trunk/src/navqueue.h =================================================================== --- trunk/src/navqueue.h 2007-07-17 15:48:53 UTC (rev 1717) +++ trunk/src/navqueue.h 2007-07-17 16:11:38 UTC (rev 1718) @@ -29,8 +29,12 @@
void navqueue_free();
-void navqueue_new_position(gchar *file, gint line);
+void navqueue_new_position(gchar *tm_filename, gint line); + +gboolean navqueue_append(gint new_idx, gint line); + + void navqueue_go_back();
void navqueue_go_forward();
Modified: trunk/src/treeviews.c =================================================================== --- trunk/src/treeviews.c 2007-07-17 15:48:53 UTC (rev 1717) +++ trunk/src/treeviews.c 2007-07-17 16:11:38 UTC (rev 1718) @@ -35,6 +35,7 @@ #include "utils.h" #include "ui_utils.h" #include "symbols.h" +#include "navqueue.h"
enum @@ -479,7 +480,10 @@ if (string && (strlen(string) > 0)) { gint idx = document_get_cur_idx(); - utils_goto_line(idx, utils_get_local_tag(idx, string)); + gint line = utils_get_local_tag(idx, string); + + navqueue_append(idx, line); + utils_goto_line(idx, line); g_free(string); } }
Modified: trunk/src/utils.c =================================================================== --- trunk/src/utils.c 2007-07-17 15:48:53 UTC (rev 1717) +++ trunk/src/utils.c 2007-07-17 16:11:38 UTC (rev 1718) @@ -203,6 +203,7 @@ }
+// line is counted with 1 as the first line, not 0 gboolean utils_goto_file_line(const gchar *file, gboolean is_tm_filename, gint line) { gint file_idx = document_find_by_filename(file, is_tm_filename); @@ -213,6 +214,7 @@ }
+// line is counted with 1 as the first line, not 0 gboolean utils_goto_line(gint idx, gint line) { gint page_num;
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.