SF.net SVN: geany: [2609] trunk

ntrel at users.sourceforge.net ntrel at xxxxx
Thu May 22 14:41:28 UTC 2008


Revision: 2609
          http://geany.svn.sourceforge.net/geany/?rev=2609&view=rev
Author:   ntrel
Date:     2008-05-22 07:41:28 -0700 (Thu, 22 May 2008)

Log Message:
-----------
Note: this commit breaks the plugin API.
Split widget fields out of GeanyApp into GeanyMainWidgets, so other
data items can be added without breaking the plugin ABI.
Add GeanyData::main_widgets, and macro.
Rename treeview_notebook sidebar_notebook in GeanyMainWidgets.
Move tools_menu from GeanyData to GeanyMainWidgets.
Move statusbar out of GeanyApp (shouldn't be used directly).
Move ignore_callback out of GeanyApp.
Rename sci_goto_line() argument unfold, like sci_goto_pos().
Make utils_goto_file_pos(), utils_goto_line(),
utils_switch_document() into static functions (they are UI-related,
so shouldn't be in utils.c).
Move utils_goto_pos() to editor.c, add mark argument.

Modified Paths:
--------------
    trunk/ChangeLog
    trunk/plugins/autosave.c
    trunk/plugins/classbuilder.c
    trunk/plugins/demoplugin.c
    trunk/plugins/export.c
    trunk/plugins/filebrowser.c
    trunk/plugins/htmlchars.c
    trunk/plugins/pluginmacros.h
    trunk/plugins/vcdiff.c
    trunk/src/about.c
    trunk/src/build.c
    trunk/src/callbacks.c
    trunk/src/dialogs.c
    trunk/src/document.c
    trunk/src/editor.c
    trunk/src/editor.h
    trunk/src/encodings.c
    trunk/src/filetypes.c
    trunk/src/geany.h
    trunk/src/keybindings.c
    trunk/src/keyfile.c
    trunk/src/main.c
    trunk/src/msgwindow.c
    trunk/src/navqueue.c
    trunk/src/notebook.c
    trunk/src/plugindata.h
    trunk/src/plugins.c
    trunk/src/prefs.c
    trunk/src/printing.c
    trunk/src/project.c
    trunk/src/sciwrappers.c
    trunk/src/sciwrappers.h
    trunk/src/search.c
    trunk/src/socket.c
    trunk/src/symbols.c
    trunk/src/templates.c
    trunk/src/tools.c
    trunk/src/treeviews.c
    trunk/src/ui_utils.c
    trunk/src/ui_utils.h
    trunk/src/utils.c
    trunk/src/utils.h
    trunk/src/win32.c

Modified: trunk/ChangeLog
===================================================================
--- trunk/ChangeLog	2008-05-21 17:41:11 UTC (rev 2608)
+++ trunk/ChangeLog	2008-05-22 14:41:28 UTC (rev 2609)
@@ -1,3 +1,31 @@
+2008-05-22  Nick Treleaven  <nick(dot)treleaven(at)btinternet(dot)com>
+
+ * src/templates.c, src/build.c, src/utils.c, src/ui_utils.h,
+   src/win32.c, src/utils.h, src/keybindings.c, src/printing.c,
+   src/tools.c, src/sciwrappers.c, src/project.c, src/sciwrappers.h,
+   src/encodings.c, src/prefs.c, src/dialogs.c, src/navqueue.c,
+   src/plugindata.h, src/geany.h, src/about.c, src/treeviews.c,
+   src/msgwindow.c, src/callbacks.c, src/notebook.c, src/keyfile.c,
+   src/filetypes.c, src/search.c, src/document.c, src/plugins.c,
+   src/main.c, src/editor.c, src/symbols.c, src/socket.c,
+   src/editor.h, src/ui_utils.c, plugins/export.c, plugins/vcdiff.c,
+   plugins/demoplugin.c, plugins/filebrowser.c, plugins/htmlchars.c,
+   plugins/autosave.c, plugins/pluginmacros.h, plugins/classbuilder.c:
+   Note: this commit breaks the plugin API.
+   Split widget fields out of GeanyApp into GeanyMainWidgets, so other
+   data items can be added without breaking the plugin ABI.
+   Add GeanyData::main_widgets, and macro.
+   Rename treeview_notebook sidebar_notebook in GeanyMainWidgets.
+   Move tools_menu from GeanyData to GeanyMainWidgets.
+   Move statusbar out of GeanyApp (shouldn't be used directly).
+   Move ignore_callback out of GeanyApp.
+   Rename sci_goto_line() argument unfold, like sci_goto_pos().
+   Make utils_goto_file_pos(), utils_goto_line(),
+   utils_switch_document() into static functions (they are UI-related,
+   so shouldn't be in utils.c).
+   Move utils_goto_pos() to editor.c, add mark argument.
+
+
 2008-05-21  Enrico Tröger  <enrico(dot)troeger(at)uvena(dot)de>
 
  * plugins/Makefile.am:

Modified: trunk/plugins/autosave.c
===================================================================
--- trunk/plugins/autosave.c	2008-05-21 17:41:11 UTC (rev 2608)
+++ trunk/plugins/autosave.c	2008-05-22 14:41:28 UTC (rev 2609)
@@ -26,6 +26,7 @@
 #include "geany.h"
 #include "support.h"
 #include "document.h"
+#include "ui_utils.h"
 
 #include "plugindata.h"
 #include "pluginmacros.h"
@@ -52,7 +53,7 @@
 gboolean auto_save(gpointer data)
 {
 	gint cur_idx = p_document->get_cur_idx();
-	gint i, idx, max = gtk_notebook_get_n_pages(GTK_NOTEBOOK(app->notebook));
+	gint i, idx, max = gtk_notebook_get_n_pages(GTK_NOTEBOOK(main_widgets->notebook));
 	gint saved_files = 0;
 
 	if (save_all)

Modified: trunk/plugins/classbuilder.c
===================================================================
--- trunk/plugins/classbuilder.c	2008-05-21 17:41:11 UTC (rev 2608)
+++ trunk/plugins/classbuilder.c	2008-05-22 14:41:28 UTC (rev 2609)
@@ -30,6 +30,7 @@
 #include "support.h"
 #include "filetypes.h"
 #include "document.h"
+#include "ui_utils.h"
 #include "pluginmacros.h"
 
 
@@ -354,7 +355,7 @@
 	cc_dlg->class_type = type;
 
 	cc_dlg->dialog = gtk_dialog_new_with_buttons(_("Create Class"),
-			GTK_WINDOW(app->window),
+			GTK_WINDOW(main_widgets->window),
 			GTK_DIALOG_MODAL,
 			GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL,
 			GTK_STOCK_OK, GTK_RESPONSE_OK,
@@ -777,7 +778,7 @@
 	GtkWidget *menu_create_gtk_class;
 
 	menu_create_class1 = gtk_image_menu_item_new_with_mnemonic (_("Create Cla_ss"));
-	gtk_container_add (GTK_CONTAINER (data->tools_menu), menu_create_class1);
+	gtk_container_add (GTK_CONTAINER (main_widgets->tools_menu), menu_create_class1);
 
 	image1861 = gtk_image_new_from_stock ("gtk-add", GTK_ICON_SIZE_MENU);
 	gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (menu_create_class1), image1861);

Modified: trunk/plugins/demoplugin.c
===================================================================
--- trunk/plugins/demoplugin.c	2008-05-21 17:41:11 UTC (rev 2608)
+++ trunk/plugins/demoplugin.c	2008-05-22 14:41:28 UTC (rev 2609)
@@ -37,6 +37,7 @@
 
 #include "geany.h"		/* for the GeanyApp data type */
 #include "support.h"	/* for the _() translation macro (see also po/POTFILES.in) */
+#include "ui_utils.h"
 
 #include "plugindata.h"		/* this defines the plugin API */
 #include "pluginmacros.h"	/* some useful macros to avoid typing geany_data so often */
@@ -67,7 +68,7 @@
 	GtkWidget *dialog;
 
 	dialog = gtk_message_dialog_new(
-		GTK_WINDOW(app->window),
+		GTK_WINDOW(main_widgets->window),
 		GTK_DIALOG_DESTROY_WITH_PARENT,
 		GTK_MESSAGE_INFO,
 		GTK_BUTTONS_OK,
@@ -89,7 +90,7 @@
 	/* Add an item to the Tools menu */
 	demo_item = gtk_menu_item_new_with_mnemonic(_("_Demo Plugin"));
 	gtk_widget_show(demo_item);
-	gtk_container_add(GTK_CONTAINER(geany_data->tools_menu), demo_item);
+	gtk_container_add(GTK_CONTAINER(main_widgets->tools_menu), demo_item);
 	g_signal_connect(G_OBJECT(demo_item), "activate", G_CALLBACK(item_activate), NULL);
 
 	welcome_text = g_strdup(_("Hello World!"));

Modified: trunk/plugins/export.c
===================================================================
--- trunk/plugins/export.c	2008-05-21 17:41:11 UTC (rev 2608)
+++ trunk/plugins/export.c	2008-05-22 14:41:28 UTC (rev 2609)
@@ -163,14 +163,14 @@
 		return;
 
 	idx = p_document->get_cur_idx();
-	tooltips = GTK_TOOLTIPS(p_support->lookup_widget(app->window, "tooltips"));
+	tooltips = GTK_TOOLTIPS(p_support->lookup_widget(main_widgets->window, "tooltips"));
 
 	exi = g_new(ExportInfo, 1);
 	exi->idx = idx;
 	exi->export_func = func;
 	exi->have_zoom_level_checkbox = FALSE;
 
-	dialog = gtk_file_chooser_dialog_new(_("Export File"), GTK_WINDOW(app->window),
+	dialog = gtk_file_chooser_dialog_new(_("Export File"), GTK_WINDOW(main_widgets->window),
 				GTK_FILE_CHOOSER_ACTION_SAVE, NULL, NULL);
 	gtk_window_set_modal(GTK_WINDOW(dialog), TRUE);
 	gtk_window_set_destroy_with_parent(GTK_WINDOW(dialog), TRUE);
@@ -205,7 +205,7 @@
 	g_signal_connect((gpointer) dialog, "response",
 		G_CALLBACK(on_file_save_dialog_response), exi);
 
-	gtk_window_set_transient_for(GTK_WINDOW(dialog), GTK_WINDOW(app->window));
+	gtk_window_set_transient_for(GTK_WINDOW(dialog), GTK_WINDOW(main_widgets->window));
 
 	/* if the current document has a filename we use it as the default. */
 	gtk_file_chooser_unselect_all(GTK_FILE_CHOOSER(dialog));
@@ -712,7 +712,7 @@
 	GtkWidget *menu_create_latex;
 
 	menu_export = gtk_image_menu_item_new_with_mnemonic(_("_Export"));
-	gtk_container_add(GTK_CONTAINER(data->tools_menu), menu_export);
+	gtk_container_add(GTK_CONTAINER(main_widgets->tools_menu), menu_export);
 
 	menu_export_menu = gtk_menu_new ();
 	gtk_menu_item_set_submenu(GTK_MENU_ITEM(menu_export), menu_export_menu);

Modified: trunk/plugins/filebrowser.c
===================================================================
--- trunk/plugins/filebrowser.c	2008-05-21 17:41:11 UTC (rev 2608)
+++ trunk/plugins/filebrowser.c	2008-05-22 14:41:28 UTC (rev 2609)
@@ -738,7 +738,7 @@
 {
 	GtkWidget *wid, *toolbar;
 	GtkTooltips *tooltips = GTK_TOOLTIPS(p_support->lookup_widget(
-		app->window, "tooltips"));
+		main_widgets->window, "tooltips"));
 
 	toolbar = gtk_toolbar_new();
 	gtk_toolbar_set_icon_size(GTK_TOOLBAR(toolbar), GTK_ICON_SIZE_MENU);
@@ -938,7 +938,7 @@
 	gtk_container_add(GTK_CONTAINER(file_view_vbox), scrollwin);
 
 	gtk_widget_show_all(file_view_vbox);
-	gtk_notebook_append_page(GTK_NOTEBOOK(app->treeview_notebook), file_view_vbox,
+	gtk_notebook_append_page(GTK_NOTEBOOK(main_widgets->sidebar_notebook), file_view_vbox,
 		gtk_label_new(_("Files")));
 
 	load_settings();

Modified: trunk/plugins/htmlchars.c
===================================================================
--- trunk/plugins/htmlchars.c	2008-05-21 17:41:11 UTC (rev 2608)
+++ trunk/plugins/htmlchars.c	2008-05-22 14:41:28 UTC (rev 2609)
@@ -29,6 +29,7 @@
 #include "plugindata.h"
 #include "document.h"
 #include "keybindings.h"
+#include "ui_utils.h"
 #include "pluginmacros.h"
 
 
@@ -83,7 +84,7 @@
 		GtkWidget *swin, *vbox, *label;
 
 		sc_dialog = gtk_dialog_new_with_buttons(
-					_("Special Characters"), GTK_WINDOW(app->window),
+					_("Special Characters"), GTK_WINDOW(main_widgets->window),
 					GTK_DIALOG_DESTROY_WITH_PARENT, GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL,
 					_("_Insert"), GTK_RESPONSE_OK, NULL);
 		vbox = p_ui->dialog_vbox_new(GTK_DIALOG(sc_dialog));
@@ -531,7 +532,7 @@
 	/* Add an item to the Tools menu */
 	demo_item = gtk_menu_item_new_with_mnemonic(menu_text);
 	gtk_widget_show(demo_item);
-	gtk_container_add(GTK_CONTAINER(geany_data->tools_menu), demo_item);
+	gtk_container_add(GTK_CONTAINER(main_widgets->tools_menu), demo_item);
 	g_signal_connect(G_OBJECT(demo_item), "activate", G_CALLBACK(item_activate), NULL);
 
 	/* disable menu_item when there are no documents open */

Modified: trunk/plugins/pluginmacros.h
===================================================================
--- trunk/plugins/pluginmacros.h	2008-05-21 17:41:11 UTC (rev 2608)
+++ trunk/plugins/pluginmacros.h	2008-05-22 14:41:28 UTC (rev 2609)
@@ -37,6 +37,7 @@
 
 /* common data structs */
 #define app				geany_data->app
+#define main_widgets	geany_data->main_widgets
 #define doc_array		geany_data->doc_array			/**< Allows use of @c doc_list[] macro */
 #define filetypes_array	geany_data->filetypes_array		/**< Allows use of @c filetypes[] macro */
 #define prefs			geany_data->prefs

Modified: trunk/plugins/vcdiff.c
===================================================================
--- trunk/plugins/vcdiff.c	2008-05-21 17:41:11 UTC (rev 2608)
+++ trunk/plugins/vcdiff.c	2008-05-22 14:41:28 UTC (rev 2609)
@@ -34,6 +34,7 @@
 #include "filetypes.h"
 #include "utils.h"
 #include "project.h"
+#include "ui_utils.h"
 #include "pluginmacros.h"
 
 
@@ -293,7 +294,7 @@
 		else
 		{
 			p_sci->set_text(doc_list[idx].sci, text);
-			book = GTK_NOTEBOOK(app->notebook);
+			book = GTK_NOTEBOOK(main_widgets->notebook);
 			page = gtk_notebook_page_num(book, GTK_WIDGET(doc_list[idx].sci));
 			gtk_notebook_set_current_page(book, page);
 			doc_list[idx].changed = FALSE;
@@ -508,7 +509,7 @@
 	tooltips = gtk_tooltips_new();
 
 	menu_vcdiff = gtk_image_menu_item_new_with_mnemonic(_("_Version Diff"));
-	gtk_container_add(GTK_CONTAINER(data->tools_menu), menu_vcdiff);
+	gtk_container_add(GTK_CONTAINER(main_widgets->tools_menu), menu_vcdiff);
 
 	g_signal_connect((gpointer) menu_vcdiff, "activate",
 		G_CALLBACK(update_menu_items), NULL);

Modified: trunk/src/about.c
===================================================================
--- trunk/src/about.c	2008-05-21 17:41:11 UTC (rev 2608)
+++ trunk/src/about.c	2008-05-22 14:41:28 UTC (rev 2609)
@@ -118,7 +118,7 @@
 	dialog = gtk_dialog_new();
 
 	/* configure dialog */
-	gtk_window_set_transient_for(GTK_WINDOW(dialog), GTK_WINDOW(app->window));
+	gtk_window_set_transient_for(GTK_WINDOW(dialog), GTK_WINDOW(main_widgets.window));
 	gtk_window_set_position(GTK_WINDOW(dialog), GTK_WIN_POS_CENTER_ON_PARENT);
 	gtk_window_set_title(GTK_WINDOW(dialog), _("About Geany"));
 	gtk_widget_set_name(dialog, "GeanyDialog");

Modified: trunk/src/build.c
===================================================================
--- trunk/src/build.c	2008-05-21 17:41:11 UTC (rev 2608)
+++ trunk/src/build.c	2008-05-22 14:41:28 UTC (rev 2609)
@@ -1027,7 +1027,7 @@
 {
 	GtkWidget *menu, *item = NULL, *image, *separator;
 	GtkAccelGroup *accel_group = gtk_accel_group_new();
-	GtkTooltips *tooltips = GTK_TOOLTIPS(lookup_widget(app->window, "tooltips"));
+	GtkTooltips *tooltips = GTK_TOOLTIPS(lookup_widget(main_widgets.window, "tooltips"));
 	KeyBindingGroup *group = g_ptr_array_index(keybinding_groups, GEANY_KEY_GROUP_BUILD);
 
 	menu = gtk_menu_new();
@@ -1144,7 +1144,7 @@
 {
 	GtkWidget *menu, *item, *image, *separator;
 	GtkAccelGroup *accel_group = gtk_accel_group_new();
-	GtkTooltips *tooltips = GTK_TOOLTIPS(lookup_widget(app->window, "tooltips"));
+	GtkTooltips *tooltips = GTK_TOOLTIPS(lookup_widget(main_widgets.window, "tooltips"));
 	KeyBindingGroup *group = g_ptr_array_index(keybinding_groups, GEANY_KEY_GROUP_BUILD);
 
 	menu = gtk_menu_new();
@@ -1264,7 +1264,7 @@
 		G_CALLBACK(on_build_arguments_activate), filetypes[GEANY_FILETYPES_LATEX]);
 	menu_items->item_set_args = item;
 
-	gtk_window_add_accel_group(GTK_WINDOW(app->window), accel_group);
+	gtk_window_add_accel_group(GTK_WINDOW(main_widgets.window), accel_group);
 
 	menu_items->menu = menu;
 	g_object_ref((gpointer)menu_items->menu);	/* to hold it after removing */
@@ -1330,7 +1330,7 @@
 	if (DOC_IDX_VALID(idx)) ft = doc_list[idx].file_type;
 	g_return_if_fail(ft != NULL);
 
-	dialog = gtk_dialog_new_with_buttons(_("Set Arguments"), GTK_WINDOW(app->window),
+	dialog = gtk_dialog_new_with_buttons(_("Set Arguments"), GTK_WINDOW(main_widgets.window),
 										GTK_DIALOG_DESTROY_WITH_PARENT,
 										GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL,
 										GTK_STOCK_OK, GTK_RESPONSE_ACCEPT, NULL);
@@ -1499,7 +1499,7 @@
 	if (DOC_IDX_VALID(idx)) ft = doc_list[idx].file_type;
 	g_return_if_fail(ft != NULL);
 
-	dialog = gtk_dialog_new_with_buttons(_("Set Includes and Arguments"), GTK_WINDOW(app->window),
+	dialog = gtk_dialog_new_with_buttons(_("Set Includes and Arguments"), GTK_WINDOW(main_widgets.window),
 										GTK_DIALOG_DESTROY_WITH_PARENT,
 										GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL,
 										GTK_STOCK_OK, GTK_RESPONSE_ACCEPT, NULL);
@@ -1645,14 +1645,14 @@
 		(FILETYPE_ID(doc_list[idx].file_type) == GEANY_FILETYPES_NONE &&
 			doc_list[idx].file_name == NULL))
 	{
-		gtk_widget_set_sensitive(lookup_widget(app->window, "menu_build1"), FALSE);
-		gtk_menu_item_remove_submenu(GTK_MENU_ITEM(lookup_widget(app->window, "menu_build1")));
+		gtk_widget_set_sensitive(lookup_widget(main_widgets.window, "menu_build1"), FALSE);
+		gtk_menu_item_remove_submenu(GTK_MENU_ITEM(lookup_widget(main_widgets.window, "menu_build1")));
 		gtk_widget_set_sensitive(widgets.compile_button, FALSE);
 		gtk_widget_set_sensitive(widgets.run_button, FALSE);
 		return;
 	}
 	else
-		gtk_widget_set_sensitive(lookup_widget(app->window, "menu_build1"), TRUE);
+		gtk_widget_set_sensitive(lookup_widget(main_widgets.window, "menu_build1"), TRUE);
 
 	ft = doc_list[idx].file_type;
 	g_return_if_fail(ft != NULL);
@@ -1660,7 +1660,7 @@
 	menu_items = build_get_menu_items(ft->id);
 	/* Note: don't remove the submenu first because it can now cause an X hang if
 	 * the menu is already open when called from build_exit_cb(). */
-	gtk_menu_item_set_submenu(GTK_MENU_ITEM(lookup_widget(app->window, "menu_build1")),
+	gtk_menu_item_set_submenu(GTK_MENU_ITEM(lookup_widget(main_widgets.window, "menu_build1")),
 		menu_items->menu);
 
 	have_path = (doc_list[idx].file_name != NULL);
@@ -2041,6 +2041,6 @@
 
 void build_init()
 {
-	widgets.compile_button = lookup_widget(app->window, "toolbutton13");
-	widgets.run_button = lookup_widget(app->window, "toolbutton26");
+	widgets.compile_button = lookup_widget(main_widgets.window, "toolbutton13");
+	widgets.run_button = lookup_widget(main_widgets.window, "toolbutton26");
 }

Modified: trunk/src/callbacks.c
===================================================================
--- trunk/src/callbacks.c	2008-05-21 17:41:11 UTC (rev 2608)
+++ trunk/src/callbacks.c	2008-05-22 14:41:28 UTC (rev 2609)
@@ -175,7 +175,7 @@
 on_save1_activate                      (GtkMenuItem     *menuitem,
                                         gpointer         user_data)
 {
-	gint cur_page = gtk_notebook_get_current_page(GTK_NOTEBOOK(app->notebook));
+	gint cur_page = gtk_notebook_get_current_page(GTK_NOTEBOOK(main_widgets.notebook));
 	gint idx = document_get_cur_idx();
 
 	if (cur_page >= 0)
@@ -200,7 +200,7 @@
 on_save_all1_activate                  (GtkMenuItem     *menuitem,
                                         gpointer         user_data)
 {
-	gint i, idx, max = gtk_notebook_get_n_pages(GTK_NOTEBOOK(app->notebook));
+	gint i, idx, max = gtk_notebook_get_n_pages(GTK_NOTEBOOK(main_widgets.notebook));
 	gint cur_idx = document_get_cur_idx();
 
 	document_delay_colourise();	/* avoid recolourising all C files after each save */
@@ -212,7 +212,7 @@
 		if (doc_list[idx].file_name == NULL)
 		{
 			/* display unnamed document */
-			gtk_notebook_set_current_page(GTK_NOTEBOOK(app->notebook),
+			gtk_notebook_set_current_page(GTK_NOTEBOOK(main_widgets.notebook),
 				document_get_notebook_page(idx));
 			dialogs_show_save_as();
 		}
@@ -237,7 +237,7 @@
 on_close1_activate                     (GtkMenuItem     *menuitem,
                                         gpointer         user_data)
 {
-	guint cur_page = gtk_notebook_get_current_page(GTK_NOTEBOOK(app->notebook));
+	guint cur_page = gtk_notebook_get_current_page(GTK_NOTEBOOK(main_widgets.notebook));
 	document_remove(cur_page);
 }
 
@@ -301,7 +301,7 @@
                                         gpointer         user_data)
 {
 	gint idx = document_get_cur_idx();
-	GtkWidget *focusw = gtk_window_get_focus(GTK_WINDOW(app->window));
+	GtkWidget *focusw = gtk_window_get_focus(GTK_WINDOW(main_widgets.window));
 
 	if (GTK_IS_EDITABLE(focusw))
 		gtk_editable_cut_clipboard(GTK_EDITABLE(focusw));
@@ -323,7 +323,7 @@
                                         gpointer         user_data)
 {
 	gint idx = document_get_cur_idx();
-	GtkWidget *focusw = gtk_window_get_focus(GTK_WINDOW(app->window));
+	GtkWidget *focusw = gtk_window_get_focus(GTK_WINDOW(main_widgets.window));
 
 	if (GTK_IS_EDITABLE(focusw))
 		gtk_editable_copy_clipboard(GTK_EDITABLE(focusw));
@@ -345,7 +345,7 @@
                                         gpointer         user_data)
 {
 	gint idx = document_get_cur_idx();
-	GtkWidget *focusw = gtk_window_get_focus(GTK_WINDOW(app->window));
+	GtkWidget *focusw = gtk_window_get_focus(GTK_WINDOW(main_widgets.window));
 
 	if (GTK_IS_EDITABLE(focusw))
 		gtk_editable_paste_clipboard(GTK_EDITABLE(focusw));
@@ -386,7 +386,7 @@
                                         gpointer         user_data)
 {
 	gint idx = document_get_cur_idx();
-	GtkWidget *focusw = gtk_window_get_focus(GTK_WINDOW(app->window));
+	GtkWidget *focusw = gtk_window_get_focus(GTK_WINDOW(main_widgets.window));
 
 	if (GTK_IS_EDITABLE(focusw))
 		gtk_editable_delete_selection(GTK_EDITABLE(focusw));
@@ -484,7 +484,7 @@
 {
 	if (ignore_toolbar_toggle) return;
 
-	gtk_toolbar_set_style(GTK_TOOLBAR(app->toolbar), GTK_TOOLBAR_BOTH);
+	gtk_toolbar_set_style(GTK_TOOLBAR(main_widgets.toolbar), GTK_TOOLBAR_BOTH);
 	toolbar_prefs.icon_style = GTK_TOOLBAR_BOTH;
 }
 
@@ -495,7 +495,7 @@
 {
 	if (ignore_toolbar_toggle) return;
 
-	gtk_toolbar_set_style(GTK_TOOLBAR(app->toolbar), GTK_TOOLBAR_ICONS);
+	gtk_toolbar_set_style(GTK_TOOLBAR(main_widgets.toolbar), GTK_TOOLBAR_ICONS);
 	toolbar_prefs.icon_style = GTK_TOOLBAR_ICONS;
 }
 
@@ -506,7 +506,7 @@
 {
 	if (ignore_toolbar_toggle) return;
 
-	gtk_toolbar_set_style(GTK_TOOLBAR(app->toolbar), GTK_TOOLBAR_TEXT);
+	gtk_toolbar_set_style(GTK_TOOLBAR(main_widgets.toolbar), GTK_TOOLBAR_TEXT);
 	toolbar_prefs.icon_style = GTK_TOOLBAR_TEXT;
 }
 
@@ -550,7 +550,7 @@
 	const GdkColor red   = {0, 0xffff, 0x6666, 0x6666};
 	const GdkColor white = {0, 0xffff, 0xffff, 0xffff};
 	static gboolean old_value = TRUE;
-	GtkWidget *widget = lookup_widget(app->window, "entry1");
+	GtkWidget *widget = lookup_widget(main_widgets.window, "entry1");
 
 	/* only update if really needed */
 	if (search_data.search_bar && old_value != success)
@@ -609,7 +609,7 @@
 {
 	gint idx = document_get_cur_idx();
 	gboolean result;
-	GtkWidget *entry = lookup_widget(GTK_WIDGET(app->window), "entry1");
+	GtkWidget *entry = lookup_widget(GTK_WIDGET(main_widgets.window), "entry1");
 
 	setup_find_next(GTK_EDITABLE(entry));
 	result = document_search_bar_find(idx, search_data.text, 0, FALSE);
@@ -644,7 +644,7 @@
 on_hide_toolbar1_activate              (GtkMenuItem     *menuitem,
                                         gpointer         user_data)
 {
-	GtkWidget *tool_item = lookup_widget(GTK_WIDGET(app->window), "menu_show_toolbar1");
+	GtkWidget *tool_item = lookup_widget(GTK_WIDGET(main_widgets.window), "menu_show_toolbar1");
 	gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(tool_item), FALSE);
 }
 
@@ -698,7 +698,7 @@
 on_toolbutton15_clicked                (GtkToolButton   *toolbutton,
                                         gpointer         user_data)
 {
-	gint cur_page = gtk_notebook_get_current_page(GTK_NOTEBOOK(app->notebook));
+	gint cur_page = gtk_notebook_get_current_page(GTK_NOTEBOOK(main_widgets.notebook));
 	document_remove(cur_page);
 }
 
@@ -761,7 +761,7 @@
                                         gpointer         user_data)
 {
 	/* suppress selection changed signal when switching to the open files list */
-	app->ignore_callback = TRUE;
+	ignore_callback = TRUE;
 }
 
 
@@ -771,7 +771,7 @@
                                         guint            page_num,
                                         gpointer         user_data)
 {
-	app->ignore_callback = FALSE;
+	ignore_callback = FALSE;
 }
 
 
@@ -780,7 +780,7 @@
                                         gpointer         user_data)
 {
 	gint idx = document_get_cur_idx();
-	if (app->ignore_callback || idx == -1 || ! doc_list[idx].is_valid) return;
+	if (ignore_callback || idx == -1 || ! doc_list[idx].is_valid) return;
 	sci_convert_eols(doc_list[idx].sci, SC_EOL_CRLF);
 	sci_set_eol_mode(doc_list[idx].sci, SC_EOL_CRLF);
 }
@@ -791,7 +791,7 @@
                                         gpointer         user_data)
 {
 	gint idx = document_get_cur_idx();
-	if (app->ignore_callback || idx == -1 || ! doc_list[idx].is_valid) return;
+	if (ignore_callback || idx == -1 || ! doc_list[idx].is_valid) return;
 	sci_convert_eols(doc_list[idx].sci, SC_EOL_LF);
 	sci_set_eol_mode(doc_list[idx].sci, SC_EOL_LF);
 }
@@ -802,7 +802,7 @@
                                         gpointer         user_data)
 {
 	gint idx = document_get_cur_idx();
-	if (app->ignore_callback || idx == -1 || ! doc_list[idx].is_valid) return;
+	if (ignore_callback || idx == -1 || ! doc_list[idx].is_valid) return;
 	sci_convert_eols(doc_list[idx].sci, SC_EOL_CR);
 	sci_set_eol_mode(doc_list[idx].sci, SC_EOL_CR);
 }
@@ -918,10 +918,10 @@
 on_show_toolbar1_toggled               (GtkCheckMenuItem *checkmenuitem,
                                         gpointer         user_data)
 {
-	if (app->ignore_callback) return;
+	if (ignore_callback) return;
 
 	toolbar_prefs.visible = (toolbar_prefs.visible) ? FALSE : TRUE;;
-	ui_widget_show_hide(GTK_WIDGET(app->toolbar), toolbar_prefs.visible);
+	ui_widget_show_hide(GTK_WIDGET(main_widgets.toolbar), toolbar_prefs.visible);
 }
 
 
@@ -938,10 +938,10 @@
 on_show_messages_window1_toggled       (GtkCheckMenuItem *checkmenuitem,
                                         gpointer          user_data)
 {
-	if (app->ignore_callback) return;
+	if (ignore_callback) return;
 
 	ui_prefs.msgwindow_visible = (ui_prefs.msgwindow_visible) ? FALSE : TRUE;
-	ui_widget_show_hide(lookup_widget(app->window, "scrolledwindow1"), ui_prefs.msgwindow_visible);
+	ui_widget_show_hide(lookup_widget(main_widgets.window, "scrolledwindow1"), ui_prefs.msgwindow_visible);
 }
 
 
@@ -967,7 +967,7 @@
 on_line_wrapping1_toggled              (GtkCheckMenuItem *checkmenuitem,
                                         gpointer         user_data)
 {
-	if (! app->ignore_callback)
+	if (! ignore_callback)
 	{
 		gint idx = document_get_cur_idx();
 		if (! DOC_IDX_VALID(idx)) return;
@@ -980,7 +980,7 @@
 on_set_file_readonly1_toggled          (GtkCheckMenuItem *checkmenuitem,
                                         gpointer         user_data)
 {
-	if (! app->ignore_callback)
+	if (! ignore_callback)
 	{
 		gint idx = document_get_cur_idx();
 		if (! DOC_IDX_VALID(idx)) return;
@@ -996,7 +996,7 @@
 on_use_auto_indentation1_toggled       (GtkCheckMenuItem *checkmenuitem,
                                         gpointer         user_data)
 {
-	if (! app->ignore_callback)
+	if (! ignore_callback)
 	{
 		gint idx = document_get_cur_idx();
 		if (! DOC_IDX_VALID(idx)) return;
@@ -1037,7 +1037,7 @@
                                         gpointer         user_data)
 {
 	gboolean definition = (menuitem ==
-		GTK_MENU_ITEM(lookup_widget(app->popup_menu, "goto_tag_definition1")));
+		GTK_MENU_ITEM(lookup_widget(main_widgets.editor_menu, "goto_tag_definition1")));
 	GeanyDocument *doc = document_get_current();
 
 	g_return_if_fail(doc);
@@ -1187,15 +1187,19 @@
 
 		if (line > 0 && line <= sci_get_line_count(doc_list[idx].sci))
 		{
-			utils_goto_line(idx, line);
+			gint pos;
+
+			line--;	/* the user counts lines from 1, we begin at 0 so bring the user line to our one */
+			pos = sci_get_position_from_line(doc_list[idx].sci, line);
+			editor_goto_pos(idx, pos, TRUE);
 		}
 		else
 		{
 			utils_beep();
 		}
-
 	}
-	if (dialog) gtk_widget_destroy(GTK_WIDGET(dialog));
+	if (dialog)
+		gtk_widget_destroy(GTK_WIDGET(dialog));
 }
 
 
@@ -1220,7 +1224,7 @@
                                         gpointer         user_data)
 {
 	on_goto_line_dialog_response(NULL, GTK_RESPONSE_ACCEPT,
-			lookup_widget(app->window, "entry_goto_line"));
+			lookup_widget(main_widgets.window, "entry_goto_line"));
 }
 
 
@@ -1546,7 +1550,7 @@
 	gint idx = document_get_cur_idx();
 	guint i = GPOINTER_TO_INT(user_data);
 
-	if (app->ignore_callback || ! DOC_IDX_VALID(idx) || encodings[i].charset == NULL ||
+	if (ignore_callback || ! DOC_IDX_VALID(idx) || encodings[i].charset == NULL ||
 		utils_str_equal(encodings[i].charset, doc_list[idx].encoding)) return;
 
 	if (doc_list[idx].readonly)
@@ -1589,13 +1593,13 @@
 {
 	static gint active_page = -1;
 
-	if (app->ignore_callback) return;
+	if (ignore_callback) return;
 
 	if (ui_prefs.sidebar_visible)
 	{
 		/* to remember the active page because GTK (e.g. 2.8.18) doesn't do it and shows always
 		 * the last page (for unknown reason, with GTK 2.6.4 it works) */
-		active_page = gtk_notebook_get_current_page(GTK_NOTEBOOK(app->treeview_notebook));
+		active_page = gtk_notebook_get_current_page(GTK_NOTEBOOK(main_widgets.sidebar_notebook));
 	}
 
 	ui_prefs.sidebar_visible = ! ui_prefs.sidebar_visible;
@@ -1607,7 +1611,7 @@
 	}
 
 	ui_sidebar_show_hide();
-	gtk_notebook_set_current_page(GTK_NOTEBOOK(app->treeview_notebook), active_page);
+	gtk_notebook_set_current_page(GTK_NOTEBOOK(main_widgets.sidebar_notebook), active_page);
 }
 
 
@@ -1615,7 +1619,7 @@
 on_menu_write_unicode_bom1_toggled     (GtkCheckMenuItem *checkmenuitem,
                                         gpointer         user_data)
 {
-	if (! app->ignore_callback)
+	if (! ignore_callback)
 	{
 		gint idx = document_get_cur_idx();
 
@@ -1835,8 +1839,8 @@
 
 	if (item_close == NULL)
 	{
-		item_close = lookup_widget(app->window, "project_close1");
-		item_properties = lookup_widget(app->window, "project_properties1");
+		item_close = lookup_widget(main_widgets.window, "project_close1");
+		item_properties = lookup_widget(main_widgets.window, "project_properties1");
 	}
 
 	gtk_widget_set_sensitive(item_close, (app->project != NULL));
@@ -1966,9 +1970,9 @@
 {
 	static gint hide_all = -1;
 	GtkCheckMenuItem *msgw = GTK_CHECK_MENU_ITEM(
-		lookup_widget(app->window, "menu_show_messages_window1"));
+		lookup_widget(main_widgets.window, "menu_show_messages_window1"));
 	GtkCheckMenuItem *toolbari = GTK_CHECK_MENU_ITEM(
-		lookup_widget(app->window, "menu_show_toolbar1"));
+		lookup_widget(main_widgets.window, "menu_show_toolbar1"));
 
 	/* get the initial state (necessary if Geany was closed with hide_all = TRUE) */
 	if (hide_all == -1)
@@ -1991,7 +1995,7 @@
 			gtk_check_menu_item_set_active(msgw, ! gtk_check_menu_item_get_active(msgw));
 
 		interface_prefs.show_notebook_tabs = FALSE;
-		gtk_notebook_set_show_tabs(GTK_NOTEBOOK(app->notebook), interface_prefs.show_notebook_tabs);
+		gtk_notebook_set_show_tabs(GTK_NOTEBOOK(main_widgets.notebook), interface_prefs.show_notebook_tabs);
 
 		ui_statusbar_showhide(FALSE);
 
@@ -2005,7 +2009,7 @@
 			gtk_check_menu_item_set_active(msgw, ! gtk_check_menu_item_get_active(msgw));
 
 		interface_prefs.show_notebook_tabs = TRUE;
-		gtk_notebook_set_show_tabs(GTK_NOTEBOOK(app->notebook), interface_prefs.show_notebook_tabs);
+		gtk_notebook_set_show_tabs(GTK_NOTEBOOK(main_widgets.notebook), interface_prefs.show_notebook_tabs);
 
 		ui_statusbar_showhide(TRUE);
 
@@ -2113,7 +2117,7 @@
 {
 	GeanyDocument *doc;
 
-	if (app->ignore_callback)
+	if (ignore_callback)
 		return;
 
 	doc = document_get_current();

Modified: trunk/src/dialogs.c
===================================================================
--- trunk/src/dialogs.c	2008-05-21 17:41:11 UTC (rev 2608)
+++ trunk/src/dialogs.c	2008-05-22 14:41:28 UTC (rev 2609)
@@ -169,11 +169,11 @@
 {
 	GtkWidget *filetype_combo, *encoding_combo;
 	GtkWidget *viewbtn;
-	GtkTooltips *tooltips = GTK_TOOLTIPS(lookup_widget(app->window, "tooltips"));
+	GtkTooltips *tooltips = GTK_TOOLTIPS(lookup_widget(main_widgets.window, "tooltips"));
 	guint i;
 	gchar *encoding_string;
 
-	ui_widgets.open_filesel = gtk_file_chooser_dialog_new(_("Open File"), GTK_WINDOW(app->window),
+	ui_widgets.open_filesel = gtk_file_chooser_dialog_new(_("Open File"), GTK_WINDOW(main_widgets.window),
 			GTK_FILE_CHOOSER_ACTION_OPEN, NULL, NULL);
 	gtk_widget_set_name(ui_widgets.open_filesel, "GeanyDialog");
 
@@ -192,7 +192,7 @@
 	gtk_window_set_destroy_with_parent(GTK_WINDOW(ui_widgets.open_filesel), TRUE);
 	gtk_window_set_skip_taskbar_hint(GTK_WINDOW(ui_widgets.open_filesel), FALSE);
 	gtk_window_set_type_hint(GTK_WINDOW(ui_widgets.open_filesel), GDK_WINDOW_TYPE_HINT_DIALOG);
-	gtk_window_set_transient_for(GTK_WINDOW(ui_widgets.open_filesel), GTK_WINDOW(app->window));
+	gtk_window_set_transient_for(GTK_WINDOW(ui_widgets.open_filesel), GTK_WINDOW(main_widgets.window));
 	gtk_file_chooser_set_select_multiple(GTK_FILE_CHOOSER(ui_widgets.open_filesel), TRUE);
 
 	/* add checkboxes and filename entry */
@@ -283,7 +283,7 @@
 	GtkWidget *vbox, *table, *file_entry, *check_hidden;
 	GtkWidget *filetype_ebox, *filetype_label, *filetype_combo;
 	GtkWidget *encoding_ebox, *encoding_label, *encoding_combo;
-	GtkTooltips *tooltips = GTK_TOOLTIPS(lookup_widget(app->window, "tooltips"));
+	GtkTooltips *tooltips = GTK_TOOLTIPS(lookup_widget(main_widgets.window, "tooltips"));
 
 	vbox = gtk_vbox_new(FALSE, 6);
 
@@ -472,9 +472,9 @@
 static void create_save_file_dialog(void)
 {
 	GtkWidget *vbox, *check_open_new_tab, *rename_btn;
-	GtkTooltips *tooltips = GTK_TOOLTIPS(lookup_widget(app->window, "tooltips"));
+	GtkTooltips *tooltips = GTK_TOOLTIPS(lookup_widget(main_widgets.window, "tooltips"));
 
-	ui_widgets.save_filesel = gtk_file_chooser_dialog_new(_("Save File"), GTK_WINDOW(app->window),
+	ui_widgets.save_filesel = gtk_file_chooser_dialog_new(_("Save File"), GTK_WINDOW(main_widgets.window),
 				GTK_FILE_CHOOSER_ACTION_SAVE, NULL, NULL);
 	gtk_window_set_modal(GTK_WINDOW(ui_widgets.save_filesel), TRUE);
 	gtk_window_set_destroy_with_parent(GTK_WINDOW(ui_widgets.save_filesel), TRUE);
@@ -512,7 +512,7 @@
 	g_signal_connect((gpointer) ui_widgets.save_filesel, "response",
 		G_CALLBACK(on_file_save_dialog_response), NULL);
 
-	gtk_window_set_transient_for(GTK_WINDOW(ui_widgets.save_filesel), GTK_WINDOW(app->window));
+	gtk_window_set_transient_for(GTK_WINDOW(ui_widgets.save_filesel), GTK_WINDOW(main_widgets.window));
 }
 #endif
 
@@ -631,7 +631,7 @@
 #ifdef G_OS_WIN32
 	win32_message_dialog(NULL, type, string);
 #else
-	dialog = gtk_message_dialog_new(GTK_WINDOW(app->window), GTK_DIALOG_DESTROY_WITH_PARENT,
+	dialog = gtk_message_dialog_new(GTK_WINDOW(main_widgets.window), GTK_DIALOG_DESTROY_WITH_PARENT,
                                   type, GTK_BUTTONS_OK, "%s", string);
 	gtk_widget_set_name(dialog, "GeanyDialog");
 	gtk_dialog_run(GTK_DIALOG(dialog));
@@ -650,7 +650,7 @@
 	g_free(string);
 #else
 	GtkWidget *dialog;
-	dialog = gtk_message_dialog_new(GTK_WINDOW(app->window), GTK_DIALOG_DESTROY_WITH_PARENT,
+	dialog = gtk_message_dialog_new(GTK_WINDOW(main_widgets.window), GTK_DIALOG_DESTROY_WITH_PARENT,
                                   type, GTK_BUTTONS_OK, "%s", text);
 	gtk_widget_set_name(dialog, "GeanyDialog");
 	gtk_message_dialog_format_secondary_text(GTK_MESSAGE_DIALOG(dialog), "%s", secondary);
@@ -669,7 +669,7 @@
 	gint ret;
 
 	/* display the file tab to remind the user of the document */
-	gtk_notebook_set_current_page(GTK_NOTEBOOK(app->notebook),
+	gtk_notebook_set_current_page(GTK_NOTEBOOK(main_widgets.notebook),
 		document_get_notebook_page(idx));
 
 	if (doc_list[idx].file_name != NULL)
@@ -686,7 +686,7 @@
 	setptr(msg, g_strconcat(msg, "\n", msg2, NULL));
 	ret = win32_message_dialog_unsaved(msg);
 #else
-	dialog = gtk_message_dialog_new(GTK_WINDOW(app->window), GTK_DIALOG_DESTROY_WITH_PARENT,
+	dialog = gtk_message_dialog_new(GTK_WINDOW(main_widgets.window), GTK_DIALOG_DESTROY_WITH_PARENT,
                                   GTK_MESSAGE_QUESTION, GTK_BUTTONS_NONE, "%s", msg);
 	gtk_message_dialog_format_secondary_text(GTK_MESSAGE_DIALOG(dialog), "%s", msg2);
 	gtk_dialog_add_button(GTK_DIALOG(dialog), GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL);
@@ -789,7 +789,7 @@
 
 		gtk_font_selection_dialog_set_font_name(
 			GTK_FONT_SELECTION_DIALOG(ui_widgets.open_fontsel), interface_prefs.editor_font);
-		gtk_window_set_transient_for(GTK_WINDOW(ui_widgets.open_fontsel), GTK_WINDOW(app->window));
+		gtk_window_set_transient_for(GTK_WINDOW(ui_widgets.open_fontsel), GTK_WINDOW(main_widgets.window));
 	}
 	/* We make sure the dialog is visible. */
 	gtk_window_present(GTK_WINDOW(ui_widgets.open_fontsel));
@@ -890,7 +890,7 @@
 {
 	GtkWidget *dialog, *vbox;
 
-	dialog = gtk_dialog_new_with_buttons(title, GTK_WINDOW(app->window),
+	dialog = gtk_dialog_new_with_buttons(title, GTK_WINDOW(main_widgets.window),
 		GTK_DIALOG_DESTROY_WITH_PARENT, GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL,
 		GTK_STOCK_OK, GTK_RESPONSE_ACCEPT, NULL);
 	vbox = ui_dialog_vbox_new(GTK_DIALOG(dialog));
@@ -918,7 +918,7 @@
 {
 	GtkWidget *dialog, *label, *entry, *vbox;
 
-	dialog = gtk_dialog_new_with_buttons(_("Go to Line"), GTK_WINDOW(app->window),
+	dialog = gtk_dialog_new_with_buttons(_("Go to Line"), GTK_WINDOW(main_widgets.window),
 										GTK_DIALOG_DESTROY_WITH_PARENT,
 										GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL,
 										GTK_STOCK_OK, GTK_RESPONSE_ACCEPT, NULL);
@@ -1006,7 +1006,7 @@
 
 	base_name = g_path_get_basename(doc_list[idx].file_name);
 	title = g_strconcat(base_name, " ", _("Properties"), NULL);
-	dialog = gtk_dialog_new_with_buttons(title, GTK_WINDOW(app->window),
+	dialog = gtk_dialog_new_with_buttons(title, GTK_WINDOW(main_widgets.window),
 										 GTK_DIALOG_DESTROY_WITH_PARENT,
 										 GTK_STOCK_CLOSE, GTK_RESPONSE_CANCEL, NULL);
 	g_free(title);
@@ -1319,7 +1319,7 @@
 	GtkWidget *dialog;
 
 	if (parent == NULL)
-		parent = app->window;
+		parent = main_widgets.window;
 
 	dialog = gtk_message_dialog_new(GTK_WINDOW(parent),
 		GTK_DIALOG_DESTROY_WITH_PARENT, GTK_MESSAGE_QUESTION,
@@ -1362,14 +1362,14 @@
 	va_start(args, text);
 	g_vsnprintf(string, 511, text, args);
 	va_end(args);
-	ret = show_question(app->window, GTK_STOCK_YES, GTK_STOCK_NO, string, NULL);
+	ret = show_question(main_widgets.window, GTK_STOCK_YES, GTK_STOCK_NO, string, NULL);
 	g_free(string);
 	return ret;
 }
 
 
 /* extra_text can be NULL; otherwise it is displayed below main_text.
- * if parent is NULL, app->window will be used */
+ * if parent is NULL, main_widgets.window will be used */
 gboolean dialogs_show_question_full(GtkWidget *parent, const gchar *yes_btn, const gchar *no_btn,
 	const gchar *extra_text, const gchar *main_text, ...)
 {

Modified: trunk/src/document.c
===================================================================
--- trunk/src/document.c	2008-05-21 17:41:11 UTC (rev 2608)
+++ trunk/src/document.c	2008-05-22 14:41:28 UTC (rev 2609)
@@ -193,7 +193,7 @@
 {
 	if (! DOC_IDX_VALID(doc_idx)) return -1;
 
-	return gtk_notebook_page_num(GTK_NOTEBOOK(app->notebook),
+	return gtk_notebook_page_num(GTK_NOTEBOOK(main_widgets.notebook),
 		GTK_WIDGET(doc_list[doc_idx].sci));
 }
 
@@ -212,7 +212,7 @@
 	if (page_num >= doc_array->len) return -1;
 
 	sci = (ScintillaObject*)gtk_notebook_get_nth_page(
-				GTK_NOTEBOOK(app->notebook), page_num);
+				GTK_NOTEBOOK(main_widgets.notebook), page_num);
 
 	return document_find_by_sci(sci);
 }
@@ -226,14 +226,14 @@
  **/
 gint document_get_cur_idx()
 {
-	gint cur_page = gtk_notebook_get_current_page(GTK_NOTEBOOK(app->notebook));
+	gint cur_page = gtk_notebook_get_current_page(GTK_NOTEBOOK(main_widgets.notebook));
 
 	if (cur_page == -1)
 		return -1;
 	else
 	{
 		ScintillaObject *sci = (ScintillaObject*)
-			gtk_notebook_get_nth_page(GTK_NOTEBOOK(app->notebook), cur_page);
+			gtk_notebook_get_nth_page(GTK_NOTEBOOK(main_widgets.notebook), cur_page);
 
 		return document_find_by_sci(sci);
 	}
@@ -434,7 +434,7 @@
 	gint new_idx;
 	GeanyDocument *this;
 	gint tabnum;
-	gint cur_pages = gtk_notebook_get_n_pages(GTK_NOTEBOOK(app->notebook));
+	gint cur_pages = gtk_notebook_get_n_pages(GTK_NOTEBOOK(main_widgets.notebook));
 
 	if (cur_pages == 1)
 	{
@@ -524,10 +524,10 @@
 		doc_list[idx].tm_file = NULL;
 		doc_list[idx].scroll_percent = -1.0F;
 		document_undo_clear(idx);
-		if (gtk_notebook_get_n_pages(GTK_NOTEBOOK(app->notebook)) == 0)
+		if (gtk_notebook_get_n_pages(GTK_NOTEBOOK(main_widgets.notebook)) == 0)
 		{
 			treeviews_update_tag_list(-1, FALSE);
-			/*on_notebook1_switch_page(GTK_NOTEBOOK(app->notebook), NULL, 0, NULL);*/
+			/*on_notebook1_switch_page(GTK_NOTEBOOK(main_widgets.notebook), NULL, 0, NULL);*/
 			ui_set_window_title(-1);
 			ui_save_buttons_toggle(FALSE);
 			ui_document_buttons_update();
@@ -556,7 +556,7 @@
 /* Opens a new empty document only if there are no other documents open */
 gint document_new_file_if_non_open()
 {
-	if (gtk_notebook_get_n_pages(GTK_NOTEBOOK(app->notebook)) == 0)
+	if (gtk_notebook_get_n_pages(GTK_NOTEBOOK(main_widgets.notebook)) == 0)
 		return document_new_file(NULL, NULL, NULL);
 
 	return -1;
@@ -1020,8 +1020,8 @@
 		if (idx >= 0)
 		{
 			ui_add_recent_file(utf8_filename);	/* either add or reorder recent item */
-			gtk_notebook_set_current_page(GTK_NOTEBOOK(app->notebook),
-					gtk_notebook_page_num(GTK_NOTEBOOK(app->notebook),
+			gtk_notebook_set_current_page(GTK_NOTEBOOK(main_widgets.notebook),
+					gtk_notebook_page_num(GTK_NOTEBOOK(main_widgets.notebook),
 					(GtkWidget*) doc_list[idx].sci));
 			g_free(utf8_filename);
 			g_free(locale_filename);
@@ -1116,7 +1116,7 @@
 		ui_set_statusbar(TRUE, _("File %s reloaded."), utf8_filename);
 	else
 		msgwin_status_add(_("File %s opened(%d%s)."),
-				utf8_filename, gtk_notebook_get_n_pages(GTK_NOTEBOOK(app->notebook)),
+				utf8_filename, gtk_notebook_get_n_pages(GTK_NOTEBOOK(main_widgets.notebook)),
 				(readonly) ? _(", read-only") : "");
 
 	g_free(utf8_filename);
@@ -1285,9 +1285,9 @@
 		document_set_filetype(idx, ft);
 		if (document_get_cur_idx() == idx)
 		{
-			app->ignore_callback = TRUE;
+			ignore_callback = TRUE;
 			filetypes_select_radio_item(doc_list[idx].file_type);
-			app->ignore_callback = FALSE;
+			ignore_callback = FALSE;
 		}
 	}
 	utils_replace_filename(idx);
@@ -2135,7 +2135,7 @@
 	doc_list[idx].encoding = g_strdup(new_encoding);
 
 	ui_update_statusbar(idx, -1);
-	gtk_widget_set_sensitive(lookup_widget(app->window, "menu_write_unicode_bom1"),
+	gtk_widget_set_sensitive(lookup_widget(main_widgets.window, "menu_write_unicode_bom1"),
 			encodings_is_unicode_charset(doc_list[idx].encoding));
 }
 
@@ -2272,9 +2272,9 @@
 
 				document_set_encoding(idx, (const gchar*)action->data);
 
-				app->ignore_callback = TRUE;
+				ignore_callback = TRUE;
 				encodings_select_radio_item((const gchar*)action->data);
-				app->ignore_callback = FALSE;
+				ignore_callback = FALSE;
 
 				g_free(action->data);
 				break;
@@ -2341,9 +2341,9 @@
 
 				document_set_encoding(idx, (const gchar*)action->data);
 
-				app->ignore_callback = TRUE;
+				ignore_callback = TRUE;
 				encodings_select_radio_item((const gchar*)action->data);
-				app->ignore_callback = FALSE;
+				ignore_callback = FALSE;
 
 				g_free(action->data);
 				break;
@@ -2509,7 +2509,7 @@
 	gint p;
 	guint i, len = doc_array->len;
 
-	for (p = 0; p < gtk_notebook_get_n_pages(GTK_NOTEBOOK(app->notebook)); p++)
+	for (p = 0; p < gtk_notebook_get_n_pages(GTK_NOTEBOOK(main_widgets.notebook)); p++)
 	{
 		gint idx = document_get_n_idx(p);
 
@@ -2545,7 +2545,7 @@
 	}
 	main_status.closing_all = TRUE;
 
-	while (gtk_notebook_get_n_pages(GTK_NOTEBOOK(app->notebook)) > 0)
+	while (gtk_notebook_get_n_pages(GTK_NOTEBOOK(main_widgets.notebook)) > 0)
 	{
 		document_remove(0);
 	}

Modified: trunk/src/editor.c
===================================================================
--- trunk/src/editor.c	2008-05-21 17:41:11 UTC (rev 2608)
+++ trunk/src/editor.c	2008-05-22 14:41:28 UTC (rev 2609)
@@ -101,7 +101,7 @@
 		ui_update_popup_goto_items((current_word[0] != '\0') ? TRUE : FALSE);
 		ui_update_popup_copy_items(idx);
 		ui_update_insert_include_item(idx, 0);
-		gtk_menu_popup(GTK_MENU(app->popup_menu), NULL, NULL, NULL, NULL, event->button, event->time);
+		gtk_menu_popup(GTK_MENU(main_widgets.editor_menu), NULL, NULL, NULL, NULL, event->button, event->time);
 
 		return TRUE;
 	}
@@ -460,7 +460,7 @@
 
  		case SCN_MODIFIED:
 		{
-			if (nt->modificationType & SC_STARTACTION && ! app->ignore_callback)
+			if (nt->modificationType & SC_STARTACTION && ! ignore_callback)
 			{
 				/* get notified about undo changes */
 				document_undo_add(idx, UNDO_SCINTILLA, NULL);
@@ -3211,3 +3211,34 @@
 	/* remove indent spaces on backspace, if using spaces to indent */
 	SSM(doc->sci, SCI_SETBACKSPACEUNINDENTS, ! use_tabs, 0);
 }
+
+
+/* Move to position @a pos, switching to the document at @a idx if necessary,
+ * setting a marker if @a mark is set. */
+gboolean editor_goto_pos(gint idx, gint pos, gboolean mark)
+{
+	gint page_num;
+
+	if (! DOC_IDX_VALID(idx) || pos < 0)
+		return FALSE;
+
+	if (mark)
+	{
+		gint line = sci_get_line_from_position(doc_list[idx].sci, pos);
+
+		/* mark the tag with the yellow arrow */
+		sci_marker_delete_all(doc_list[idx].sci, 0);
+		sci_set_marker_at_line(doc_list[idx].sci, line, TRUE, 0);
+	}
+
+	sci_goto_pos(doc_list[idx].sci, pos, TRUE);
+	doc_list[idx].scroll_percent = 0.25F;
+
+	/* finally switch to the page */
+	page_num = gtk_notebook_page_num(GTK_NOTEBOOK(main_widgets.notebook), GTK_WIDGET(doc_list[idx].sci));
+	gtk_notebook_set_current_page(GTK_NOTEBOOK(main_widgets.notebook), page_num);
+
+	return TRUE;
+}
+
+

Modified: trunk/src/editor.h
===================================================================
--- trunk/src/editor.h	2008-05-21 17:41:11 UTC (rev 2608)
+++ trunk/src/editor.h	2008-05-22 14:41:28 UTC (rev 2609)
@@ -201,4 +201,6 @@
 
 void editor_set_line_wrapping(gint idx, gboolean wrap);
 
+gboolean editor_goto_pos(gint idx, gint pos, gboolean mark);
+
 #endif

Modified: trunk/src/encodings.c
===================================================================
--- trunk/src/encodings.c	2008-05-21 17:41:11 UTC (rev 2608)
+++ trunk/src/encodings.c	2008-05-22 14:41:28 UTC (rev 2609)
@@ -40,6 +40,7 @@
 #include "msgwindow.h"
 #include "encodings.h"
 #include "callbacks.h"
+#include "ui_utils.h"
 
 
 #ifdef HAVE_REGCOMP
@@ -239,7 +240,7 @@
 	}
 	if (i == GEANY_ENCODINGS_MAX) i = GEANY_ENCODING_UTF_8; /* fallback to UTF-8 */
 
-	/* app->ignore_callback has to be set by the caller */
+	/* ignore_callback has to be set by the caller */
 	gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(radio_items[i]), TRUE);
 }
 
@@ -329,8 +330,8 @@
 #endif
 
 	/* create encodings submenu in document menu */
-	menu[0] = lookup_widget(app->window, "set_encoding1_menu");
-	menu[1] = lookup_widget(app->window, "menu_reload_as1_menu");
+	menu[0] = lookup_widget(main_widgets.window, "set_encoding1_menu");
+	menu[1] = lookup_widget(main_widgets.window, "menu_reload_as1_menu");
 	cb_func[0] = G_CALLBACK(on_encoding_change);
 	cb_func[1] = G_CALLBACK(on_reload_as_activate);
 

Modified: trunk/src/filetypes.c
===================================================================
--- trunk/src/filetypes.c	2008-05-21 17:41:11 UTC (rev 2608)
+++ trunk/src/filetypes.c	2008-05-22 14:41:28 UTC (rev 2609)
@@ -443,7 +443,7 @@
 static void create_set_filetype_menu()
 {
 	filetype_id ft_id;
-	GtkWidget *filetype_menu = lookup_widget(app->window, "set_filetype1_menu");
+	GtkWidget *filetype_menu = lookup_widget(main_widgets.window, "set_filetype1_menu");
 	GtkWidget *sub_menu = filetype_menu;
 	GtkWidget *sub_menu_programming, *sub_menu_scripts, *sub_menu_markup, *sub_menu_misc;
 	GtkWidget *sub_item_programming, *sub_item_scripts, *sub_item_markup, *sub_item_misc;
@@ -700,8 +700,8 @@
 {
 	FullFileType *fft;
 
-	/* app->ignore_callback has to be set by the caller */
-	g_return_if_fail(app->ignore_callback);
+	/* ignore_callback has to be set by the caller */
+	g_return_if_fail(ignore_callback);
 
 	if (ft == NULL)
 		ft = filetypes[GEANY_FILETYPES_NONE];
@@ -716,7 +716,7 @@
                                         gpointer         user_data)
 {
 	gint idx = document_get_cur_idx();
-	if (app->ignore_callback || idx < 0 || ! doc_list[idx].is_valid) return;
+	if (ignore_callback || idx < 0 || ! doc_list[idx].is_valid) return;
 
 	document_set_filetype(idx, (GeanyFiletype*)user_data);
 }

Modified: trunk/src/geany.h
===================================================================
--- trunk/src/geany.h	2008-05-21 17:41:11 UTC (rev 2608)
+++ trunk/src/geany.h	2008-05-22 14:41:28 UTC (rev 2609)
@@ -59,8 +59,7 @@
 typedef struct _GeanyProject GeanyProject;
 
 
-/* Commonly used items.
- * Remember to increment abi_version in plugindata.h when changing items. */
+/* Important commonly-used items. */
 typedef struct GeanyApp
 {
 	gboolean			debug_mode;
@@ -69,22 +68,15 @@
 	gchar				*docdir;
 	const TMWorkspace	*tm_workspace;
 	GeanyProject		*project;			/* currently active project or NULL if none is open */
-	gboolean			ignore_callback;	/* should not be used in new code
-	                                           (use clicked instead of toggled signal) */
-
-	/* Important widgets */
-	GtkWidget			*window;
-	GtkWidget			*toolbar;
-	GtkWidget			*treeview_notebook;
-	GtkWidget			*notebook;
-	GtkWidget			*statusbar;			/* use ui_set_statusbar() to set */
-	GtkWidget			*popup_menu;
 }
 GeanyApp;
 
 extern GeanyApp *app;
 
 
+extern gboolean	ignore_callback;
+
+
 enum
 {
 	GEANY_IMAGE_SMALL_CROSS,

Modified: trunk/src/keybindings.c
===================================================================
--- trunk/src/keybindings.c	2008-05-21 17:41:11 UTC (rev 2608)
+++ trunk/src/keybindings.c	2008-05-22 14:41:28 UTC (rev 2609)
@@ -137,7 +137,7 @@
 
 /* Lookup a widget in the main window */
 #define LW(widget_name) \
-	lookup_widget(app->window, G_STRINGIFY(widget_name))
+	lookup_widget(main_widgets.window, G_STRINGIFY(widget_name))
 
 /* Expansion for group_id = FILE:
  * static KeyBinding FILE_keys[GEANY_KEYS_FILE_COUNT]; */
@@ -456,7 +456,7 @@
 
 	init_default_kb();
 
-	gtk_window_add_accel_group(GTK_WINDOW(app->window), kb_accel_group);
+	gtk_window_add_accel_group(GTK_WINDOW(main_widgets.window), kb_accel_group);
 }
 
 
@@ -542,7 +542,7 @@
 
 
 #define GEANY_ADD_POPUP_ACCEL(kb_id, wid) \
-	add_menu_accel(group, kb_id, accel_group, lookup_widget(app->popup_menu, G_STRINGIFY(wid)))
+	add_menu_accel(group, kb_id, accel_group, lookup_widget(main_widgets.editor_menu, G_STRINGIFY(wid)))
 
 /* set the menu item accelerator shortcuts (just for visibility, they are handled anyway) */
 static void add_popup_menu_accels(void)
@@ -583,7 +583,7 @@
 
 	/* the build menu items are set if the build menus are created */
 
-	gtk_window_add_accel_group(GTK_WINDOW(app->window), accel_group);
+	gtk_window_add_accel_group(GTK_WINDOW(main_widgets.window), accel_group);
 }
 
 
@@ -676,7 +676,7 @@
 	GString *text_keys;
 	gint height, response;
 
-	dialog = gtk_dialog_new_with_buttons(_("Keyboard Shortcuts"), GTK_WINDOW(app->window),
+	dialog = gtk_dialog_new_with_buttons(_("Keyboard Shortcuts"), GTK_WINDOW(main_widgets.window),
 				GTK_DIALOG_DESTROY_WITH_PARENT,
 				GTK_STOCK_EDIT, GTK_RESPONSE_APPLY,
 				GTK_STOCK_CLOSE, GTK_RESPONSE_CANCEL, NULL);
@@ -745,7 +745,7 @@
 	if (state & GDK_MOD1_MASK && keyval >= GDK_0 && keyval <= GDK_9)
 	{
 		gint page = keyval - GDK_0 - 1;
-		gint npages = gtk_notebook_get_n_pages(GTK_NOTEBOOK(app->notebook));
+		gint npages = gtk_notebook_get_n_pages(GTK_NOTEBOOK(main_widgets.notebook));
 
 		/* alt-0 is for the rightmost tab */
 		if (keyval == GDK_0)
@@ -754,7 +754,7 @@
 		if (swap_alt_tab_order && ! file_prefs.tab_order_ltr)
 			page = (npages - 1) - page;
 
-		gtk_notebook_set_current_page(GTK_NOTEBOOK(app->notebook), page);
+		gtk_notebook_set_current_page(GTK_NOTEBOOK(main_widgets.notebook), page);
 		return TRUE;
 	}
 	if (keyval == GDK_Page_Up || keyval == GDK_Page_Down)
@@ -763,10 +763,10 @@
 		if (state == (GDK_CONTROL_MASK | GDK_SHIFT_MASK))
 		{
 			if (keyval == GDK_Page_Up)
-				gtk_notebook_set_current_page(GTK_NOTEBOOK(app->notebook), 0);
+				gtk_notebook_set_current_page(GTK_NOTEBOOK(main_widgets.notebook), 0);
 			if (keyval == GDK_Page_Down)
-				gtk_notebook_set_current_page(GTK_NOTEBOOK(app->notebook),
-					gtk_notebook_get_n_pages(GTK_NOTEBOOK(app->notebook)) - 1);
+				gtk_notebook_set_current_page(GTK_NOTEBOOK(main_widgets.notebook),
+					gtk_notebook_get_n_pages(GTK_NOTEBOOK(main_widgets.notebook)) - 1);
 			return TRUE;
 		}
 	}
@@ -784,7 +784,7 @@
 	if (kb->key == keyval && kb->mods == state)
 	{
 		gint idx = document_get_cur_idx();
-		GtkWidget *focusw = gtk_window_get_focus(GTK_WINDOW(app->window));
+		GtkWidget *focusw = gtk_window_get_focus(GTK_WINDOW(main_widgets.window));
 
 		/* keybinding only valid when scintilla widget has focus */
 		if (DOC_IDX_VALID(idx) && focusw == GTK_WIDGET(doc_list[idx].sci))
@@ -815,7 +815,7 @@
 
 	if (! vc->enable_bash_keys)
 		return FALSE;
-	if (gtk_window_get_focus(GTK_WINDOW(app->window)) != vc->vte)
+	if (gtk_window_get_focus(GTK_WINDOW(main_widgets.window)) != vc->vte)
 		return FALSE;
 	/* prevent menubar flickering: */
 	if (state == GDK_SHIFT_MASK && (keyval >= GDK_a && keyval <= GDK_z))
@@ -836,10 +836,10 @@
 	 * from overriding the VTE bash shortcuts.
 	 * Ideally we would just somehow disable the menubar without redrawing it,
 	 * but maybe that's not possible. */
-	widget = lookup_widget(app->window, "menubar1");
+	widget = lookup_widget(main_widgets.window, "menubar1");
 	gtk_widget_set_sensitive(widget, FALSE);
 	g_idle_add(&set_sensitive, (gpointer) widget);
-	widget = app->popup_menu;
+	widget = main_widgets.editor_menu;
 	gtk_widget_set_sensitive(widget, FALSE);
 	g_idle_add(&set_sensitive, (gpointer) widget);
 	return TRUE;
@@ -1042,14 +1042,14 @@
 
 static void cb_func_menu_fullscreen(G_GNUC_UNUSED guint key_id)
 {
-	GtkCheckMenuItem *c = GTK_CHECK_MENU_ITEM(lookup_widget(app->window, "menu_fullscreen1"));
+	GtkCheckMenuItem *c = GTK_CHECK_MENU_ITEM(lookup_widget(main_widgets.window, "menu_fullscreen1"));
 
 	gtk_check_menu_item_set_active(c, ! gtk_check_menu_item_get_active(c));
 }
 
 static void cb_func_menu_messagewindow(G_GNUC_UNUSED guint key_id)
 {
-	GtkCheckMenuItem *c = GTK_CHECK_MENU_ITEM(lookup_widget(app->window, "menu_show_messages_window1"));
+	GtkCheckMenuItem *c = GTK_CHECK_MENU_ITEM(lookup_widget(main_widgets.window, "menu_show_messages_window1"));
 
 	gtk_check_menu_item_set_active(c, ! gtk_check_menu_item_get_active(c));
 }
@@ -1175,15 +1175,15 @@
 static void cb_func_switch_search_bar(G_GNUC_UNUSED guint key_id)
 {
 	if (toolbar_prefs.visible && toolbar_prefs.show_search)
-		gtk_widget_grab_focus(lookup_widget(app->window, "entry1"));
+		gtk_widget_grab_focus(lookup_widget(main_widgets.window, "entry1"));
 }
 
 static void cb_func_switch_sidebar(G_GNUC_UNUSED guint key_id)
 {
 	if (ui_prefs.sidebar_visible)
 	{
-		gint page_num = gtk_notebook_get_current_page(GTK_NOTEBOOK(app->treeview_notebook));
-		GtkWidget *page = gtk_notebook_get_nth_page(GTK_NOTEBOOK(app->treeview_notebook), page_num);
+		gint page_num = gtk_notebook_get_current_page(GTK_NOTEBOOK(main_widgets.sidebar_notebook));
+		GtkWidget *page = gtk_notebook_get_nth_page(GTK_NOTEBOOK(main_widgets.sidebar_notebook), page_num);
 
 		/* gtk_widget_grab_focus() won't work because of the scrolled window containers */
 		gtk_widget_child_focus(page, GTK_DIR_TAB_FORWARD);
@@ -1195,14 +1195,37 @@
 	msgwin_switch_tab(MSG_VTE, TRUE);
 }
 
+
+static void switch_document(gint direction)
+{
+	gint page_count = gtk_notebook_get_n_pages(GTK_NOTEBOOK(main_widgets.notebook));
+	gint cur_page = gtk_notebook_get_current_page(GTK_NOTEBOOK(main_widgets.notebook));
+
+	if (direction == LEFT)
+	{
+		if (cur_page > 0)
+			gtk_notebook_set_current_page(GTK_NOTEBOOK(main_widgets.notebook), cur_page - 1);
+		else
+			gtk_notebook_set_current_page(GTK_NOTEBOOK(main_widgets.notebook), page_count - 1);
+	}
+	else if (direction == RIGHT)
+	{
+		if (cur_page < page_count - 1)
+			gtk_notebook_set_current_page(GTK_NOTEBOOK(main_widgets.notebook), cur_page + 1);
+		else
+			gtk_notebook_set_current_page(GTK_NOTEBOOK(main_widgets.notebook), 0);
+	}
+}
+
+
 static void cb_func_switch_tableft(G_GNUC_UNUSED guint key_id)
 {
-	utils_switch_document(LEFT);
+	switch_document(LEFT);
 }
 
 static void cb_func_switch_tabright(G_GNUC_UNUSED guint key_id)
 {
-	utils_switch_document(RIGHT);
+	switch_document(RIGHT);
 }
 
 static void cb_func_switch_tablastused(G_GNUC_UNUSED guint key_id)
@@ -1210,7 +1233,7 @@
 	gint last_doc_idx = callbacks_data.last_doc_idx;
 
 	if (DOC_IDX_VALID(last_doc_idx))
-		gtk_notebook_set_current_page(GTK_NOTEBOOK(app->notebook),
+		gtk_notebook_set_current_page(GTK_NOTEBOOK(main_widgets.notebook),
 			document_get_notebook_page(last_doc_idx));
 }
 
@@ -1219,7 +1242,7 @@
 {
 	gint idx = document_get_cur_idx();
 	GtkWidget *sci = GTK_WIDGET(doc_list[idx].sci);
-	GtkNotebook *nb = GTK_NOTEBOOK(app->notebook);
+	GtkNotebook *nb = GTK_NOTEBOOK(main_widgets.notebook);
 	gint cur_page = gtk_notebook_get_current_page(nb);
 
 	if (! DOC_IDX_VALID(idx))
@@ -1397,7 +1420,7 @@
 static void cb_func_editor_action(guint key_id)
 {
 	gint idx = document_get_cur_idx();
-	GtkWidget *focusw = gtk_window_get_focus(GTK_WINDOW(app->window));
+	GtkWidget *focusw = gtk_window_get_focus(GTK_WINDOW(main_widgets.window));
 
 	/* edit keybindings only valid when scintilla widget has focus */
 	if (! DOC_IDX_VALID(idx) || focusw != GTK_WIDGET(doc_list[idx].sci)) return;
@@ -1439,7 +1462,7 @@
 			break;
 		case GEANY_KEYS_EDITOR_CONTEXTACTION:
 			if (check_current_word())
-				on_context_action1_activate(GTK_MENU_ITEM(lookup_widget(app->popup_menu,
+				on_context_action1_activate(GTK_MENU_ITEM(lookup_widget(main_widgets.editor_menu,
 					"context_action1")), NULL);
 			break;
 		case GEANY_KEYS_EDITOR_SUPPRESSSNIPPETCOMPLETION:
@@ -1468,7 +1491,7 @@
 static void cb_func_format_action(guint key_id)
 {
 	gint idx = document_get_cur_idx();
-	GtkWidget *focusw = gtk_window_get_focus(GTK_WINDOW(app->window));
+	GtkWidget *focusw = gtk_window_get_focus(GTK_WINDOW(main_widgets.window));
 
 	/* keybindings only valid when scintilla widget has focus */
 	if (! DOC_IDX_VALID(idx) || focusw != GTK_WIDGET(doc_list[idx].sci)) return;
@@ -1522,12 +1545,12 @@
 static void cb_func_select_action(guint key_id)
 {
 	gint idx = document_get_cur_idx();
-	GtkWidget *focusw = gtk_window_get_focus(GTK_WINDOW(app->window));
+	GtkWidget *focusw = gtk_window_get_focus(GTK_WINDOW(main_widgets.window));
 	static GtkWidget *scribble_widget = NULL;
 
 	/* special case for Select All in the scribble widget */
 	if (scribble_widget == NULL) /* lookup the scribble widget only once */
-		scribble_widget = lookup_widget(app->window, "textview_scribble");
+		scribble_widget = lookup_widget(main_widgets.window, "textview_scribble");
 	if (key_id == GEANY_KEYS_SELECT_ALL && focusw == scribble_widget)
 	{
 		g_signal_emit_by_name(scribble_widget, "select-all", TRUE);
@@ -1565,7 +1588,7 @@
 static void cb_func_insert_action(guint key_id)
 {
 	gint idx = document_get_cur_idx();
-	GtkWidget *focusw = gtk_window_get_focus(GTK_WINDOW(app->window));
+	GtkWidget *focusw = gtk_window_get_focus(GTK_WINDOW(main_widgets.window));
 
 	/* keybindings only valid when scintilla widget has focus */
 	if (! DOC_IDX_VALID(idx) || focusw != GTK_WIDGET(doc_list[idx].sci)) return;
@@ -1576,7 +1599,7 @@
 			editor_insert_alternative_whitespace(idx);
 			break;
 		case GEANY_KEYS_INSERT_DATE:
-			gtk_menu_item_activate(GTK_MENU_ITEM(lookup_widget(app->window, "insert_date_custom1")));
+			gtk_menu_item_activate(GTK_MENU_ITEM(lookup_widget(main_widgets.window, "insert_date_custom1")));
 			break;
 	}
 }

Modified: trunk/src/keyfile.c
===================================================================
--- trunk/src/keyfile.c	2008-05-21 17:41:11 UTC (rev 2608)
+++ trunk/src/keyfile.c	2008-05-22 14:41:28 UTC (rev 2609)
@@ -144,11 +144,11 @@
 	gchar entry[14];
 	guint i = 0, j = 0, max;
 
-	npage = gtk_notebook_get_current_page(GTK_NOTEBOOK(app->notebook));
+	npage = gtk_notebook_get_current_page(GTK_NOTEBOOK(main_widgets.notebook));
 	g_key_file_set_integer(config, "files", "current_page", npage);
 
 	/* store the filenames to reopen them the next time */
-	max = gtk_notebook_get_n_pages(GTK_NOTEBOOK(app->notebook));
+	max = gtk_notebook_get_n_pages(GTK_NOTEBOOK(main_widgets.notebook));
 	for (i = 0; i < max; i++)
 	{
 		idx = document_get_n_idx(i);
@@ -339,7 +339,7 @@
 		GtkTextBuffer *buffer;
 		GtkTextIter start, end;
 
-		buffer = gtk_text_view_get_buffer(GTK_TEXT_VIEW(lookup_widget(app->window, "textview_scribble")));
+		buffer = gtk_text_view_get_buffer(GTK_TEXT_VIEW(lookup_widget(main_widgets.window, "textview_scribble")));
 		gtk_text_buffer_get_bounds(buffer, &start, &end);
 		scribble_text = gtk_text_buffer_get_text(buffer, &start, &end, FALSE);
 		g_key_file_set_string(config, PACKAGE, "scribble_text", scribble_text);
@@ -349,16 +349,16 @@
 	if (prefs.save_winpos)
 	{
 		g_key_file_set_integer(config, PACKAGE, "treeview_position",
-				gtk_paned_get_position(GTK_PANED(lookup_widget(app->window, "hpaned1"))));
+				gtk_paned_get_position(GTK_PANED(lookup_widget(main_widgets.window, "hpaned1"))));
 		g_key_file_set_integer(config, PACKAGE, "msgwindow_position",
-				gtk_paned_get_position(GTK_PANED(lookup_widget(app->window, "vpaned1"))));
+				gtk_paned_get_position(GTK_PANED(lookup_widget(main_widgets.window, "vpaned1"))));
 	}
 
 	if (prefs.save_winpos)
 	{
-		gtk_window_get_position(GTK_WINDOW(app->window), &ui_prefs.geometry[0], &ui_prefs.geometry[1]);
-		gtk_window_get_size(GTK_WINDOW(app->window), &ui_prefs.geometry[2], &ui_prefs.geometry[3]);
-		if (gdk_window_get_state(app->window->window) & GDK_WINDOW_STATE_MAXIMIZED)
+		gtk_window_get_position(GTK_WINDOW(main_widgets.window), &ui_prefs.geometry[0], &ui_prefs.geometry[1]);
+		gtk_window_get_size(GTK_WINDOW(main_widgets.window), &ui_prefs.geometry[2], &ui_prefs.geometry[3]);
+		if (gdk_window_get_state(main_widgets.window->window) & GDK_WINDOW_STATE_MAXIMIZED)
 			ui_prefs.geometry[4] = 1;
 		else
 			ui_prefs.geometry[4] = 0;
@@ -913,7 +913,7 @@
 		main_status.opening_session_files = FALSE;
 		/** TODO if session_notebook_page is equal to the current notebook tab(the last opened)
 		 ** the notebook switch page callback isn't triggered and e.g. menu items are not updated */
-		gtk_notebook_set_current_page(GTK_NOTEBOOK(app->notebook), session_notebook_page);
+		gtk_notebook_set_current_page(GTK_NOTEBOOK(main_widgets.notebook), session_notebook_page);
 	}
 	main_status.opening_session_files = FALSE;
 }
@@ -926,7 +926,7 @@
 	if (scribble_text)
 	{	/* update the scribble widget, because now it's realized */
 		gtk_text_buffer_set_text(
-				gtk_text_view_get_buffer(GTK_TEXT_VIEW(lookup_widget(app->window, "textview_scribble"))),
+				gtk_text_view_get_buffer(GTK_TEXT_VIEW(lookup_widget(main_widgets.window, "textview_scribble"))),
 				scribble_text, -1);
 	}
 	g_free(scribble_text);
@@ -934,15 +934,15 @@
 	/* set the position of the hpaned and vpaned */
 	if (prefs.save_winpos)
 	{
-		gtk_paned_set_position(GTK_PANED(lookup_widget(app->window, "hpaned1")), hpan_position);
-		gtk_paned_set_position(GTK_PANED(lookup_widget(app->window, "vpaned1")), vpan_position);
+		gtk_paned_set_position(GTK_PANED(lookup_widget(main_widgets.window, "hpaned1")), hpan_position);
+		gtk_paned_set_position(GTK_PANED(lookup_widget(main_widgets.window, "vpaned1")), vpan_position);
 	}
 
 	/* set fullscreen after initial draw so that returning to normal view is the right size.
 	 * fullscreen mode is disabled by default, so act only if it is true */
 	if (ui_prefs.fullscreen)
 	{
-		gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(lookup_widget(app->window, "menu_fullscreen1")), TRUE);
+		gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(lookup_widget(main_widgets.window, "menu_fullscreen1")), TRUE);
 		ui_prefs.fullscreen = TRUE;
 		ui_set_fullscreen();
 	}

Modified: trunk/src/main.c
===================================================================
--- trunk/src/main.c	2008-05-21 17:41:11 UTC (rev 2608)
+++ trunk/src/main.c	2008-05-22 14:41:28 UTC (rev 2609)
@@ -83,7 +83,8 @@
 #endif
 
 
-GeanyApp *app;
+GeanyApp	*app;
+gboolean	ignore_callback;	/* hack workaround for GTK+ toggle button callback problem */
 
 GeanyStatus	 main_status;
 CommandLineOptions cl_options;	/* fields initialised in parse_command_line_options */
@@ -171,23 +172,23 @@
 	/* toolbar, message window and sidebar are by default visible, so don't change it if it is true */
 	if (! toolbar_prefs.visible)
 	{
-		app->ignore_callback = TRUE;
-		gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(lookup_widget(app->window, "menu_show_toolbar1")), FALSE);
-		gtk_widget_hide(app->toolbar);
-		app->ignore_callback = FALSE;
+		ignore_callback = TRUE;
+		gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(lookup_widget(main_widgets.window, "menu_show_toolbar1")), FALSE);
+		gtk_widget_hide(main_widgets.toolbar);
+		ignore_callback = FALSE;
 	}
 	if (! ui_prefs.msgwindow_visible)
 	{
-		app->ignore_callback = TRUE;
-		gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(lookup_widget(app->window, "menu_show_messages_window1")), FALSE);
-		gtk_widget_hide(lookup_widget(app->window, "scrolledwindow1"));
-		app->ignore_callback = FALSE;
+		ignore_callback = TRUE;
+		gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(lookup_widget(main_widgets.window, "menu_show_messages_window1")), FALSE);
+		gtk_widget_hide(lookup_widget(main_widgets.window, "scrolledwindow1"));
+		ignore_callback = FALSE;
 	}
 	if (! ui_prefs.sidebar_visible)
 	{
-		app->ignore_callback = TRUE;
-		gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(lookup_widget(app->window, "menu_show_sidebar1")), FALSE);
-		app->ignore_callback = FALSE;
+		ignore_callback = TRUE;
+		gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(lookup_widget(main_widgets.window, "menu_show_sidebar1")), FALSE);
+		ignore_callback = FALSE;
 	}
 	ui_sidebar_show_hide();
 	/* sets the icon style of the toolbar */
@@ -195,88 +196,88 @@
 	{
 		case GTK_TOOLBAR_BOTH:
 		{
-			/*gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(lookup_widget(app->window, "images_and_text1")), TRUE);*/
+			/*gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(lookup_widget(main_widgets.window, "images_and_text1")), TRUE);*/
 			gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(lookup_widget(ui_widgets.toolbar_menu, "images_and_text2")), TRUE);
 			break;
 		}
 		case GTK_TOOLBAR_ICONS:
 		{
-			/*gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(lookup_widget(app->window, "images_only1")), TRUE);*/
+			/*gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(lookup_widget(main_widgets.window, "images_only1")), TRUE);*/
 			gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(lookup_widget(ui_widgets.toolbar_menu, "images_only2")), TRUE);
 			break;
 		}
 		case GTK_TOOLBAR_TEXT:
 		{
-			/*gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(lookup_widget(app->window, "text_only1")), TRUE);*/
+			/*gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(lookup_widget(main_widgets.window, "text_only1")), TRUE);*/
 			gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(lookup_widget(ui_widgets.toolbar_menu, "text_only2")), TRUE);
 			break;
 		}
 	}
-	gtk_toolbar_set_style(GTK_TOOLBAR(app->toolbar), toolbar_prefs.icon_style);
+	gtk_toolbar_set_style(GTK_TOOLBAR(main_widgets.toolbar), toolbar_prefs.icon_style);
 
 	/* sets the icon size of the toolbar, use user preferences (.gtkrc) if not set */
 	if (toolbar_prefs.icon_size == GTK_ICON_SIZE_SMALL_TOOLBAR ||
 		toolbar_prefs.icon_size == GTK_ICON_SIZE_LARGE_TOOLBAR)
 	{
-		gtk_toolbar_set_icon_size(GTK_TOOLBAR(app->toolbar), toolbar_prefs.icon_size);
+		gtk_toolbar_set_icon_size(GTK_TOOLBAR(main_widgets.toolbar), toolbar_prefs.icon_size);
 	}
 	ui_update_toolbar_icons(toolbar_prefs.icon_size);
 
 	/* line number and markers margin are by default enabled */
 	if (! editor_prefs.show_markers_margin)
 	{
-		gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(lookup_widget(app->window, "menu_markers_margin1")), FALSE);
+		gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(lookup_widget(main_widgets.window, "menu_markers_margin1")), FALSE);
 		editor_prefs.show_markers_margin = FALSE;
 	}
 	if (! editor_prefs.show_linenumber_margin)
 	{
-		gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(lookup_widget(app->window, "menu_linenumber_margin1")), FALSE);
+		gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(lookup_widget(main_widgets.window, "menu_linenumber_margin1")), FALSE);
 		editor_prefs.show_linenumber_margin = FALSE;
 	}
 
 	/* interprets the saved window geometry */
 	if (prefs.save_winpos && ui_prefs.geometry[0] != -1)
 	{
-		gtk_window_move(GTK_WINDOW(app->window), ui_prefs.geometry[0], ui_prefs.geometry[1]);
-		gtk_window_set_default_size(GTK_WINDOW(app->window), ui_prefs.geometry[2], ui_prefs.geometry[3]);
+		gtk_window_move(GTK_WINDOW(main_widgets.window), ui_prefs.geometry[0], ui_prefs.geometry[1]);
+		gtk_window_set_default_size(GTK_WINDOW(main_widgets.window), ui_prefs.geometry[2], ui_prefs.geometry[3]);
 		if (ui_prefs.geometry[4] == 1)
-			gtk_window_maximize(GTK_WINDOW(app->window));
+			gtk_window_maximize(GTK_WINDOW(main_widgets.window));
 	}
 
 	/* hide statusbar if desired */
 	if (! interface_prefs.statusbar_visible)
 	{
-		gtk_widget_hide(app->statusbar);
+		gtk_widget_hide(ui_widgets.statusbar);
 	}
 
-	app->ignore_callback = TRUE;
+	ignore_callback = TRUE;
 	gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(
-				lookup_widget(app->window, "menu_line_wrapping1")), editor_prefs.line_wrapping);
+				lookup_widget(main_widgets.window, "menu_line_wrapping1")), editor_prefs.line_wrapping);
 	gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(
-				lookup_widget(app->window, "menu_use_auto_indentation1")),
+				lookup_widget(main_widgets.window, "menu_use_auto_indentation1")),
 				(editor_prefs.indent_mode != INDENT_NONE));
-	app->ignore_callback = FALSE;
+	ignore_callback = FALSE;
 
 	/* connect the toolbar dropdown menu for the new button */
 	gtk_menu_tool_button_set_menu(GTK_MENU_TOOL_BUTTON(
-			lookup_widget(app->window, "menutoolbutton1")), ui_widgets.new_file_menu);
+			lookup_widget(main_widgets.window, "menutoolbutton1")), ui_widgets.new_file_menu);
 
 	/* set the tab placements of the notebooks */
-	gtk_notebook_set_tab_pos(GTK_NOTEBOOK(app->notebook), interface_prefs.tab_pos_editor);
+	gtk_notebook_set_tab_pos(GTK_NOTEBOOK(main_widgets.notebook), interface_prefs.tab_pos_editor);
 	gtk_notebook_set_tab_pos(GTK_NOTEBOOK(msgwindow.notebook), interface_prefs.tab_pos_msgwin);
-	gtk_notebook_set_tab_pos(GTK_NOTEBOOK(app->treeview_notebook), interface_prefs.tab_pos_sidebar);
+	gtk_notebook_set_tab_pos(GTK_NOTEBOOK(main_widgets.sidebar_notebook), interface_prefs.tab_pos_sidebar);
 
 	ui_update_toolbar_items();
 
 	/* whether to show notebook tabs or not */
-	gtk_notebook_set_show_tabs(GTK_NOTEBOOK(app->notebook), interface_prefs.show_notebook_tabs);
+	gtk_notebook_set_show_tabs(GTK_NOTEBOOK(main_widgets.notebook), interface_prefs.show_notebook_tabs);
 }
 
 
 static void main_init(void)
 {
 	/* inits */
-	app->window				= NULL;
+	main_widgets.window				= NULL;
 	app->project			= NULL;
 	ui_widgets.open_fontsel		= NULL;
 	ui_widgets.open_colorsel	= NULL;
@@ -287,55 +288,57 @@
 	main_status.main_window_realized= FALSE;
 	file_prefs.tab_order_ltr		= FALSE;
 	main_status.quitting			= FALSE;
-	app->ignore_callback	= FALSE;
+	ignore_callback	= FALSE;
 	app->tm_workspace		= tm_get_workspace();
 	ui_prefs.recent_queue				= g_queue_new();
 	main_status.opening_session_files		= FALSE;
 
-	app->window = create_window1();
+	main_widgets.window = create_window1();
 	ui_widgets.new_file_menu = gtk_menu_new();
 	ui_widgets.recent_files_toolbar = gtk_menu_new();
-	ui_widgets.recent_files_menuitem = lookup_widget(app->window, "recent_files1");
+	ui_widgets.recent_files_menuitem = lookup_widget(main_widgets.window, "recent_files1");
 	ui_widgets.recent_files_menubar = gtk_menu_new();
 	gtk_menu_item_set_submenu(GTK_MENU_ITEM(ui_widgets.recent_files_menuitem),
 							ui_widgets.recent_files_menubar);
 
 	/* store important pointers for later reference */
-	app->toolbar = lookup_widget(app->window, "toolbar1");
-	app->treeview_notebook = lookup_widget(app->window, "notebook3");
-	app->notebook = lookup_widget(app->window, "notebook1");
-	app->statusbar = lookup_widget(app->window, "statusbar");
-	app->popup_menu = create_edit_menu1();
+	main_widgets.toolbar = lookup_widget(main_widgets.window, "toolbar1");
+	main_widgets.sidebar_notebook = lookup_widget(main_widgets.window, "notebook3");
+	main_widgets.notebook = lookup_widget(main_widgets.window, "notebook1");
+	main_widgets.editor_menu = create_edit_menu1();
+	main_widgets.tools_menu = lookup_widget(main_widgets.window, "tools1_menu");
+
+	ui_widgets.statusbar = lookup_widget(main_widgets.window, "statusbar");
 	ui_widgets.toolbar_menu = create_toolbar_popup_menu1();
-	ui_widgets.print_page_setup = lookup_widget(app->window, "page_setup1");
-	ui_widgets.popup_goto_items[0] = lookup_widget(app->popup_menu, "goto_tag_definition1");
-	ui_widgets.popup_goto_items[1] = lookup_widget(app->popup_menu, "goto_tag_declaration1");
-	ui_widgets.popup_goto_items[2] = lookup_widget(app->popup_menu, "find_usage1");
-	ui_widgets.popup_copy_items[0] = lookup_widget(app->popup_menu, "cut1");
-	ui_widgets.popup_copy_items[1] = lookup_widget(app->popup_menu, "copy1");
-	ui_widgets.popup_copy_items[2] = lookup_widget(app->popup_menu, "delete1");
-	ui_widgets.menu_copy_items[0] = lookup_widget(app->window, "menu_cut1");
-	ui_widgets.menu_copy_items[1] = lookup_widget(app->window, "menu_copy1");
-	ui_widgets.menu_copy_items[2] = lookup_widget(app->window, "menu_delete1");
-	ui_widgets.menu_insert_include_items[0] = lookup_widget(app->popup_menu, "insert_include1");
-	ui_widgets.menu_insert_include_items[1] = lookup_widget(app->window, "insert_include2");
-	ui_widgets.save_buttons[0] = lookup_widget(app->window, "menu_save1");
-	ui_widgets.save_buttons[1] = lookup_widget(app->window, "toolbutton10");
-	ui_widgets.save_buttons[2] = lookup_widget(app->window, "menu_save_all1");
-	ui_widgets.save_buttons[3] = lookup_widget(app->window, "toolbutton22");
-	ui_widgets.redo_items[0] = lookup_widget(app->popup_menu, "redo1");
-	ui_widgets.redo_items[1] = lookup_widget(app->window, "menu_redo2");
-	ui_widgets.redo_items[2] = lookup_widget(app->window, "toolbutton_redo");
-	ui_widgets.undo_items[0] = lookup_widget(app->popup_menu, "undo1");
-	ui_widgets.undo_items[1] = lookup_widget(app->window, "menu_undo2");
-	ui_widgets.undo_items[2] = lookup_widget(app->window, "toolbutton_undo");
+	ui_widgets.print_page_setup = lookup_widget(main_widgets.window, "page_setup1");
+	ui_widgets.popup_goto_items[0] = lookup_widget(main_widgets.editor_menu, "goto_tag_definition1");
+	ui_widgets.popup_goto_items[1] = lookup_widget(main_widgets.editor_menu, "goto_tag_declaration1");
+	ui_widgets.popup_goto_items[2] = lookup_widget(main_widgets.editor_menu, "find_usage1");
+	ui_widgets.popup_copy_items[0] = lookup_widget(main_widgets.editor_menu, "cut1");
+	ui_widgets.popup_copy_items[1] = lookup_widget(main_widgets.editor_menu, "copy1");
+	ui_widgets.popup_copy_items[2] = lookup_widget(main_widgets.editor_menu, "delete1");
+	ui_widgets.menu_copy_items[0] = lookup_widget(main_widgets.window, "menu_cut1");
+	ui_widgets.menu_copy_items[1] = lookup_widget(main_widgets.window, "menu_copy1");
+	ui_widgets.menu_copy_items[2] = lookup_widget(main_widgets.window, "menu_delete1");
+	ui_widgets.menu_insert_include_items[0] = lookup_widget(main_widgets.editor_menu, "insert_include1");
+	ui_widgets.menu_insert_include_items[1] = lookup_widget(main_widgets.window, "insert_include2");
+	ui_widgets.save_buttons[0] = lookup_widget(main_widgets.window, "menu_save1");
+	ui_widgets.save_buttons[1] = lookup_widget(main_widgets.window, "toolbutton10");
+	ui_widgets.save_buttons[2] = lookup_widget(main_widgets.window, "menu_save_all1");
+	ui_widgets.save_buttons[3] = lookup_widget(main_widgets.window, "toolbutton22");
+	ui_widgets.redo_items[0] = lookup_widget(main_widgets.editor_menu, "redo1");
+	ui_widgets.redo_items[1] = lookup_widget(main_widgets.window, "menu_redo2");
+	ui_widgets.redo_items[2] = lookup_widget(main_widgets.window, "toolbutton_redo");
+	ui_widgets.undo_items[0] = lookup_widget(main_widgets.editor_menu, "undo1");
+	ui_widgets.undo_items[1] = lookup_widget(main_widgets.window, "menu_undo2");
+	ui_widgets.undo_items[2] = lookup_widget(main_widgets.window, "toolbutton_undo");
 
 	ui_init();
 
 	/* set widget names for matching with .gtkrc-2.0 */
-	gtk_widget_set_name(app->window, "GeanyMainWindow");
+	gtk_widget_set_name(main_widgets.window, "GeanyMainWindow");
 	gtk_widget_set_name(ui_widgets.toolbar_menu, "GeanyToolbarMenu");
-	gtk_widget_set_name(app->popup_menu, "GeanyEditMenu");
+	gtk_widget_set_name(main_widgets.editor_menu, "GeanyEditMenu");
 
 #if ! GTK_CHECK_VERSION(2, 10, 0)
 	/* hide Page setup menu item, it isn't supported with non-GTK printing */
@@ -814,8 +817,8 @@
 
 	/* inits */
 	main_init();
-	gtk_widget_set_size_request(app->window, GEANY_WINDOW_MINIMAL_WIDTH, GEANY_WINDOW_MINIMAL_HEIGHT);
-	gtk_window_set_default_size(GTK_WINDOW(app->window), GEANY_WINDOW_DEFAULT_WIDTH, GEANY_WINDOW_DEFAULT_HEIGHT);
+	gtk_widget_set_size_request(main_widgets.window, GEANY_WINDOW_MINIMAL_WIDTH, GEANY_WINDOW_MINIMAL_HEIGHT);
+	gtk_window_set_default_size(GTK_WINDOW(main_widgets.window), GEANY_WINDOW_DEFAULT_WIDTH, GEANY_WINDOW_DEFAULT_HEIGHT);
 	encodings_init();
 
 	load_settings();
@@ -841,19 +844,19 @@
 		GdkPixbuf *pb;
 
 		pb = ui_new_pixbuf_from_inline(GEANY_IMAGE_LOGO, FALSE);
-		gtk_window_set_icon(GTK_WINDOW(app->window), pb);
+		gtk_window_set_icon(GTK_WINDOW(main_widgets.window), pb);
 		g_object_unref(pb);	/* free our reference */
 	}
 
 	/* registering some basic events */
-	g_signal_connect(G_OBJECT(app->window), "delete_event", G_CALLBACK(on_exit_clicked), NULL);
-	g_signal_connect(G_OBJECT(app->window), "key-press-event", G_CALLBACK(keybindings_got_event), NULL);
-	g_signal_connect(G_OBJECT(app->toolbar), "button-press-event", G_CALLBACK(toolbar_popup_menu), NULL);
-	g_signal_connect(G_OBJECT(lookup_widget(app->window, "textview_scribble")),
+	g_signal_connect(G_OBJECT(main_widgets.window), "delete_event", G_CALLBACK(on_exit_clicked), NULL);
+	g_signal_connect(G_OBJECT(main_widgets.window), "key-press-event", G_CALLBACK(keybindings_got_event), NULL);
+	g_signal_connect(G_OBJECT(main_widgets.toolbar), "button-press-event", G_CALLBACK(toolbar_popup_menu), NULL);
+	g_signal_connect(G_OBJECT(lookup_widget(main_widgets.window, "textview_scribble")),
 							"motion-notify-event", G_CALLBACK(on_motion_event), NULL);
-	g_signal_connect(G_OBJECT(lookup_widget(app->window, "entry1")),
+	g_signal_connect(G_OBJECT(lookup_widget(main_widgets.window, "entry1")),
 							"motion-notify-event", G_CALLBACK(on_motion_event), NULL);
-	g_signal_connect(G_OBJECT(lookup_widget(app->window, "entry_goto_line")),
+	g_signal_connect(G_OBJECT(lookup_widget(main_widgets.window, "entry_goto_line")),
 							"motion-notify-event", G_CALLBACK(on_motion_event), NULL);
 
 #ifdef HAVE_VTE
@@ -894,7 +897,7 @@
 			/* load session files into tabs, as they are found in the session_files variable */
 			configuration_open_files();
 
-			if (gtk_notebook_get_n_pages(GTK_NOTEBOOK(app->notebook)) == 0)
+			if (gtk_notebook_get_n_pages(GTK_NOTEBOOK(main_widgets.notebook)) == 0)
 			{
 				ui_update_popup_copy_items(-1);
 				ui_update_popup_reundo_items(-1);
@@ -916,7 +919,7 @@
 	treeviews_update_tag_list(idx, FALSE);
 
 	/* finally realize the window to show the user what we have done */
-	gtk_widget_show(app->window);
+	gtk_widget_show(main_widgets.window);
 	main_status.main_window_realized = TRUE;
 
 	configuration_apply_settings();
@@ -927,7 +930,7 @@
 	{
 		socket_info.read_ioc = g_io_channel_unix_new(socket_info.lock_socket);
 		socket_info.lock_socket_tag = g_io_add_watch(socket_info.read_ioc,
-						G_IO_IN|G_IO_PRI|G_IO_ERR, socket_lock_input_cb, app->window);
+						G_IO_IN|G_IO_PRI|G_IO_ERR, socket_lock_input_cb, main_widgets.window);
 	}
 #endif
 
@@ -1008,11 +1011,11 @@
 	g_free(vte_info.lib_vte);
 	g_free(vte_info.dir);
 #endif
-	gtk_widget_destroy(app->window);
+	gtk_widget_destroy(main_widgets.window);
 
 	/* destroy popup menus */
-	if (app->popup_menu && GTK_IS_WIDGET(app->popup_menu))
-					gtk_widget_destroy(app->popup_menu);
+	if (main_widgets.editor_menu && GTK_IS_WIDGET(main_widgets.editor_menu))
+					gtk_widget_destroy(main_widgets.editor_menu);
 	if (ui_widgets.toolbar_menu && GTK_IS_WIDGET(ui_widgets.toolbar_menu))
 					gtk_widget_destroy(ui_widgets.toolbar_menu);
 	if (tv.popup_taglist && GTK_IS_WIDGET(tv.popup_taglist))

Modified: trunk/src/msgwindow.c
===================================================================
--- trunk/src/msgwindow.c	2008-05-21 17:41:11 UTC (rev 2608)
+++ trunk/src/msgwindow.c	2008-05-22 14:41:28 UTC (rev 2609)
@@ -75,13 +75,13 @@
 
 void msgwin_init()
 {
-	msgwindow.notebook = lookup_widget(app->window, "notebook_info");
-	msgwindow.tree_status = lookup_widget(app->window, "treeview3");
-	msgwindow.tree_msg = lookup_widget(app->window, "treeview4");
-	msgwindow.tree_compiler = lookup_widget(app->window, "treeview5");
+	msgwindow.notebook = lookup_widget(main_widgets.window, "notebook_info");
+	msgwindow.tree_status = lookup_widget(main_widgets.window, "treeview3");
+	msgwindow.tree_msg = lookup_widget(main_widgets.window, "treeview4");
+	msgwindow.tree_compiler = lookup_widget(main_widgets.window, "treeview5");
 	msgwindow.find_in_files_dir = NULL;
 
-	gtk_widget_set_sensitive(lookup_widget(app->window, "next_message1"), FALSE);
+	gtk_widget_set_sensitive(lookup_widget(main_widgets.window, "next_message1"), FALSE);
 
 	prepare_status_tree_view();
 	prepare_msg_tree_view();
@@ -90,7 +90,7 @@
 	msgwindow.popup_msg_menu = create_message_popup_menu(MSG_MESSAGE);
 	msgwindow.popup_compiler_menu = create_message_popup_menu(MSG_COMPILER);
 
-	g_signal_connect(G_OBJECT(lookup_widget(app->window, "textview_scribble")),
+	g_signal_connect(G_OBJECT(lookup_widget(main_widgets.window, "textview_scribble")),
 		"populate-popup", G_CALLBACK(on_scribble_populate), NULL);
 }
 
@@ -258,12 +258,12 @@
 void msgwin_show_hide(gboolean show)
 {
 	ui_prefs.msgwindow_visible = show;
-	app->ignore_callback = TRUE;
+	ignore_callback = TRUE;
 	gtk_check_menu_item_set_active(
-		GTK_CHECK_MENU_ITEM(lookup_widget(app->window, "menu_show_messages_window1")),
+		GTK_CHECK_MENU_ITEM(lookup_widget(main_widgets.window, "menu_show_messages_window1")),
 		show);
-	app->ignore_callback = FALSE;
-	ui_widget_show_hide(lookup_widget(app->window, "scrolledwindow1"), show);
+	ignore_callback = FALSE;
+	ui_widget_show_hide(lookup_widget(main_widgets.window, "scrolledwindow1"), show);
 }
 
 
@@ -311,7 +311,7 @@
 	gtk_list_store_append(msgwindow.store_msg, &iter);
 	gtk_list_store_set(msgwindow.store_msg, &iter, 0, line, 1, idx, 2, color, 3, tmp, -1);
 
-	gtk_widget_set_sensitive(lookup_widget(app->window, "next_message1"), TRUE);
+	gtk_widget_set_sensitive(lookup_widget(main_widgets.window, "next_message1"), TRUE);
 
 	g_free(tmp);
 }
@@ -919,7 +919,7 @@
 
 	switch (tabnum)
 	{
-		case MSG_SCRATCH: widget = lookup_widget(app->window, "textview_scribble"); break;
+		case MSG_SCRATCH: widget = lookup_widget(main_widgets.window, "textview_scribble"); break;
 #ifdef HAVE_VTE
 		case MSG_VTE: widget = (vte_info.have_vte) ? vc->vte : NULL; break;
 #endif
@@ -948,7 +948,7 @@
 	switch (tabnum)
 	{
 		case MSG_MESSAGE:
-			gtk_widget_set_sensitive(lookup_widget(app->window, "next_message1"), FALSE);
+			gtk_widget_set_sensitive(lookup_widget(main_widgets.window, "next_message1"), FALSE);
 			store = msgwindow.store_msg;
 			break;
 

Modified: trunk/src/navqueue.c
===================================================================
--- trunk/src/navqueue.c	2008-05-21 17:41:11 UTC (rev 2608)
+++ trunk/src/navqueue.c	2008-05-22 14:41:28 UTC (rev 2609)
@@ -33,6 +33,8 @@
 #include "document.h"
 #include "utils.h"
 #include "support.h"
+#include "ui_utils.h"
+#include "editor.h"
 
 
 /* for the navigation history queue */
@@ -54,8 +56,8 @@
 	navigation_queue = g_queue_new();
 	nav_queue_pos = 0;
 
-	navigation_buttons[0] = lookup_widget(app->window, "toolbutton_back");
-	navigation_buttons[1] = lookup_widget(app->window, "toolbutton_forward");
+	navigation_buttons[0] = lookup_widget(main_widgets.window, "toolbutton_back");
+	navigation_buttons[1] = lookup_widget(main_widgets.window, "toolbutton_forward");
 }
 
 
@@ -165,10 +167,20 @@
 		add_new_position(doc_list[new_idx].file_name, pos);
 	}
 
-	return utils_goto_pos(new_idx, pos);
+	return editor_goto_pos(new_idx, pos, TRUE);
 }
 
 
+static gboolean goto_file_pos(const gchar *file, gboolean is_tm_filename, gint pos)
+{
+	gint file_idx = document_find_by_filename(file, is_tm_filename);
+
+	if (file_idx < 0) return FALSE;
+
+	return editor_goto_pos(file_idx, pos, TRUE);
+}
+
+
 void navqueue_go_back()
 {
 	filepos *fprev;
@@ -180,7 +192,7 @@
 
 	/* jump back */
 	fprev = g_queue_peek_nth(navigation_queue, nav_queue_pos + 1);
-	if (utils_goto_file_pos(fprev->file, FALSE, fprev->pos))
+	if (goto_file_pos(fprev->file, FALSE, fprev->pos))
 	{
 		nav_queue_pos++;
 	}
@@ -203,7 +215,7 @@
 
 	/* jump forward */
 	fnext = g_queue_peek_nth(navigation_queue, nav_queue_pos - 1);
-	if (utils_goto_file_pos(fnext->file, FALSE, fnext->pos))
+	if (goto_file_pos(fnext->file, FALSE, fnext->pos))
 	{
 		nav_queue_pos--;
 	}

Modified: trunk/src/notebook.c
===================================================================
--- trunk/src/notebook.c	2008-05-21 17:41:11 UTC (rev 2608)
+++ trunk/src/notebook.c	2008-05-22 14:41:28 UTC (rev 2609)
@@ -89,10 +89,10 @@
 void notebook_init()
 {
 	/* focus the current document after clicking on a tab */
-	g_signal_connect_after(G_OBJECT(app->notebook), "button-release-event",
+	g_signal_connect_after(G_OBJECT(main_widgets.notebook), "button-release-event",
 		G_CALLBACK(focus_sci), NULL);
 
-	g_signal_connect(G_OBJECT(app->notebook), "drag-data-received",
+	g_signal_connect(G_OBJECT(main_widgets.notebook), "drag-data-received",
 		G_CALLBACK(on_window_drag_data_received), NULL);
 
 	setup_tab_dnd();
@@ -101,7 +101,7 @@
 
 static void setup_tab_dnd()
 {
-	GtkWidget *notebook = app->notebook;
+	GtkWidget *notebook = main_widgets.notebook;
 
 	/* Due to a segfault with manual tab DnD setup on GTK 2.10, we must
 	*  use the built in gtk_notebook_set_tab_reorderable from GTK 2.10.
@@ -157,8 +157,8 @@
 	gpointer user_data)
 {
 	static gboolean drag_enabled = TRUE; /* stores current state */
-	GtkWidget *page = gtk_notebook_get_nth_page(GTK_NOTEBOOK(app->notebook),
-			gtk_notebook_get_current_page(GTK_NOTEBOOK(app->notebook)));
+	GtkWidget *page = gtk_notebook_get_nth_page(GTK_NOTEBOOK(main_widgets.notebook),
+			gtk_notebook_get_current_page(GTK_NOTEBOOK(main_widgets.notebook)));
 
 	if (page == NULL || event->x < 0 || event->y < 0) return FALSE;
 
@@ -278,14 +278,14 @@
 }
 
 
-/* call this after the number of tabs in app->notebook changes. */
+/* call this after the number of tabs in main_widgets.notebook changes. */
 static void tab_count_changed(void)
 {
-	switch (gtk_notebook_get_n_pages(GTK_NOTEBOOK(app->notebook)))
+	switch (gtk_notebook_get_n_pages(GTK_NOTEBOOK(main_widgets.notebook)))
 	{
 		case 0:
 		/* Enables DnD for dropping files into the empty notebook widget */
-		gtk_drag_dest_set(app->notebook, GTK_DEST_DEFAULT_ALL,
+		gtk_drag_dest_set(main_widgets.notebook, GTK_DEST_DEFAULT_ALL,
 			files_drop_targets,	G_N_ELEMENTS(files_drop_targets),
 			GDK_ACTION_COPY | GDK_ACTION_MOVE | GDK_ACTION_LINK | GDK_ACTION_ASK);
 		break;
@@ -294,7 +294,7 @@
 		/* Disables DnD for dropping files into the notebook widget and enables the DnD for moving file
 		 * tabs. Files can still be dropped into the notebook widget because it will be handled by the
 		 * active Scintilla Widget (only dropping to the tab bar is not possible but it should be ok) */
-		gtk_drag_dest_set(app->notebook, GTK_DEST_DEFAULT_MOTION | GTK_DEST_DEFAULT_DROP,
+		gtk_drag_dest_set(main_widgets.notebook, GTK_DEST_DEFAULT_MOTION | GTK_DEST_DEFAULT_DROP,
 			drag_targets, G_N_ELEMENTS(drag_targets), GDK_ACTION_MOVE);
 		break;
 	}
@@ -307,7 +307,7 @@
 		on_menu_toggle_all_additional_widgets1_activate(NULL, NULL);
 	/* close tab on middle click */
 	if (event->button == 2)
-		document_remove(gtk_notebook_page_num(GTK_NOTEBOOK(app->notebook), GTK_WIDGET(user_data)));
+		document_remove(gtk_notebook_page_num(GTK_NOTEBOOK(main_widgets.notebook), GTK_WIDGET(user_data)));
 
 	return FALSE;
 }
@@ -376,10 +376,10 @@
 	gtk_misc_set_alignment(GTK_MISC(this->tabmenu_label), 0.0, 0);
 
 	if (file_prefs.tab_order_ltr)
-		tabnum = gtk_notebook_append_page_menu(GTK_NOTEBOOK(app->notebook), page,
+		tabnum = gtk_notebook_append_page_menu(GTK_NOTEBOOK(main_widgets.notebook), page,
 			hbox, this->tabmenu_label);
 	else
-		tabnum = gtk_notebook_insert_page_menu(GTK_NOTEBOOK(app->notebook), page,
+		tabnum = gtk_notebook_insert_page_menu(GTK_NOTEBOOK(main_widgets.notebook), page,
 			hbox, this->tabmenu_label, 0);
 
 	tab_count_changed();
@@ -388,7 +388,7 @@
 #if GTK_CHECK_VERSION(2, 10, 0)
 	if (gtk_check_version(2, 10, 0) == NULL) /* null means version ok */
 	{
-		gtk_notebook_set_tab_reorderable(GTK_NOTEBOOK(app->notebook), page, TRUE);
+		gtk_notebook_set_tab_reorderable(GTK_NOTEBOOK(main_widgets.notebook), page, TRUE);
 	}
 #endif
 	g_free(title);
@@ -399,7 +399,7 @@
 static void
 notebook_tab_close_clicked_cb(GtkButton *button, gpointer user_data)
 {
-	gint cur_page = gtk_notebook_page_num(GTK_NOTEBOOK(app->notebook),
+	gint cur_page = gtk_notebook_page_num(GTK_NOTEBOOK(main_widgets.notebook),
 		GTK_WIDGET(user_data));
 	document_remove(cur_page);
 }
@@ -408,16 +408,16 @@
 /* Always use this instead of gtk_notebook_remove_page(). */
 void notebook_remove_page(gint page_num)
 {
-	gint curpage = gtk_notebook_get_current_page(GTK_NOTEBOOK(app->notebook));
+	gint curpage = gtk_notebook_get_current_page(GTK_NOTEBOOK(main_widgets.notebook));
 
 	/* Focus the next page, not the previous */
 	if (curpage == page_num && file_prefs.tab_order_ltr)
 	{
-		gtk_notebook_set_current_page(GTK_NOTEBOOK(app->notebook), curpage + 1);
+		gtk_notebook_set_current_page(GTK_NOTEBOOK(main_widgets.notebook), curpage + 1);
 	}
 
 	/* now remove the page (so we don't temporarily switch to the previous page) */
-	gtk_notebook_remove_page(GTK_NOTEBOOK(app->notebook), page_num);
+	gtk_notebook_remove_page(GTK_NOTEBOOK(main_widgets.notebook), page_num);
 
 	tab_count_changed();
 }

Modified: trunk/src/plugindata.h
===================================================================
--- trunk/src/plugindata.h	2008-05-21 17:41:11 UTC (rev 2608)
+++ trunk/src/plugindata.h	2008-05-22 14:41:28 UTC (rev 2609)
@@ -35,12 +35,12 @@
 
 /* The API version should be incremented whenever any plugin data types below are
  * modified or appended to. */
-static const gint api_version = 60;
+static const gint api_version = 61;
 
 /* The ABI version should be incremented whenever existing fields in the plugin
  * data types below have to be changed or reordered. It should stay the same if fields
  * are only appended, as this doesn't affect existing fields. */
-static const gint abi_version = 30;
+static const gint abi_version = 31;
 
 /** Check the plugin can be loaded by Geany.
  * This performs runtime checks that try to ensure:
@@ -153,8 +153,8 @@
  * Core variable pointers can be appended when needed by plugin authors, if appropriate. */
 typedef struct GeanyData
 {
-	GeanyApp					*app;				/**< Geany application data fields */
-	GtkWidget					*tools_menu;		/**< Most plugins should add menu items to the Tools menu only */
+	struct GeanyApp				*app;				/**< Geany application data fields */
+	struct GeanyMainWidgets		*main_widgets;		/**< Important widgets in the main window. */
 	GArray						*doc_array;			/**< Dynamic array of document structs */
 	GPtrArray					*filetypes_array;	/**< Dynamic array of filetype pointers */
 	struct GeanyPrefs			*prefs;				/**< General settings */

Modified: trunk/src/plugins.c
===================================================================
--- trunk/src/plugins.c	2008-05-21 17:41:11 UTC (rev 2608)
+++ trunk/src/plugins.c	2008-05-22 14:41:28 UTC (rev 2609)
@@ -88,7 +88,7 @@
 static gchar **active_plugins_pref = NULL; 	/* list of plugin filenames to load at startup */
 static GList *failed_plugins_list = NULL;	/* plugins the user wants active but can't be used */
 
-static GtkWidget *separator = NULL;
+static GtkWidget *menu_separator = NULL;
 
 static void pm_show_dialog(GtkMenuItem *menuitem, gpointer user_data);
 
@@ -271,7 +271,7 @@
 {
 	GeanyData gd = {
 		app,
-		lookup_widget(app->window, "tools1_menu"),
+		&main_widgets,
 		doc_array,
 		filetypes_array,
 		&prefs,
@@ -435,7 +435,7 @@
 
 	if (plugin->fields.flags & PLUGIN_IS_DOCUMENT_SENSITIVE)
 	{
-		gboolean enable = gtk_notebook_get_n_pages(GTK_NOTEBOOK(app->notebook)) ? TRUE : FALSE;
+		gboolean enable = gtk_notebook_get_n_pages(GTK_NOTEBOOK(main_widgets.notebook)) ? TRUE : FALSE;
 		gtk_widget_set_sensitive(plugin->fields.menu_item, enable);
 	}
 
@@ -705,15 +705,15 @@
 
 	widget = gtk_separator_menu_item_new();
 	gtk_widget_show(widget);
-	gtk_container_add(GTK_CONTAINER(geany_data.tools_menu), widget);
+	gtk_container_add(GTK_CONTAINER(main_widgets.tools_menu), widget);
 
 	widget = gtk_menu_item_new_with_mnemonic(_("_Plugin Manager"));
-	gtk_container_add(GTK_CONTAINER (geany_data.tools_menu), widget);
+	gtk_container_add(GTK_CONTAINER(main_widgets.tools_menu), widget);
 	gtk_widget_show(widget);
 	g_signal_connect((gpointer) widget, "activate", G_CALLBACK(pm_show_dialog), NULL);
 
-	separator = gtk_separator_menu_item_new();
-	gtk_container_add(GTK_CONTAINER(geany_data.tools_menu), separator);
+	menu_separator = gtk_separator_menu_item_new();
+	gtk_container_add(GTK_CONTAINER(main_widgets.tools_menu), menu_separator);
 
 	load_active_plugins();
 
@@ -826,11 +826,11 @@
 {
 	gboolean found;
 
-	if (separator == NULL)
+	if (menu_separator == NULL)
 		return;
 
 	found = (g_list_find_custom(active_plugin_list, NULL, (GCompareFunc) plugin_has_menu) != NULL);
-	ui_widget_show_hide(separator, found);
+	ui_widget_show_hide(menu_separator, found);
 }
 
 
@@ -1029,7 +1029,7 @@
 	/* before showing the dialog, we need to create the list of available plugins */
 	load_all_plugins();
 
-	pm_widgets.dialog = gtk_dialog_new_with_buttons(_("Plugins"), GTK_WINDOW(app->window),
+	pm_widgets.dialog = gtk_dialog_new_with_buttons(_("Plugins"), GTK_WINDOW(main_widgets.window),
 						GTK_DIALOG_DESTROY_WITH_PARENT,
 						GTK_STOCK_OK, GTK_RESPONSE_CANCEL, NULL);
 	vbox = ui_dialog_vbox_new(GTK_DIALOG(pm_widgets.dialog));

Modified: trunk/src/prefs.c
===================================================================
--- trunk/src/prefs.c	2008-05-21 17:41:11 UTC (rev 2608)
+++ trunk/src/prefs.c	2008-05-22 14:41:28 UTC (rev 2609)
@@ -965,13 +965,13 @@
 		treeviews_openfiles_update_all(); /* to update if full path setting has changed */
 		ui_update_toolbar_items();
 		ui_update_toolbar_icons(toolbar_prefs.icon_size);
-		gtk_toolbar_set_style(GTK_TOOLBAR(app->toolbar), toolbar_prefs.icon_style);
+		gtk_toolbar_set_style(GTK_TOOLBAR(main_widgets.toolbar), toolbar_prefs.icon_style);
 		ui_sidebar_show_hide();
-		gtk_notebook_set_show_tabs(GTK_NOTEBOOK(app->notebook), interface_prefs.show_notebook_tabs);
+		gtk_notebook_set_show_tabs(GTK_NOTEBOOK(main_widgets.notebook), interface_prefs.show_notebook_tabs);
 
-		gtk_notebook_set_tab_pos(GTK_NOTEBOOK(app->notebook), interface_prefs.tab_pos_editor);
+		gtk_notebook_set_tab_pos(GTK_NOTEBOOK(main_widgets.notebook), interface_prefs.tab_pos_editor);
 		gtk_notebook_set_tab_pos(GTK_NOTEBOOK(msgwindow.notebook), interface_prefs.tab_pos_msgwin);
-		gtk_notebook_set_tab_pos(GTK_NOTEBOOK(app->treeview_notebook), interface_prefs.tab_pos_sidebar);
+		gtk_notebook_set_tab_pos(GTK_NOTEBOOK(main_widgets.sidebar_notebook), interface_prefs.tab_pos_sidebar);
 
 		/* re-colourise all open documents, if tab width or long line settings have changed */
 		for (i = 0; i < doc_array->len; i++)
@@ -1049,7 +1049,7 @@
 			}
 			if (GTK_IS_WIDGET(tv.default_tag_tree))
 				ui_widget_modify_font_from_string(tv.default_tag_tree, interface_prefs.tagbar_font);
-			ui_widget_modify_font_from_string(lookup_widget(app->window, "entry1"),
+			ui_widget_modify_font_from_string(lookup_widget(main_widgets.window, "entry1"),
 				interface_prefs.tagbar_font);
 			break;
 		}
@@ -1310,7 +1310,7 @@
 			if (kb->key == key && kb->mods == mods
 				&& ! (kb->key == search_kb->key && kb->mods == search_kb->mods))
 			{
-				if (dialogs_show_question_full(app->window, _("_Override"), GTK_STOCK_CANCEL,
+				if (dialogs_show_question_full(main_widgets.window, _("_Override"), GTK_STOCK_CANCEL,
 					_("Override that keybinding?"),
 					_("The combination '%s' is already used for \"%s\"."),
 					action, kb->label))
@@ -1401,7 +1401,7 @@
 
 		ui_widgets.prefs_dialog = create_prefs_dialog();
 		gtk_widget_set_name(ui_widgets.prefs_dialog, "GeanyPrefsDialog");
-		gtk_window_set_transient_for(GTK_WINDOW(ui_widgets.prefs_dialog), GTK_WINDOW(app->window));
+		gtk_window_set_transient_for(GTK_WINDOW(ui_widgets.prefs_dialog), GTK_WINDOW(main_widgets.window));
 
 		/* init the default file encoding combo box */
 		combo_new = lookup_widget(ui_widgets.prefs_dialog, "combo_new_encoding");

Modified: trunk/src/printing.c
===================================================================
--- trunk/src/printing.c	2008-05-21 17:41:11 UTC (rev 2608)
+++ trunk/src/printing.c	2008-05-22 14:41:28 UTC (rev 2609)
@@ -777,7 +777,7 @@
 		gtk_print_operation_set_default_page_setup(op, page_setup);
 
 	res = gtk_print_operation_run(
-		op, GTK_PRINT_OPERATION_ACTION_PRINT_DIALOG, GTK_WINDOW(app->window), &error);
+		op, GTK_PRINT_OPERATION_ACTION_PRINT_DIALOG, GTK_WINDOW(main_widgets.window), &error);
 
 	if (res == GTK_PRINT_OPERATION_RESULT_APPLY)
 	{
@@ -807,7 +807,7 @@
 		settings = gtk_print_settings_new();
 
 	new_page_setup = gtk_print_run_page_setup_dialog(
-		GTK_WINDOW(app->window), page_setup, settings);
+		GTK_WINDOW(main_widgets.window), page_setup, settings);
 
 	if (page_setup != NULL)
 		g_object_unref(page_setup);

Modified: trunk/src/project.c
===================================================================
--- trunk/src/project.c	2008-05-21 17:41:11 UTC (rev 2608)
+++ trunk/src/project.c	2008-05-22 14:41:28 UTC (rev 2609)
@@ -97,7 +97,7 @@
 	GtkWidget *button;
 	GtkWidget *bbox;
 	GtkWidget *label;
-	GtkTooltips *tooltips = GTK_TOOLTIPS(lookup_widget(app->window, "tooltips"));
+	GtkTooltips *tooltips = GTK_TOOLTIPS(lookup_widget(main_widgets.window, "tooltips"));
 	PropertyDialogElements *e;
 	gint response;
 
@@ -106,7 +106,7 @@
 	g_return_if_fail(app->project == NULL);
 
 	e = g_new0(PropertyDialogElements, 1);
-	e->dialog = gtk_dialog_new_with_buttons(_("New Project"), GTK_WINDOW(app->window),
+	e->dialog = gtk_dialog_new_with_buttons(_("New Project"), GTK_WINDOW(main_widgets.window),
 										 GTK_DIALOG_DESTROY_WITH_PARENT,
 										 GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL, NULL);
 
@@ -236,7 +236,7 @@
 	if (! close_open_project()) return;
 
 #ifdef G_OS_WIN32
-	file = win32_show_project_open_dialog(app->window, _("Open Project"), dir, FALSE, TRUE);
+	file = win32_show_project_open_dialog(main_widgets.window, _("Open Project"), dir, FALSE, TRUE);
 	if (file != NULL)
 	{
 		/* try to load the config */
@@ -254,7 +254,7 @@
 	}
 #else
 
-	dialog = gtk_file_chooser_dialog_new(_("Open Project"), GTK_WINDOW(app->window),
+	dialog = gtk_file_chooser_dialog_new(_("Open Project"), GTK_WINDOW(main_widgets.window),
 			GTK_FILE_CHOOSER_ACTION_OPEN,
 			GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL,
 			GTK_STOCK_OPEN, GTK_RESPONSE_ACCEPT, NULL);
@@ -265,7 +265,7 @@
 	gtk_window_set_destroy_with_parent(GTK_WINDOW(dialog), TRUE);
 	gtk_window_set_skip_taskbar_hint(GTK_WINDOW(dialog), TRUE);
 	gtk_window_set_type_hint(GTK_WINDOW(dialog), GDK_WINDOW_TYPE_HINT_DIALOG);
-	gtk_window_set_transient_for(GTK_WINDOW(dialog), GTK_WINDOW(app->window));
+	gtk_window_set_transient_for(GTK_WINDOW(dialog), GTK_WINDOW(main_widgets.window));
 	gtk_file_chooser_set_select_multiple(GTK_FILE_CHOOSER(dialog), TRUE);
 
 	/* add FileFilters */
@@ -353,9 +353,9 @@
 	GtkWidget *bbox;
 	GtkWidget *label;
 	GtkWidget *swin;
-	GtkTooltips *tooltips = GTK_TOOLTIPS(lookup_widget(app->window, "tooltips"));
+	GtkTooltips *tooltips = GTK_TOOLTIPS(lookup_widget(main_widgets.window, "tooltips"));
 
-	e->dialog = gtk_dialog_new_with_buttons(_("Project Properties"), GTK_WINDOW(app->window),
+	e->dialog = gtk_dialog_new_with_buttons(_("Project Properties"), GTK_WINDOW(main_widgets.window),
 										 GTK_DIALOG_DESTROY_WITH_PARENT,
 										 GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL, NULL);
 	gtk_dialog_add_buttons(GTK_DIALOG(e->dialog), GTK_STOCK_OK, GTK_RESPONSE_OK, NULL);

Modified: trunk/src/sciwrappers.c
===================================================================
--- trunk/src/sciwrappers.c	2008-05-21 17:41:11 UTC (rev 2608)
+++ trunk/src/sciwrappers.c	2008-05-22 14:41:28 UTC (rev 2609)
@@ -710,9 +710,9 @@
 }
 
 
-void sci_goto_line(ScintillaObject *sci, gint line, gboolean ensure_visibility)
+void sci_goto_line(ScintillaObject *sci, gint line, gboolean unfold)
 {
-	if (ensure_visibility) SSM(sci,SCI_ENSUREVISIBLE,line,0);
+	if (unfold) SSM(sci, SCI_ENSUREVISIBLE, line, 0);
 	SSM(sci, SCI_GOTOLINE, line, 0);
 }
 

Modified: trunk/src/sciwrappers.h
===================================================================
--- trunk/src/sciwrappers.h	2008-05-21 17:41:11 UTC (rev 2608)
+++ trunk/src/sciwrappers.h	2008-05-22 14:41:28 UTC (rev 2609)
@@ -129,7 +129,7 @@
 gint				sci_search_prev				(ScintillaObject * sci, gint flags, const gchar *text);
 gint				sci_find_text				(ScintillaObject * sci, gint flags, struct TextToFind *ttf);
 void				sci_set_font				(ScintillaObject * sci, gint style, const gchar* font, gint size);
-void				sci_goto_line				(ScintillaObject * sci, gint line, gboolean ensure_visibility);
+void				sci_goto_line				(ScintillaObject * sci, gint line, gboolean unfold);
 void				sci_marker_delete_all		(ScintillaObject * sci, gint marker);
 gint				sci_get_style_at			(ScintillaObject * sci, gint position);
 void				sci_set_symbol_margin		(ScintillaObject * sci, gboolean set);

Modified: trunk/src/search.c
===================================================================
--- trunk/src/search.c	2008-05-21 17:41:11 UTC (rev 2608)
+++ trunk/src/search.c	2008-05-22 14:41:28 UTC (rev 2609)
@@ -134,7 +134,7 @@
 {
 	GtkWidget *checkbox1, *checkbox2, *check_regexp, *check_back, *checkbox5,
 			  *checkbox7, *hbox, *fbox, *mbox;
-	GtkTooltips *tooltips = GTK_TOOLTIPS(lookup_widget(app->window, "tooltips"));
+	GtkTooltips *tooltips = GTK_TOOLTIPS(lookup_widget(main_widgets.window, "tooltips"));
 
 	check_regexp = gtk_check_button_new_with_mnemonic(_("_Use regular expressions"));
 	g_object_set_data_full(G_OBJECT(dialog), "check_regexp",
@@ -297,12 +297,12 @@
 	{
 		GtkWidget *label, *entry, *sbox, *vbox;
 		GtkWidget *exp, *bbox, *button, *check_close;
-		GtkTooltips *tooltips = GTK_TOOLTIPS(lookup_widget(app->window, "tooltips"));
+		GtkTooltips *tooltips = GTK_TOOLTIPS(lookup_widget(main_widgets.window, "tooltips"));
 
 		load_monospace_style();
 
 		widgets.find_dialog = gtk_dialog_new_with_buttons(_("Find"),
-			GTK_WINDOW(app->window), GTK_DIALOG_DESTROY_WITH_PARENT,
+			GTK_WINDOW(main_widgets.window), GTK_DIALOG_DESTROY_WITH_PARENT,
 			GTK_STOCK_CLOSE, GTK_RESPONSE_CANCEL, NULL);
 		vbox = ui_dialog_vbox_new(GTK_DIALOG(widgets.find_dialog));
 		gtk_widget_set_name(widgets.find_dialog, "GeanyDialogSearch");
@@ -419,12 +419,12 @@
 		GtkWidget *label_find, *label_replace, *entry_find, *entry_replace,
 			*check_close, *button, *rbox, *fbox, *vbox, *exp, *bbox;
 		GtkSizeGroup *label_size;
-		GtkTooltips *tooltips = GTK_TOOLTIPS(lookup_widget(app->window, "tooltips"));
+		GtkTooltips *tooltips = GTK_TOOLTIPS(lookup_widget(main_widgets.window, "tooltips"));
 
 		load_monospace_style();
 
 		widgets.replace_dialog = gtk_dialog_new_with_buttons(_("Replace"),
-			GTK_WINDOW(app->window), GTK_DIALOG_DESTROY_WITH_PARENT,
+			GTK_WINDOW(main_widgets.window), GTK_DIALOG_DESTROY_WITH_PARENT,
 			GTK_STOCK_CLOSE, GTK_RESPONSE_CANCEL, NULL);
 		vbox = ui_dialog_vbox_new(GTK_DIALOG(widgets.replace_dialog));
 		gtk_box_set_spacing(GTK_BOX(vbox), 9);
@@ -569,12 +569,12 @@
 			*check_recursive, *check_extra, *entry_extra;
 		GtkWidget *dbox, *sbox, *cbox, *rbox, *rbtn, *hbox, *vbox;
 		GtkSizeGroup *size_group;
-		GtkTooltips *tooltips = GTK_TOOLTIPS(lookup_widget(app->window, "tooltips"));
+		GtkTooltips *tooltips = GTK_TOOLTIPS(lookup_widget(main_widgets.window, "tooltips"));
 
 		load_monospace_style();
 
 		widgets.find_in_files_dialog = gtk_dialog_new_with_buttons(
-			_("Find in Files"), GTK_WINDOW(app->window), GTK_DIALOG_DESTROY_WITH_PARENT,
+			_("Find in Files"), GTK_WINDOW(main_widgets.window), GTK_DIALOG_DESTROY_WITH_PARENT,
 			GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL, NULL);
 		vbox = ui_dialog_vbox_new(GTK_DIALOG(widgets.find_in_files_dialog));
 		gtk_box_set_spacing(GTK_BOX(vbox), 9);
@@ -1007,7 +1007,7 @@

@@ Diff output truncated at 100000 characters. @@

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