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