SF.net SVN: geany: [1718] trunk

ntrel at users.sourceforge.net ntrel at xxxxx
Tue Jul 17 16:11:38 UTC 2007


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 at 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.



More information about the Commits mailing list