SF.net SVN: geany: [1590] trunk

eht16 at users.sourceforge.net eht16 at xxxxx
Sat Jun 2 16:14:08 UTC 2007


Revision: 1590
          http://svn.sourceforge.net/geany/?rev=1590&view=rev
Author:   eht16
Date:     2007-06-02 09:14:07 -0700 (Sat, 02 Jun 2007)

Log Message:
-----------
Applied patch from Dave Moore to add simple code navigation (thank you).

Modified Paths:
--------------
    trunk/geany.glade
    trunk/src/Makefile.am
    trunk/src/callbacks.c
    trunk/src/callbacks.h
    trunk/src/geany.h
    trunk/src/interface.c
    trunk/src/keyfile.c
    trunk/src/main.c
    trunk/src/prefs.c
    trunk/src/ui_utils.c

Added Paths:
-----------
    trunk/src/navqueue.c
    trunk/src/navqueue.h

Modified: trunk/geany.glade
===================================================================
--- trunk/geany.glade	2007-06-01 04:12:12 UTC (rev 1589)
+++ trunk/geany.glade	2007-06-02 16:14:07 UTC (rev 1590)
@@ -1448,7 +1448,7 @@
 	<widget class="GtkToolbar" id="toolbar1">
 	  <property name="visible">True</property>
 	  <property name="orientation">GTK_ORIENTATION_HORIZONTAL</property>
-	  <property name="toolbar_style">GTK_TOOLBAR_BOTH</property>
+	  <property name="toolbar_style">GTK_TOOLBAR_ICONS</property>
 	  <property name="tooltips">True</property>
 	  <property name="show_arrow">True</property>
 
@@ -1621,6 +1621,53 @@
 	  </child>
 
 	  <child>
+	    <widget class="GtkToolButton" id="toolbutton_back">
+	      <property name="visible">True</property>
+	      <property name="sensitive">False</property>
+	      <property name="tooltip" translatable="yes">Navigate back a location</property>
+	      <property name="stock_id">gtk-go-back</property>
+	      <property name="visible_horizontal">True</property>
+	      <property name="visible_vertical">True</property>
+	      <property name="is_important">False</property>
+	      <signal name="clicked" handler="on_back_activate" last_modification_time="Fri, 25 May 2007 03:53:11 GMT"/>
+	    </widget>
+	    <packing>
+	      <property name="expand">False</property>
+	      <property name="homogeneous">True</property>
+	    </packing>
+	  </child>
+
+	  <child>
+	    <widget class="GtkToolButton" id="toolbutton_forward">
+	      <property name="visible">True</property>
+	      <property name="sensitive">False</property>
+	      <property name="tooltip" translatable="yes">Navigate forward a location</property>
+	      <property name="stock_id">gtk-go-forward</property>
+	      <property name="visible_horizontal">True</property>
+	      <property name="visible_vertical">True</property>
+	      <property name="is_important">False</property>
+	      <signal name="clicked" handler="on_forward_activate" last_modification_time="Fri, 25 May 2007 03:53:16 GMT"/>
+	    </widget>
+	    <packing>
+	      <property name="expand">False</property>
+	      <property name="homogeneous">True</property>
+	    </packing>
+	  </child>
+
+	  <child>
+	    <widget class="GtkSeparatorToolItem" id="separatortoolitem10">
+	      <property name="visible">True</property>
+	      <property name="draw">True</property>
+	      <property name="visible_horizontal">True</property>
+	      <property name="visible_vertical">True</property>
+	    </widget>
+	    <packing>
+	      <property name="expand">False</property>
+	      <property name="homogeneous">False</property>
+	    </packing>
+	  </child>
+
+	  <child>
 	    <widget class="GtkToolButton" id="toolbutton13">
 	      <property name="visible">True</property>
 	      <property name="tooltip" translatable="yes">Compile the current file</property>
@@ -1862,6 +1909,19 @@
 	  </child>
 
 	  <child>
+	    <widget class="GtkSeparatorToolItem" id="separatortoolitem1">
+	      <property name="visible">True</property>
+	      <property name="draw">False</property>
+	      <property name="visible_horizontal">True</property>
+	      <property name="visible_vertical">True</property>
+	    </widget>
+	    <packing>
+	      <property name="expand">False</property>
+	      <property name="homogeneous">False</property>
+	    </packing>
+	  </child>
+
+	  <child>
 	    <widget class="GtkToolButton" id="toolbutton19">
 	      <property name="visible">True</property>
 	      <property name="tooltip" translatable="yes">Quit Geany</property>
@@ -4368,10 +4428,10 @@
 			  </child>
 
 			  <child>
-			    <widget class="GtkCheckButton" id="check_toolbar_compile">
+			    <widget class="GtkCheckButton" id="check_toolbar_undo">
 			      <property name="visible">True</property>
-			      <property name="tooltip" translatable="yes">Display the Compile and Run buttons in the toolbar</property>
-			      <property name="label" translatable="yes">Show Compile and Run</property>
+			      <property name="tooltip" translatable="yes">Display the Redo and Undo buttons in the toolbar</property>
+			      <property name="label" translatable="yes">Show Redo and Undo buttons</property>
 			      <property name="use_underline">True</property>
 			      <property name="relief">GTK_RELIEF_NORMAL</property>
 			      <property name="focus_on_click">False</property>
@@ -4387,10 +4447,10 @@
 			  </child>
 
 			  <child>
-			    <widget class="GtkCheckButton" id="check_toolbar_colour">
+			    <widget class="GtkCheckButton" id="check_toolbar_navigation">
 			      <property name="visible">True</property>
-			      <property name="tooltip" translatable="yes">Display the Colour Chooser button in the toolbar</property>
-			      <property name="label" translatable="yes">Show Colour Chooser button</property>
+			      <property name="tooltip" translatable="yes">Display the Back and Forward buttons in the toolbar used for code navigation</property>
+			      <property name="label" translatable="yes">Show Back and Forward buttons</property>
 			      <property name="use_underline">True</property>
 			      <property name="relief">GTK_RELIEF_NORMAL</property>
 			      <property name="focus_on_click">False</property>
@@ -4406,10 +4466,10 @@
 			  </child>
 
 			  <child>
-			    <widget class="GtkCheckButton" id="check_toolbar_zoom">
+			    <widget class="GtkCheckButton" id="check_toolbar_compile">
 			      <property name="visible">True</property>
-			      <property name="tooltip" translatable="yes">Display the Zoom In and Zoom Out buttons in the toolbar</property>
-			      <property name="label" translatable="yes">Show Zoom In and Zoom Out</property>
+			      <property name="tooltip" translatable="yes">Display the Compile and Run buttons in the toolbar</property>
+			      <property name="label" translatable="yes">Show Compile and Run buttons</property>
 			      <property name="use_underline">True</property>
 			      <property name="relief">GTK_RELIEF_NORMAL</property>
 			      <property name="focus_on_click">False</property>
@@ -4425,10 +4485,10 @@
 			  </child>
 
 			  <child>
-			    <widget class="GtkCheckButton" id="check_toolbar_undo">
+			    <widget class="GtkCheckButton" id="check_toolbar_colour">
 			      <property name="visible">True</property>
-			      <property name="tooltip" translatable="yes">Display the Redo and Undo buttons in the toolbar</property>
-			      <property name="label" translatable="yes">Show Redo and Undo buttons</property>
+			      <property name="tooltip" translatable="yes">Display the Colour Chooser button in the toolbar</property>
+			      <property name="label" translatable="yes">Show Colour Chooser button</property>
 			      <property name="use_underline">True</property>
 			      <property name="relief">GTK_RELIEF_NORMAL</property>
 			      <property name="focus_on_click">False</property>
@@ -4444,6 +4504,25 @@
 			  </child>
 
 			  <child>
+			    <widget class="GtkCheckButton" id="check_toolbar_zoom">
+			      <property name="visible">True</property>
+			      <property name="tooltip" translatable="yes">Display the Zoom In and Zoom Out buttons in the toolbar</property>
+			      <property name="label" translatable="yes">Show Zoom In and Zoom Out buttons</property>
+			      <property name="use_underline">True</property>
+			      <property name="relief">GTK_RELIEF_NORMAL</property>
+			      <property name="focus_on_click">False</property>
+			      <property name="active">False</property>
+			      <property name="inconsistent">False</property>
+			      <property name="draw_indicator">True</property>
+			    </widget>
+			    <packing>
+			      <property name="padding">0</property>
+			      <property name="expand">False</property>
+			      <property name="fill">False</property>
+			    </packing>
+			  </child>
+
+			  <child>
 			    <widget class="GtkCheckButton" id="check_toolbar_search">
 			      <property name="visible">True</property>
 			      <property name="tooltip" translatable="yes">Display the search field and button in the toolbar</property>

Modified: trunk/src/Makefile.am
===================================================================
--- trunk/src/Makefile.am	2007-06-01 04:12:12 UTC (rev 1589)
+++ trunk/src/Makefile.am	2007-06-02 16:14:07 UTC (rev 1590)
@@ -20,6 +20,7 @@
 	keyfile.c keyfile.h \
 	main.c main.h geany.h \
 	msgwindow.c msgwindow.h \
+	navqueue.c navqueue.h \
 	notebook.c notebook.h \
 	prefs.c prefs.h \
 	project.c project.h \

Modified: trunk/src/callbacks.c
===================================================================
--- trunk/src/callbacks.c	2007-06-01 04:12:12 UTC (rev 1589)
+++ trunk/src/callbacks.c	2007-06-02 16:14:07 UTC (rev 1590)
@@ -58,6 +58,7 @@
 #include "symbols.h"
 #include "tools.h"
 #include "project.h"
+#include "navqueue.h"
 
 #ifdef HAVE_VTE
 # include "vte.h"
@@ -77,7 +78,6 @@
 
 // flag to indicate that an insert callback was triggered from the file menu,
 // so we need to store the current cursor position in editor_info.click_pos.
-/// TODO rename me
 static gboolean insert_callback_from_menu = FALSE;
 
 // represents the state at switching a notebook page(in the left treeviews widget), to not emit
@@ -1216,10 +1216,20 @@
 	tmtag = symbols_find_in_workspace(editor_info.current_word, type);
 	if (tmtag != NULL)
 	{
+		gint old_idx = document_get_cur_idx(); // get idx before switching the file
+
 		if (utils_goto_file_line(
 			tmtag->atts.entry.file->work_object.file_name,
 			TRUE, tmtag->atts.entry.line))
+		{
+			// first add old file as old position
+			navqueue_new_position(doc_list[old_idx].tm_file->file_name,
+				sci_get_line_from_position(doc_list[old_idx].sci, editor_info.click_pos) + 1);
+
+			navqueue_new_position(tmtag->atts.entry.file->work_object.file_name,
+				tmtag->atts.entry.line);
 			return;
+		}
 	}
 	// if we are here, there was no match and we are beeping ;-)
 	utils_beep();
@@ -2226,3 +2236,18 @@
 }
 
 
+void
+on_forward_activate                    (GtkMenuItem     *menuitem,
+                                        gpointer         user_data)
+{
+	navqueue_go_forward();
+}
+
+
+void
+on_back_activate                       (GtkMenuItem     *menuitem,
+                                        gpointer         user_data)
+{
+	navqueue_go_back();
+}
+

Modified: trunk/src/callbacks.h
===================================================================
--- trunk/src/callbacks.h	2007-06-01 04:12:12 UTC (rev 1589)
+++ trunk/src/callbacks.h	2007-06-02 16:14:07 UTC (rev 1590)
@@ -608,7 +608,14 @@
 on_menu_toggle_all_additional_widgets1_activate
                                         (GtkMenuItem     *menuitem,
                                         gpointer         user_data);
+void
+on_back_activate                       (GtkMenuItem     *menuitem,
+                                        gpointer         user_data);
 
 void
+on_forward_activate                    (GtkMenuItem     *menuitem,
+                                        gpointer         user_data);
+
+void
 on_file1_activate                      (GtkMenuItem     *menuitem,
                                         gpointer         user_data);

Modified: trunk/src/geany.h
===================================================================
--- trunk/src/geany.h	2007-06-01 04:12:12 UTC (rev 1589)
+++ trunk/src/geany.h	2007-06-02 16:14:07 UTC (rev 1590)
@@ -110,6 +110,7 @@
 	gboolean			 pref_toolbar_show_search;
 	gboolean			 pref_toolbar_show_goto;
 	gboolean			 pref_toolbar_show_undo;
+	gboolean			 pref_toolbar_show_navigation;
 	gboolean			 pref_toolbar_show_compile;
 	gboolean			 pref_toolbar_show_zoom;
 	gboolean			 pref_toolbar_show_colour;
@@ -167,6 +168,7 @@
 	GtkWidget			*undo_items[3];
 	GtkWidget			*save_buttons[4];
 	GtkWidget			*sensitive_buttons[39];
+	GtkWidget			*navigation_buttons[2];
 	GtkWidget			*open_colorsel;
 	GtkWidget			*open_fontsel;
 	GtkWidget			*open_filesel;

Modified: trunk/src/interface.c
===================================================================
--- trunk/src/interface.c	2007-06-01 04:12:12 UTC (rev 1589)
+++ trunk/src/interface.c	2007-06-02 16:14:07 UTC (rev 1590)
@@ -213,6 +213,9 @@
   GtkWidget *toolbutton_undo;
   GtkWidget *toolbutton_redo;
   GtkWidget *separatortoolitem9;
+  GtkWidget *toolbutton_back;
+  GtkWidget *toolbutton_forward;
+  GtkWidget *separatortoolitem10;
   GtkWidget *tmp_image;
   GtkWidget *toolbutton13;
   GtkWidget *toolbutton26;
@@ -230,6 +233,7 @@
   GtkWidget *entry_goto_line;
   GtkWidget *toolbutton25;
   GtkWidget *separatortoolitem8;
+  GtkWidget *separatortoolitem1;
   GtkWidget *toolbutton19;
   GtkWidget *vpaned1;
   GtkWidget *hpaned1;
@@ -983,7 +987,7 @@
   toolbar1 = gtk_toolbar_new ();
   gtk_widget_show (toolbar1);
   gtk_box_pack_start (GTK_BOX (vbox1), toolbar1, FALSE, FALSE, 0);
-  gtk_toolbar_set_style (GTK_TOOLBAR (toolbar1), GTK_TOOLBAR_BOTH);
+  gtk_toolbar_set_style (GTK_TOOLBAR (toolbar1), GTK_TOOLBAR_ICONS);
   tmp_toolbar_icon_size = gtk_toolbar_get_icon_size (GTK_TOOLBAR (toolbar1));
 
   menutoolbutton1 = (GtkWidget*) gtk_menu_tool_button_new_from_stock ("gtk-new");
@@ -1040,6 +1044,22 @@
   gtk_widget_show (separatortoolitem9);
   gtk_container_add (GTK_CONTAINER (toolbar1), separatortoolitem9);
 
+  toolbutton_back = (GtkWidget*) gtk_tool_button_new_from_stock ("gtk-go-back");
+  gtk_widget_show (toolbutton_back);
+  gtk_container_add (GTK_CONTAINER (toolbar1), toolbutton_back);
+  gtk_widget_set_sensitive (toolbutton_back, FALSE);
+  gtk_tool_item_set_tooltip (GTK_TOOL_ITEM (toolbutton_back), tooltips, _("Navigate back a location"), NULL);
+
+  toolbutton_forward = (GtkWidget*) gtk_tool_button_new_from_stock ("gtk-go-forward");
+  gtk_widget_show (toolbutton_forward);
+  gtk_container_add (GTK_CONTAINER (toolbar1), toolbutton_forward);
+  gtk_widget_set_sensitive (toolbutton_forward, FALSE);
+  gtk_tool_item_set_tooltip (GTK_TOOL_ITEM (toolbutton_forward), tooltips, _("Navigate forward a location"), NULL);
+
+  separatortoolitem10 = (GtkWidget*) gtk_separator_tool_item_new ();
+  gtk_widget_show (separatortoolitem10);
+  gtk_container_add (GTK_CONTAINER (toolbar1), separatortoolitem10);
+
   tmp_image = gtk_image_new_from_stock ("gtk-convert", tmp_toolbar_icon_size);
   gtk_widget_show (tmp_image);
   toolbutton13 = (GtkWidget*) gtk_tool_button_new (tmp_image, _("Compile"));
@@ -1120,6 +1140,11 @@
   gtk_container_add (GTK_CONTAINER (toolbar1), separatortoolitem8);
   gtk_separator_tool_item_set_draw (GTK_SEPARATOR_TOOL_ITEM (separatortoolitem8), FALSE);
 
+  separatortoolitem1 = (GtkWidget*) gtk_separator_tool_item_new ();
+  gtk_widget_show (separatortoolitem1);
+  gtk_container_add (GTK_CONTAINER (toolbar1), separatortoolitem1);
+  gtk_separator_tool_item_set_draw (GTK_SEPARATOR_TOOL_ITEM (separatortoolitem1), FALSE);
+
   toolbutton19 = (GtkWidget*) gtk_tool_button_new_from_stock ("gtk-quit");
   gtk_widget_show (toolbutton19);
   gtk_container_add (GTK_CONTAINER (toolbar1), toolbutton19);
@@ -1519,6 +1544,12 @@
   g_signal_connect ((gpointer) toolbutton_redo, "clicked",
                     G_CALLBACK (on_redo1_activate),
                     NULL);
+  g_signal_connect ((gpointer) toolbutton_back, "clicked",
+                    G_CALLBACK (on_back_activate),
+                    NULL);
+  g_signal_connect ((gpointer) toolbutton_forward, "clicked",
+                    G_CALLBACK (on_forward_activate),
+                    NULL);
   g_signal_connect ((gpointer) toolbutton13, "clicked",
                     G_CALLBACK (on_compile_button_clicked),
                     NULL);
@@ -1748,6 +1779,9 @@
   GLADE_HOOKUP_OBJECT (window1, toolbutton_undo, "toolbutton_undo");
   GLADE_HOOKUP_OBJECT (window1, toolbutton_redo, "toolbutton_redo");
   GLADE_HOOKUP_OBJECT (window1, separatortoolitem9, "separatortoolitem9");
+  GLADE_HOOKUP_OBJECT (window1, toolbutton_back, "toolbutton_back");
+  GLADE_HOOKUP_OBJECT (window1, toolbutton_forward, "toolbutton_forward");
+  GLADE_HOOKUP_OBJECT (window1, separatortoolitem10, "separatortoolitem10");
   GLADE_HOOKUP_OBJECT (window1, toolbutton13, "toolbutton13");
   GLADE_HOOKUP_OBJECT (window1, toolbutton26, "toolbutton26");
   GLADE_HOOKUP_OBJECT (window1, separatortoolitem6, "separatortoolitem6");
@@ -1764,6 +1798,7 @@
   GLADE_HOOKUP_OBJECT (window1, entry_goto_line, "entry_goto_line");
   GLADE_HOOKUP_OBJECT (window1, toolbutton25, "toolbutton25");
   GLADE_HOOKUP_OBJECT (window1, separatortoolitem8, "separatortoolitem8");
+  GLADE_HOOKUP_OBJECT (window1, separatortoolitem1, "separatortoolitem1");
   GLADE_HOOKUP_OBJECT (window1, toolbutton19, "toolbutton19");
   GLADE_HOOKUP_OBJECT (window1, vpaned1, "vpaned1");
   GLADE_HOOKUP_OBJECT (window1, hpaned1, "hpaned1");
@@ -2436,10 +2471,11 @@
   GtkWidget *alignment14;
   GtkWidget *vbox16;
   GtkWidget *check_toolbar_fileops;
+  GtkWidget *check_toolbar_undo;
+  GtkWidget *check_toolbar_navigation;
   GtkWidget *check_toolbar_compile;
   GtkWidget *check_toolbar_colour;
   GtkWidget *check_toolbar_zoom;
-  GtkWidget *check_toolbar_undo;
   GtkWidget *check_toolbar_search;
   GtkWidget *check_toolbar_goto;
   GtkWidget *check_toolbar_quit;
@@ -3065,7 +3101,21 @@
   gtk_tooltips_set_tip (tooltips, check_toolbar_fileops, _("Display the New, Open, Close, Save and Reload buttons in the toolbar"), NULL);
   gtk_button_set_focus_on_click (GTK_BUTTON (check_toolbar_fileops), FALSE);
 
-  check_toolbar_compile = gtk_check_button_new_with_mnemonic (_("Show Compile and Run"));
+  check_toolbar_undo = gtk_check_button_new_with_mnemonic (_("Show Redo and Undo buttons"));
+  gtk_widget_show (check_toolbar_undo);
+  gtk_box_pack_start (GTK_BOX (vbox16), check_toolbar_undo, FALSE, FALSE, 0);
+  GTK_WIDGET_UNSET_FLAGS (check_toolbar_undo, GTK_CAN_FOCUS);
+  gtk_tooltips_set_tip (tooltips, check_toolbar_undo, _("Display the Redo and Undo buttons in the toolbar"), NULL);
+  gtk_button_set_focus_on_click (GTK_BUTTON (check_toolbar_undo), FALSE);
+
+  check_toolbar_navigation = gtk_check_button_new_with_mnemonic (_("Show Back and Forward buttons"));
+  gtk_widget_show (check_toolbar_navigation);
+  gtk_box_pack_start (GTK_BOX (vbox16), check_toolbar_navigation, FALSE, FALSE, 0);
+  GTK_WIDGET_UNSET_FLAGS (check_toolbar_navigation, GTK_CAN_FOCUS);
+  gtk_tooltips_set_tip (tooltips, check_toolbar_navigation, _("Display the Back and Forward buttons in the toolbar used for code navigation"), NULL);
+  gtk_button_set_focus_on_click (GTK_BUTTON (check_toolbar_navigation), FALSE);
+
+  check_toolbar_compile = gtk_check_button_new_with_mnemonic (_("Show Compile and Run buttons"));
   gtk_widget_show (check_toolbar_compile);
   gtk_box_pack_start (GTK_BOX (vbox16), check_toolbar_compile, FALSE, FALSE, 0);
   GTK_WIDGET_UNSET_FLAGS (check_toolbar_compile, GTK_CAN_FOCUS);
@@ -3079,20 +3129,13 @@
   gtk_tooltips_set_tip (tooltips, check_toolbar_colour, _("Display the Colour Chooser button in the toolbar"), NULL);
   gtk_button_set_focus_on_click (GTK_BUTTON (check_toolbar_colour), FALSE);
 
-  check_toolbar_zoom = gtk_check_button_new_with_mnemonic (_("Show Zoom In and Zoom Out"));
+  check_toolbar_zoom = gtk_check_button_new_with_mnemonic (_("Show Zoom In and Zoom Out buttons"));
   gtk_widget_show (check_toolbar_zoom);
   gtk_box_pack_start (GTK_BOX (vbox16), check_toolbar_zoom, FALSE, FALSE, 0);
   GTK_WIDGET_UNSET_FLAGS (check_toolbar_zoom, GTK_CAN_FOCUS);
   gtk_tooltips_set_tip (tooltips, check_toolbar_zoom, _("Display the Zoom In and Zoom Out buttons in the toolbar"), NULL);
   gtk_button_set_focus_on_click (GTK_BUTTON (check_toolbar_zoom), FALSE);
 
-  check_toolbar_undo = gtk_check_button_new_with_mnemonic (_("Show Redo and Undo buttons"));
-  gtk_widget_show (check_toolbar_undo);
-  gtk_box_pack_start (GTK_BOX (vbox16), check_toolbar_undo, FALSE, FALSE, 0);
-  GTK_WIDGET_UNSET_FLAGS (check_toolbar_undo, GTK_CAN_FOCUS);
-  gtk_tooltips_set_tip (tooltips, check_toolbar_undo, _("Display the Redo and Undo buttons in the toolbar"), NULL);
-  gtk_button_set_focus_on_click (GTK_BUTTON (check_toolbar_undo), FALSE);
-
   check_toolbar_search = gtk_check_button_new_with_mnemonic (_("Show Search field"));
   gtk_widget_show (check_toolbar_search);
   gtk_box_pack_start (GTK_BOX (vbox16), check_toolbar_search, FALSE, FALSE, 0);
@@ -4057,10 +4100,11 @@
   GLADE_HOOKUP_OBJECT (prefs_dialog, alignment14, "alignment14");
   GLADE_HOOKUP_OBJECT (prefs_dialog, vbox16, "vbox16");
   GLADE_HOOKUP_OBJECT (prefs_dialog, check_toolbar_fileops, "check_toolbar_fileops");
+  GLADE_HOOKUP_OBJECT (prefs_dialog, check_toolbar_undo, "check_toolbar_undo");
+  GLADE_HOOKUP_OBJECT (prefs_dialog, check_toolbar_navigation, "check_toolbar_navigation");
   GLADE_HOOKUP_OBJECT (prefs_dialog, check_toolbar_compile, "check_toolbar_compile");
   GLADE_HOOKUP_OBJECT (prefs_dialog, check_toolbar_colour, "check_toolbar_colour");
   GLADE_HOOKUP_OBJECT (prefs_dialog, check_toolbar_zoom, "check_toolbar_zoom");
-  GLADE_HOOKUP_OBJECT (prefs_dialog, check_toolbar_undo, "check_toolbar_undo");
   GLADE_HOOKUP_OBJECT (prefs_dialog, check_toolbar_search, "check_toolbar_search");
   GLADE_HOOKUP_OBJECT (prefs_dialog, check_toolbar_goto, "check_toolbar_goto");
   GLADE_HOOKUP_OBJECT (prefs_dialog, check_toolbar_quit, "check_toolbar_quit");

Modified: trunk/src/keyfile.c
===================================================================
--- trunk/src/keyfile.c	2007-06-01 04:12:12 UTC (rev 1589)
+++ trunk/src/keyfile.c	2007-06-02 16:14:07 UTC (rev 1590)
@@ -145,7 +145,7 @@
 	GtkTextBuffer *buffer;
 	GtkTextIter start, end;
 
-	g_key_file_load_from_file(config, configfile, 0, NULL);
+	g_key_file_load_from_file(config, configfile, G_KEY_FILE_NONE, NULL);
 
 	// gets the text from the scribble textview
 	buffer = gtk_text_view_get_buffer(GTK_TEXT_VIEW(lookup_widget(app->window, "textview_scribble")));
@@ -251,6 +251,7 @@
 	g_key_file_set_boolean(config, PACKAGE, "pref_toolbar_show_goto", app->pref_toolbar_show_goto);
 	g_key_file_set_boolean(config, PACKAGE, "pref_toolbar_show_zoom", app->pref_toolbar_show_zoom);
 	g_key_file_set_boolean(config, PACKAGE, "pref_toolbar_show_undo", app->pref_toolbar_show_undo);
+	g_key_file_set_boolean(config, PACKAGE, "pref_toolbar_show_navigation", app->pref_toolbar_show_navigation);
 	g_key_file_set_boolean(config, PACKAGE, "pref_toolbar_show_compile", app->pref_toolbar_show_compile);
 	g_key_file_set_boolean(config, PACKAGE, "pref_toolbar_show_colour", app->pref_toolbar_show_colour);
 	g_key_file_set_boolean(config, PACKAGE, "pref_toolbar_show_fileops", app->pref_toolbar_show_fileops);
@@ -358,7 +359,7 @@
 		setptr(configfile, g_strconcat(app->datadir, G_DIR_SEPARATOR_S "geany.conf", NULL));
 	}
 
-	g_key_file_load_from_file(config, configfile, 0, NULL);
+	g_key_file_load_from_file(config, configfile, G_KEY_FILE_NONE, NULL);
 
 	app->toolbar_visible = utils_get_setting_boolean(config, PACKAGE, "pref_toolbar_show", TRUE);
 	{
@@ -458,6 +459,7 @@
 	app->pref_toolbar_show_zoom = utils_get_setting_boolean(config, PACKAGE, "pref_toolbar_show_zoom", FALSE);
 	app->pref_toolbar_show_compile = utils_get_setting_boolean(config, PACKAGE, "pref_toolbar_show_compile", TRUE);
 	app->pref_toolbar_show_undo = utils_get_setting_boolean(config, PACKAGE, "pref_toolbar_show_undo", FALSE);
+	app->pref_toolbar_show_navigation = utils_get_setting_boolean(config, PACKAGE, "pref_toolbar_show_navigation", TRUE);
 	app->pref_toolbar_show_colour = utils_get_setting_boolean(config, PACKAGE, "pref_toolbar_show_colour", TRUE);
 	app->pref_toolbar_show_fileops = utils_get_setting_boolean(config, PACKAGE, "pref_toolbar_show_fileops", TRUE);
 	app->pref_toolbar_show_quit = utils_get_setting_boolean(config, PACKAGE, "pref_toolbar_show_quit", TRUE);

Modified: trunk/src/main.c
===================================================================
--- trunk/src/main.c	2007-06-01 04:12:12 UTC (rev 1589)
+++ trunk/src/main.c	2007-06-02 16:14:07 UTC (rev 1590)
@@ -59,6 +59,7 @@
 #include "symbols.h"
 #include "project.h"
 #include "tools.h"
+#include "navqueue.h"
 
 #ifdef HAVE_SOCKET
 # include "socket.h"
@@ -332,6 +333,8 @@
 	app->sensitive_buttons[36] = lookup_widget(app->window, "menu_format1");
 	app->sensitive_buttons[37] = lookup_widget(app->window, "menu_open_selected_file1");
 	app->sensitive_buttons[38] = lookup_widget(app->window, "menu_insert_special_chars1");
+	app->navigation_buttons[0] = lookup_widget(app->window, "toolbutton_back");
+	app->navigation_buttons[1] = lookup_widget(app->window, "toolbutton_forward");
 	app->redo_items[0] = lookup_widget(app->popup_menu, "redo1");
 	app->redo_items[1] = lookup_widget(app->window, "menu_redo2");
 	app->redo_items[2] = lookup_widget(app->window, "toolbutton_redo");
@@ -721,6 +724,7 @@
 	gtk_tree_model_foreach(GTK_TREE_MODEL(tv.store_openfiles), treeviews_find_node, GINT_TO_POINTER(idx));
 	build_menu_update(idx);
 	treeviews_update_tag_list(idx, FALSE);
+	navqueue_init();
 
 #ifdef G_OS_WIN32
 	// hide "Build" menu item, at least until it is available for Windows
@@ -763,6 +767,7 @@
 	socket_finalize();
 #endif
 
+	navqueue_free();
 	keybindings_free();
 	filetypes_save_commands();
 	filetypes_free_types();

Added: trunk/src/navqueue.c
===================================================================
--- trunk/src/navqueue.c	                        (rev 0)
+++ trunk/src/navqueue.c	2007-06-02 16:14:07 UTC (rev 1590)
@@ -0,0 +1,154 @@
+/*
+ *      navqueue.c - this file is part of Geany, a fast and lightweight IDE
+ *
+ *      Copyright 2007 Dave Moore <wrex006 at gmail.com>
+ *
+ *      This program is free software; you can redistribute it and/or modify
+ *      it under the terms of the GNU General Public License as published by
+ *      the Free Software Foundation; either version 2 of the License, or
+ *      (at your option) any later version.
+ *
+ *      This program is distributed in the hope that it will be useful,
+ *      but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *      MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *      GNU General Public License for more details.
+ *
+ *      You should have received a copy of the GNU General Public License
+ *      along with this program; if not, write to the Free Software
+ *      Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ */
+
+#include "geany.h"
+
+#include "navqueue.h"
+#include "sciwrappers.h"
+#include "document.h"
+#include "utils.h"
+
+
+// for the navigation history queue
+typedef struct
+{
+	gchar *file;
+	/// 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;
+} filepos;
+
+GQueue *navigation_queue;
+guint nav_queue_pos;
+
+
+void navqueue_init()
+{
+	navigation_queue = g_queue_new();
+	nav_queue_pos = 0;
+}
+
+
+void navqueue_free()
+{
+	while (! g_queue_is_empty(navigation_queue))
+	{
+		g_free(g_queue_pop_tail(navigation_queue));
+	}
+	g_queue_free(navigation_queue);
+}
+
+
+static void adjust_buttons()
+{
+	if (g_queue_get_length(navigation_queue) < 2)
+	{
+		gtk_widget_set_sensitive(app->navigation_buttons[0], FALSE);
+		gtk_widget_set_sensitive(app->navigation_buttons[1], FALSE);
+		return;
+	}
+	if (nav_queue_pos == 0)
+	{
+		gtk_widget_set_sensitive(app->navigation_buttons[0], TRUE);
+		gtk_widget_set_sensitive(app->navigation_buttons[1], FALSE);
+		return;
+	}
+	// forward should be sensitive since where not at the start
+	gtk_widget_set_sensitive(app->navigation_buttons[1], TRUE);
+
+	// back should be sensitive if there's a place to go back to
+	(nav_queue_pos < g_queue_get_length(navigation_queue) - 1) ?
+		gtk_widget_set_sensitive(app->navigation_buttons[0], TRUE) :
+			gtk_widget_set_sensitive(app->navigation_buttons[0], FALSE);
+}
+
+
+void navqueue_new_position(gchar *file, gint line)
+{
+	filepos *npos;
+	guint i;
+
+	npos = g_new0(filepos, 1);
+	npos->file = file;
+	npos->line = line;
+
+	// if we've jumped to a new position from
+	// inside the queue rather than going forward
+	if (nav_queue_pos > 0)
+	{
+		for (i = 0; i < nav_queue_pos; i++)
+		{
+			g_free(g_queue_pop_head(navigation_queue));
+		}
+		nav_queue_pos = 0;
+	}
+	/// TODO add check to not add an entry if "Go To Defintion" on a definition is used
+	g_queue_push_head(navigation_queue, npos);
+	adjust_buttons();
+}
+
+
+void navqueue_go_back()
+{
+	filepos *fprev;
+
+	// return if theres no place to go back to
+	if (g_queue_is_empty(navigation_queue) ||
+		nav_queue_pos >= g_queue_get_length(navigation_queue) - 1)
+		return;
+
+	// jump back
+	fprev = g_queue_peek_nth(navigation_queue, nav_queue_pos + 1);
+	if (utils_goto_file_line(fprev->file, TRUE, fprev->line))
+	{
+		nav_queue_pos++;
+	}
+	else
+	{
+		/// TODO: add option to re open the file
+		g_queue_pop_nth(navigation_queue, nav_queue_pos + 1);
+	}
+	adjust_buttons();
+}
+
+
+void navqueue_go_forward()
+{
+	filepos *fnext;
+
+	if (nav_queue_pos < 1 || g_queue_get_length(navigation_queue) < 2)
+		return;
+
+	// jump forward
+	fnext = g_queue_peek_nth(navigation_queue, nav_queue_pos - 1);
+	if (utils_goto_file_line(fnext->file, TRUE, fnext->line))
+	{
+		nav_queue_pos--;
+	}
+	else
+	{
+		/// TODO: add option to re open the file
+		g_queue_pop_nth(navigation_queue, nav_queue_pos - 1);
+	}
+
+	adjust_buttons();
+}
+

Added: trunk/src/navqueue.h
===================================================================
--- trunk/src/navqueue.h	                        (rev 0)
+++ trunk/src/navqueue.h	2007-06-02 16:14:07 UTC (rev 1590)
@@ -0,0 +1,38 @@
+/*
+ *      navqueue.h - this file is part of Geany, a fast and lightweight IDE
+ *
+ *      Copyright 2007 Dave Moore <wrex006 at gmail.com>
+ *
+ *      This program is free software; you can redistribute it and/or modify
+ *      it under the terms of the GNU General Public License as published by
+ *      the Free Software Foundation; either version 2 of the License, or
+ *      (at your option) any later version.
+ *
+ *      This program is distributed in the hope that it will be useful,
+ *      but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *      MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *      GNU General Public License for more details.
+ *
+ *      You should have received a copy of the GNU General Public License
+ *      along with this program; if not, write to the Free Software
+ *      Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ */
+
+
+#ifndef GEANY_NAVQUEUE_H
+#define GEANY_NAVQUEUE_H 1
+
+
+void navqueue_init();
+
+void navqueue_free();
+
+void navqueue_new_position(gchar *file, gint line);
+
+void navqueue_go_back();
+
+void navqueue_go_forward();
+
+
+#endif

Modified: trunk/src/prefs.c
===================================================================
--- trunk/src/prefs.c	2007-06-01 04:12:12 UTC (rev 1589)
+++ trunk/src/prefs.c	2007-06-02 16:14:07 UTC (rev 1590)
@@ -182,6 +182,9 @@
 	widget = lookup_widget(app->prefs_dialog, "check_toolbar_undo");
 	gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(widget), app->pref_toolbar_show_undo);
 
+	widget = lookup_widget(app->prefs_dialog, "check_toolbar_navigation");
+	gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(widget), app->pref_toolbar_show_navigation);
+
 	widget = lookup_widget(app->prefs_dialog, "check_toolbar_colour");
 	gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(widget), app->pref_toolbar_show_colour);
 
@@ -508,6 +511,9 @@
 		widget = lookup_widget(app->prefs_dialog, "check_toolbar_undo");
 		app->pref_toolbar_show_undo = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(widget));
 
+		widget = lookup_widget(app->prefs_dialog, "check_toolbar_navigation");
+		app->pref_toolbar_show_navigation = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(widget));
+
 		widget = lookup_widget(app->prefs_dialog, "check_toolbar_compile");
 		app->pref_toolbar_show_compile = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(widget));
 

Modified: trunk/src/ui_utils.c
===================================================================
--- trunk/src/ui_utils.c	2007-06-01 04:12:12 UTC (rev 1589)
+++ trunk/src/ui_utils.c	2007-06-02 16:14:07 UTC (rev 1590)
@@ -673,6 +673,10 @@
 	ui_widget_show_hide(lookup_widget(app->window, "toolbutton_undo"), app->pref_toolbar_show_undo);
 	ui_widget_show_hide(lookup_widget(app->window, "toolbutton_redo"), app->pref_toolbar_show_undo);
 	ui_widget_show_hide(lookup_widget(app->window, "separatortoolitem9"), app->pref_toolbar_show_undo);
+	// navigation
+	ui_widget_show_hide(lookup_widget(app->window, "toolbutton_back"), app->pref_toolbar_show_navigation);
+	ui_widget_show_hide(lookup_widget(app->window, "toolbutton_forward"), app->pref_toolbar_show_navigation);
+	ui_widget_show_hide(lookup_widget(app->window, "separatortoolitem10"), app->pref_toolbar_show_navigation);
 	// quit
 	ui_widget_show_hide(lookup_widget(app->window, "toolbutton19"), app->pref_toolbar_show_quit);
 	ui_widget_show_hide(lookup_widget(app->window, "separatortoolitem8"), app->pref_toolbar_show_quit);


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