SF.net SVN: geany:[2876] trunk

eht16 at users.sourceforge.net eht16 at xxxxx
Mon Aug 11 18:16:46 UTC 2008


Revision: 2876
          http://geany.svn.sourceforge.net/geany/?rev=2876&view=rev
Author:   eht16
Date:     2008-08-11 18:16:35 +0000 (Mon, 11 Aug 2008)

Log Message:
-----------
Move geany_debug() into log.c.
Use GLib log/print handlers to log messages/warnings into a string for later usage.
Add a debug messages window, accessible through the help menu to easily view debug messages/warnings.
This might replace the extra console window on Windows.

Modified Paths:
--------------
    trunk/ChangeLog
    trunk/geany.glade
    trunk/src/Makefile.am
    trunk/src/callbacks.c
    trunk/src/callbacks.h
    trunk/src/interface.c
    trunk/src/main.c
    trunk/src/makefile.win32
    trunk/wscript

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

Modified: trunk/ChangeLog
===================================================================
--- trunk/ChangeLog	2008-08-11 16:57:40 UTC (rev 2875)
+++ trunk/ChangeLog	2008-08-11 18:16:35 UTC (rev 2876)
@@ -1,3 +1,16 @@
+2008-08-11  Enrico Tröger  <enrico(dot)troeger(at)uvena(dot)de>
+
+ * geany.glade, wscript, src/Makefile.am, src/makefile.win32,
+   src/callbacks.c, src/callbacks.h, src/interface.c, src/log.c,
+   src/log.h, src/main.c:
+   Move geany_debug() into log.c.
+   Use GLib log/print handlers to log messages/warnings into a
+   string for later usage.
+   Add a debug messages window, accessable through the help menu to
+   easily view debug messages/warnings.
+   This might replace the extra console window on Windows.
+
+
 2008-08-11  Nick Treleaven  <nick(dot)treleaven(at)btinternet(dot)com>
 
  * src/editor.c:

Modified: trunk/geany.glade
===================================================================
--- trunk/geany.glade	2008-08-11 16:57:40 UTC (rev 2875)
+++ trunk/geany.glade	2008-08-11 18:16:35 UTC (rev 2876)
@@ -58,7 +58,7 @@
 		      <property name="use_underline">True</property>
 
 		      <child internal-child="image">
-			<widget class="GtkImage" id="image2576">
+			<widget class="GtkImage" id="image2595">
 			  <property name="visible">True</property>
 			  <property name="stock">gtk-new</property>
 			  <property name="icon_size">1</property>
@@ -148,7 +148,7 @@
 		      <signal name="activate" handler="on_save_all1_activate" last_modification_time="Thu, 02 Jun 2005 14:15:30 GMT"/>
 
 		      <child internal-child="image">
-			<widget class="GtkImage" id="image2577">
+			<widget class="GtkImage" id="image2596">
 			  <property name="visible">True</property>
 			  <property name="stock">gtk-save</property>
 			  <property name="icon_size">1</property>
@@ -169,7 +169,7 @@
 		      <signal name="activate" handler="on_toolbutton23_clicked" last_modification_time="Mon, 24 Jul 2006 19:26:04 GMT"/>
 
 		      <child internal-child="image">
-			<widget class="GtkImage" id="image2578">
+			<widget class="GtkImage" id="image2597">
 			  <property name="visible">True</property>
 			  <property name="stock">gtk-revert-to-saved</property>
 			  <property name="icon_size">1</property>
@@ -189,7 +189,7 @@
 		      <property name="use_underline">True</property>
 
 		      <child internal-child="image">
-			<widget class="GtkImage" id="image2579">
+			<widget class="GtkImage" id="image2598">
 			  <property name="visible">True</property>
 			  <property name="stock">gtk-revert-to-saved</property>
 			  <property name="icon_size">1</property>
@@ -277,7 +277,7 @@
 		      <signal name="activate" handler="on_close_other_documents1_activate" last_modification_time="Fri, 27 Jun 2008 15:19:28 GMT"/>
 
 		      <child internal-child="image">
-			<widget class="GtkImage" id="image2580">
+			<widget class="GtkImage" id="image2599">
 			  <property name="visible">True</property>
 			  <property name="stock">gtk-close</property>
 			  <property name="icon_size">1</property>
@@ -299,7 +299,7 @@
 		      <signal name="activate" handler="on_close_all1_activate" last_modification_time="Thu, 02 Jun 2005 14:15:30 GMT"/>
 
 		      <child internal-child="image">
-			<widget class="GtkImage" id="image2581">
+			<widget class="GtkImage" id="image2600">
 			  <property name="visible">True</property>
 			  <property name="stock">gtk-close</property>
 			  <property name="icon_size">1</property>
@@ -498,7 +498,7 @@
 			      <signal name="activate" handler="on_menu_increase_indent1_activate" last_modification_time="Tue, 01 Aug 2006 10:28:54 GMT"/>
 
 			      <child internal-child="image">
-				<widget class="GtkImage" id="image2582">
+				<widget class="GtkImage" id="image2601">
 				  <property name="visible">True</property>
 				  <property name="stock">gtk-indent</property>
 				  <property name="icon_size">1</property>
@@ -519,7 +519,7 @@
 			      <signal name="activate" handler="on_menu_decrease_indent1_activate" last_modification_time="Tue, 01 Aug 2006 10:28:54 GMT"/>
 
 			      <child internal-child="image">
-				<widget class="GtkImage" id="image2583">
+				<widget class="GtkImage" id="image2602">
 				  <property name="visible">True</property>
 				  <property name="stock">gtk-unindent</property>
 				  <property name="icon_size">1</property>
@@ -575,7 +575,7 @@
 		      <property name="use_underline">True</property>
 
 		      <child internal-child="image">
-			<widget class="GtkImage" id="image2584">
+			<widget class="GtkImage" id="image2603">
 			  <property name="visible">True</property>
 			  <property name="stock">gtk-add</property>
 			  <property name="icon_size">1</property>
@@ -660,7 +660,7 @@
 		      <property name="use_underline">True</property>
 
 		      <child internal-child="image">
-			<widget class="GtkImage" id="image2585">
+			<widget class="GtkImage" id="image2604">
 			  <property name="visible">True</property>
 			  <property name="stock">gtk-add</property>
 			  <property name="icon_size">1</property>
@@ -692,7 +692,7 @@
 		      <property name="use_underline">True</property>
 
 		      <child internal-child="image">
-			<widget class="GtkImage" id="image2586">
+			<widget class="GtkImage" id="image2605">
 			  <property name="visible">True</property>
 			  <property name="stock">gtk-add</property>
 			  <property name="icon_size">1</property>
@@ -790,7 +790,7 @@
 		      <signal name="activate" handler="on_replace1_activate" last_modification_time="Sun, 23 Oct 2005 13:22:36 GMT"/>
 
 		      <child internal-child="image">
-			<widget class="GtkImage" id="image2587">
+			<widget class="GtkImage" id="image2606">
 			  <property name="visible">True</property>
 			  <property name="stock">gtk-find-and-replace</property>
 			  <property name="icon_size">1</property>
@@ -865,7 +865,7 @@
 		      <signal name="activate" handler="on_go_to_line1_activate" last_modification_time="Tue, 23 May 2006 17:10:49 GMT"/>
 
 		      <child internal-child="image">
-			<widget class="GtkImage" id="image2588">
+			<widget class="GtkImage" id="image2607">
 			  <property name="visible">True</property>
 			  <property name="stock">gtk-jump-to</property>
 			  <property name="icon_size">1</property>
@@ -900,7 +900,7 @@
 		      <signal name="activate" handler="on_change_font1_activate" last_modification_time="Fri, 22 Apr 2005 18:58:45 GMT"/>
 
 		      <child internal-child="image">
-			<widget class="GtkImage" id="image2589">
+			<widget class="GtkImage" id="image2608">
 			  <property name="visible">True</property>
 			  <property name="stock">gtk-select-font</property>
 			  <property name="icon_size">1</property>
@@ -1104,7 +1104,7 @@
 			      <property name="visible">True</property>
 			      <property name="label" translatable="yes">T_abs and Spaces</property>
 			      <property name="use_underline">True</property>
-			      <property name="active">False</property>
+			      <property name="active">True</property>
 			      <property name="group">tabs1</property>
 			      <signal name="activate" handler="on_tabs_and_spaces1_activate" last_modification_time="Thu, 31 Jul 2008 14:23:06 GMT"/>
 			    </widget>
@@ -1340,7 +1340,7 @@
 		      <signal name="activate" handler="on_project_new1_activate" last_modification_time="Thu, 18 Jan 2007 22:16:24 GMT"/>
 
 		      <child internal-child="image">
-			<widget class="GtkImage" id="image2590">
+			<widget class="GtkImage" id="image2609">
 			  <property name="visible">True</property>
 			  <property name="stock">gtk-new</property>
 			  <property name="icon_size">1</property>
@@ -1361,7 +1361,7 @@
 		      <signal name="activate" handler="on_project_open1_activate" last_modification_time="Mon, 15 Jan 2007 17:34:17 GMT"/>
 
 		      <child internal-child="image">
-			<widget class="GtkImage" id="image2591">
+			<widget class="GtkImage" id="image2610">
 			  <property name="visible">True</property>
 			  <property name="stock">gtk-open</property>
 			  <property name="icon_size">1</property>
@@ -1382,7 +1382,7 @@
 		      <signal name="activate" handler="on_project_close1_activate" last_modification_time="Mon, 15 Jan 2007 17:34:17 GMT"/>
 
 		      <child internal-child="image">
-			<widget class="GtkImage" id="image2592">
+			<widget class="GtkImage" id="image2611">
 			  <property name="visible">True</property>
 			  <property name="stock">gtk-close</property>
 			  <property name="icon_size">1</property>
@@ -1441,7 +1441,7 @@
 		      <signal name="activate" handler="on_show_color_chooser1_activate" last_modification_time="Wed, 22 Jun 2005 18:10:21 GMT"/>
 
 		      <child internal-child="image">
-			<widget class="GtkImage" id="image2593">
+			<widget class="GtkImage" id="image2612">
 			  <property name="visible">True</property>
 			  <property name="stock">gtk-select-color</property>
 			  <property name="icon_size">1</property>
@@ -1483,7 +1483,7 @@
 		      <signal name="activate" handler="on_menu_reload_configuration1_activate" last_modification_time="Mon, 30 Jun 2008 16:19:40 GMT"/>
 
 		      <child internal-child="image">
-			<widget class="GtkImage" id="image2594">
+			<widget class="GtkImage" id="image2613">
 			  <property name="visible">True</property>
 			  <property name="stock">gtk-refresh</property>
 			  <property name="icon_size">1</property>
@@ -1517,7 +1517,7 @@
 		      <signal name="activate" handler="on_help1_activate" last_modification_time="Sun, 24 Jul 2005 15:23:11 GMT"/>
 
 		      <child internal-child="image">
-			<widget class="GtkImage" id="image2595">
+			<widget class="GtkImage" id="image2614">
 			  <property name="visible">True</property>
 			  <property name="stock">gtk-help</property>
 			  <property name="icon_size">1</property>
@@ -1550,6 +1550,15 @@
 		  </child>
 
 		  <child>
+		    <widget class="GtkMenuItem" id="debug_messages1">
+		      <property name="visible">True</property>
+		      <property name="label" translatable="yes">_Debug Messages</property>
+		      <property name="use_underline">True</property>
+		      <signal name="activate" handler="on_debug_messages1_activate" last_modification_time="Mon, 11 Aug 2008 16:04:45 GMT"/>
+		    </widget>
+		  </child>
+
+		  <child>
 		    <widget class="GtkSeparatorMenuItem" id="separator16">
 		      <property name="visible">True</property>
 		    </widget>

Modified: trunk/src/Makefile.am
===================================================================
--- trunk/src/Makefile.am	2008-08-11 16:57:40 UTC (rev 2875)
+++ trunk/src/Makefile.am	2008-08-11 18:16:35 UTC (rev 2876)
@@ -22,6 +22,7 @@
 	interface.c interface.h \
 	keybindings.c keybindings.h \
 	keyfile.c keyfile.h \
+	log.c log.h \
 	main.c main.h geany.h \
 	msgwindow.c msgwindow.h \
 	navqueue.c navqueue.h \

Modified: trunk/src/callbacks.c
===================================================================
--- trunk/src/callbacks.c	2008-08-11 16:57:40 UTC (rev 2875)
+++ trunk/src/callbacks.c	2008-08-11 18:16:35 UTC (rev 2876)
@@ -64,6 +64,7 @@
 #include "navqueue.h"
 #include "printing.h"
 #include "plugins.h"
+#include "log.h"
 
 #include "geanyobject.h"
 
@@ -2212,3 +2213,11 @@
 	gtk_widget_set_sensitive(check, !active);
 }
 
+
+void
+on_debug_messages1_activate            (GtkMenuItem     *menuitem,
+                                        gpointer         user_data)
+{
+	log_show_debug_messages_dialog();
+}
+

Modified: trunk/src/callbacks.h
===================================================================
--- trunk/src/callbacks.h	2008-08-11 16:57:40 UTC (rev 2875)
+++ trunk/src/callbacks.h	2008-08-11 18:16:35 UTC (rev 2876)
@@ -634,3 +634,7 @@
 void
 on_radio_indent_both_toggled           (GtkToggleButton *togglebutton,
                                         gpointer         user_data);
+
+void
+on_debug_messages1_activate            (GtkMenuItem     *menuitem,
+                                        gpointer         user_data);

Modified: trunk/src/interface.c
===================================================================
--- trunk/src/interface.c	2008-08-11 16:57:40 UTC (rev 2875)
+++ trunk/src/interface.c	2008-08-11 18:16:35 UTC (rev 2876)
@@ -37,7 +37,7 @@
   GtkWidget *file1_menu;
   GtkWidget *menu_new1;
   GtkWidget *menu_new_with_template1;
-  GtkWidget *image2576;
+  GtkWidget *image2595;
   GtkWidget *menu_new_with_template1_menu;
   GtkWidget *invisible2;
   GtkWidget *separator12;
@@ -48,11 +48,11 @@
   GtkWidget *menu_save1;
   GtkWidget *menu_save_as1;
   GtkWidget *menu_save_all1;
-  GtkWidget *image2577;
+  GtkWidget *image2596;
   GtkWidget *menu_reload1;
-  GtkWidget *image2578;
+  GtkWidget *image2597;
   GtkWidget *menu_reload_as1;
-  GtkWidget *image2579;
+  GtkWidget *image2598;
   GtkWidget *menu_reload_as1_menu;
   GtkWidget *invisible7;
   GtkWidget *separator21;
@@ -63,9 +63,9 @@
   GtkWidget *separator14;
   GtkWidget *menu_close1;
   GtkWidget *close_other_documents1;
-  GtkWidget *image2580;
+  GtkWidget *image2599;
   GtkWidget *menu_close_all1;
-  GtkWidget *image2581;
+  GtkWidget *image2600;
   GtkWidget *menu_separatormenuitem1;
   GtkWidget *menu_quit1;
   GtkWidget *edit1;
@@ -90,16 +90,16 @@
   GtkWidget *menu_duplicate_line1;
   GtkWidget *separator29;
   GtkWidget *menu_increase_indent1;
-  GtkWidget *image2582;
+  GtkWidget *image2601;
   GtkWidget *menu_decrease_indent1;
-  GtkWidget *image2583;
+  GtkWidget *image2602;
   GtkWidget *separator37;
   GtkWidget *send_selection_to2;
   GtkWidget *send_selection_to2_menu;
   GtkWidget *invisible13;
   GtkWidget *separator18;
   GtkWidget *add_comments1;
-  GtkWidget *image2584;
+  GtkWidget *image2603;
   GtkWidget *add_comments1_menu;
   GtkWidget *menu_add_changelog_entry1;
   GtkWidget *insert_file_header1;
@@ -108,11 +108,11 @@
   GtkWidget *insert_gpl_notice2;
   GtkWidget *insert_bsd_license_notice2;
   GtkWidget *insert_date1;
-  GtkWidget *image2585;
+  GtkWidget *image2604;
   GtkWidget *insert_date1_menu;
   GtkWidget *invisible8;
   GtkWidget *insert_include2;
-  GtkWidget *image2586;
+  GtkWidget *image2605;
   GtkWidget *insert_include2_menu;
   GtkWidget *invisible4;
   GtkWidget *separator9;
@@ -124,7 +124,7 @@
   GtkWidget *find_previous1;
   GtkWidget *find_in_files1;
   GtkWidget *replace1;
-  GtkWidget *image2587;
+  GtkWidget *image2606;
   GtkWidget *separator33;
   GtkWidget *find_nextsel1;
   GtkWidget *find_prevsel1;
@@ -133,11 +133,11 @@
   GtkWidget *previous_message1;
   GtkWidget *separator32;
   GtkWidget *go_to_line1;
-  GtkWidget *image2588;
+  GtkWidget *image2607;
   GtkWidget *menu_view1;
   GtkWidget *menu_view1_menu;
   GtkWidget *menu_change_font1;
-  GtkWidget *image2589;
+  GtkWidget *image2608;
   GtkWidget *menu_separator4;
   GtkWidget *menu_toggle_all_additional_widgets1;
   GtkWidget *menu_fullscreen1;
@@ -190,28 +190,29 @@
   GtkWidget *menu_project1;
   GtkWidget *menu_project1_menu;
   GtkWidget *project_new1;
-  GtkWidget *image2590;
+  GtkWidget *image2609;
   GtkWidget *project_open1;
-  GtkWidget *image2591;
+  GtkWidget *image2610;
   GtkWidget *project_close1;
-  GtkWidget *image2592;
+  GtkWidget *image2611;
   GtkWidget *separator34;
   GtkWidget *project_properties1;
   GtkWidget *menu_build1;
   GtkWidget *tools1;
   GtkWidget *tools1_menu;
   GtkWidget *menu_choose_color1;
-  GtkWidget *image2593;
+  GtkWidget *image2612;
   GtkWidget *menu_count_words1;
   GtkWidget *load_tags1;
   GtkWidget *menu_reload_configuration1;
-  GtkWidget *image2594;
+  GtkWidget *image2613;
   GtkWidget *menu_help1;
   GtkWidget *menu_help1_menu;
   GtkWidget *help1;
-  GtkWidget *image2595;
+  GtkWidget *image2614;
   GtkWidget *keyboard_shortcuts1;
   GtkWidget *website1;
+  GtkWidget *debug_messages1;
   GtkWidget *separator16;
   GtkWidget *menu_info1;
   GtkWidget *toolbar1;
@@ -312,9 +313,9 @@
   gtk_widget_show (menu_new_with_template1);
   gtk_container_add (GTK_CONTAINER (file1_menu), menu_new_with_template1);
 
-  image2576 = gtk_image_new_from_stock ("gtk-new", GTK_ICON_SIZE_MENU);
-  gtk_widget_show (image2576);
-  gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (menu_new_with_template1), image2576);
+  image2595 = gtk_image_new_from_stock ("gtk-new", GTK_ICON_SIZE_MENU);
+  gtk_widget_show (image2595);
+  gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (menu_new_with_template1), image2595);
 
   menu_new_with_template1_menu = gtk_menu_new ();
   gtk_menu_item_set_submenu (GTK_MENU_ITEM (menu_new_with_template1), menu_new_with_template1_menu);
@@ -357,25 +358,25 @@
   gtk_container_add (GTK_CONTAINER (file1_menu), menu_save_all1);
   gtk_tooltips_set_tip (tooltips, menu_save_all1, _("Saves all open files"), NULL);
 
-  image2577 = gtk_image_new_from_stock ("gtk-save", GTK_ICON_SIZE_MENU);
-  gtk_widget_show (image2577);
-  gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (menu_save_all1), image2577);
+  image2596 = gtk_image_new_from_stock ("gtk-save", GTK_ICON_SIZE_MENU);
+  gtk_widget_show (image2596);
+  gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (menu_save_all1), image2596);
 
   menu_reload1 = gtk_image_menu_item_new_with_mnemonic (_("_Reload"));
   gtk_widget_show (menu_reload1);
   gtk_container_add (GTK_CONTAINER (file1_menu), menu_reload1);
 
-  image2578 = gtk_image_new_from_stock ("gtk-revert-to-saved", GTK_ICON_SIZE_MENU);
-  gtk_widget_show (image2578);
-  gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (menu_reload1), image2578);
+  image2597 = gtk_image_new_from_stock ("gtk-revert-to-saved", GTK_ICON_SIZE_MENU);
+  gtk_widget_show (image2597);
+  gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (menu_reload1), image2597);
 
   menu_reload_as1 = gtk_image_menu_item_new_with_mnemonic (_("R_eload As"));
   gtk_widget_show (menu_reload_as1);
   gtk_container_add (GTK_CONTAINER (file1_menu), menu_reload_as1);
 
-  image2579 = gtk_image_new_from_stock ("gtk-revert-to-saved", GTK_ICON_SIZE_MENU);
-  gtk_widget_show (image2579);
-  gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (menu_reload_as1), image2579);
+  image2598 = gtk_image_new_from_stock ("gtk-revert-to-saved", GTK_ICON_SIZE_MENU);
+  gtk_widget_show (image2598);
+  gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (menu_reload_as1), image2598);
 
   menu_reload_as1_menu = gtk_menu_new ();
   gtk_menu_item_set_submenu (GTK_MENU_ITEM (menu_reload_as1), menu_reload_as1_menu);
@@ -419,18 +420,18 @@
   gtk_widget_show (close_other_documents1);
   gtk_container_add (GTK_CONTAINER (file1_menu), close_other_documents1);
 
-  image2580 = gtk_image_new_from_stock ("gtk-close", GTK_ICON_SIZE_MENU);
-  gtk_widget_show (image2580);
-  gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (close_other_documents1), image2580);
+  image2599 = gtk_image_new_from_stock ("gtk-close", GTK_ICON_SIZE_MENU);
+  gtk_widget_show (image2599);
+  gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (close_other_documents1), image2599);
 
   menu_close_all1 = gtk_image_menu_item_new_with_mnemonic (_("C_lose All"));
   gtk_widget_show (menu_close_all1);
   gtk_container_add (GTK_CONTAINER (file1_menu), menu_close_all1);
   gtk_tooltips_set_tip (tooltips, menu_close_all1, _("Closes all open files"), NULL);
 
-  image2581 = gtk_image_new_from_stock ("gtk-close", GTK_ICON_SIZE_MENU);
-  gtk_widget_show (image2581);
-  gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (menu_close_all1), image2581);
+  image2600 = gtk_image_new_from_stock ("gtk-close", GTK_ICON_SIZE_MENU);
+  gtk_widget_show (image2600);
+  gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (menu_close_all1), image2600);
 
   menu_separatormenuitem1 = gtk_separator_menu_item_new ();
   gtk_widget_show (menu_separatormenuitem1);
@@ -534,17 +535,17 @@
   gtk_widget_show (menu_increase_indent1);
   gtk_container_add (GTK_CONTAINER (menu_format1_menu), menu_increase_indent1);
 
-  image2582 = gtk_image_new_from_stock ("gtk-indent", GTK_ICON_SIZE_MENU);
-  gtk_widget_show (image2582);
-  gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (menu_increase_indent1), image2582);
+  image2601 = gtk_image_new_from_stock ("gtk-indent", GTK_ICON_SIZE_MENU);
+  gtk_widget_show (image2601);
+  gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (menu_increase_indent1), image2601);
 
   menu_decrease_indent1 = gtk_image_menu_item_new_with_mnemonic (_("_Decrease Indent"));
   gtk_widget_show (menu_decrease_indent1);
   gtk_container_add (GTK_CONTAINER (menu_format1_menu), menu_decrease_indent1);
 
-  image2583 = gtk_image_new_from_stock ("gtk-unindent", GTK_ICON_SIZE_MENU);
-  gtk_widget_show (image2583);
-  gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (menu_decrease_indent1), image2583);
+  image2602 = gtk_image_new_from_stock ("gtk-unindent", GTK_ICON_SIZE_MENU);
+  gtk_widget_show (image2602);
+  gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (menu_decrease_indent1), image2602);
 
   separator37 = gtk_separator_menu_item_new ();
   gtk_widget_show (separator37);
@@ -570,9 +571,9 @@
   gtk_widget_show (add_comments1);
   gtk_container_add (GTK_CONTAINER (edit1_menu), add_comments1);
 
-  image2584 = gtk_image_new_from_stock ("gtk-add", GTK_ICON_SIZE_MENU);
-  gtk_widget_show (image2584);
-  gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (add_comments1), image2584);
+  image2603 = gtk_image_new_from_stock ("gtk-add", GTK_ICON_SIZE_MENU);
+  gtk_widget_show (image2603);
+  gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (add_comments1), image2603);
 
   add_comments1_menu = gtk_menu_new ();
   gtk_menu_item_set_submenu (GTK_MENU_ITEM (add_comments1), add_comments1_menu);
@@ -611,9 +612,9 @@
   gtk_widget_show (insert_date1);
   gtk_container_add (GTK_CONTAINER (edit1_menu), insert_date1);
 
-  image2585 = gtk_image_new_from_stock ("gtk-add", GTK_ICON_SIZE_MENU);
-  gtk_widget_show (image2585);
-  gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (insert_date1), image2585);
+  image2604 = gtk_image_new_from_stock ("gtk-add", GTK_ICON_SIZE_MENU);
+  gtk_widget_show (image2604);
+  gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (insert_date1), image2604);
 
   insert_date1_menu = gtk_menu_new ();
   gtk_menu_item_set_submenu (GTK_MENU_ITEM (insert_date1), insert_date1_menu);
@@ -625,9 +626,9 @@
   gtk_widget_show (insert_include2);
   gtk_container_add (GTK_CONTAINER (edit1_menu), insert_include2);
 
-  image2586 = gtk_image_new_from_stock ("gtk-add", GTK_ICON_SIZE_MENU);
-  gtk_widget_show (image2586);
-  gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (insert_include2), image2586);
+  image2605 = gtk_image_new_from_stock ("gtk-add", GTK_ICON_SIZE_MENU);
+  gtk_widget_show (image2605);
+  gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (insert_include2), image2605);
 
   insert_include2_menu = gtk_menu_new ();
   gtk_menu_item_set_submenu (GTK_MENU_ITEM (insert_include2), insert_include2_menu);
@@ -671,9 +672,9 @@
   gtk_widget_show (replace1);
   gtk_container_add (GTK_CONTAINER (search1_menu), replace1);
 
-  image2587 = gtk_image_new_from_stock ("gtk-find-and-replace", GTK_ICON_SIZE_MENU);
-  gtk_widget_show (image2587);
-  gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (replace1), image2587);
+  image2606 = gtk_image_new_from_stock ("gtk-find-and-replace", GTK_ICON_SIZE_MENU);
+  gtk_widget_show (image2606);
+  gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (replace1), image2606);
 
   separator33 = gtk_separator_menu_item_new ();
   gtk_widget_show (separator33);
@@ -710,9 +711,9 @@
   gtk_widget_show (go_to_line1);
   gtk_container_add (GTK_CONTAINER (search1_menu), go_to_line1);
 
-  image2588 = gtk_image_new_from_stock ("gtk-jump-to", GTK_ICON_SIZE_MENU);
-  gtk_widget_show (image2588);
-  gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (go_to_line1), image2588);
+  image2607 = gtk_image_new_from_stock ("gtk-jump-to", GTK_ICON_SIZE_MENU);
+  gtk_widget_show (image2607);
+  gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (go_to_line1), image2607);
 
   menu_view1 = gtk_menu_item_new_with_mnemonic (_("_View"));
   gtk_widget_show (menu_view1);
@@ -726,9 +727,9 @@
   gtk_container_add (GTK_CONTAINER (menu_view1_menu), menu_change_font1);
   gtk_tooltips_set_tip (tooltips, menu_change_font1, _("Change the default font"), NULL);
 
-  image2589 = gtk_image_new_from_stock ("gtk-select-font", GTK_ICON_SIZE_MENU);
-  gtk_widget_show (image2589);
-  gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (menu_change_font1), image2589);
+  image2608 = gtk_image_new_from_stock ("gtk-select-font", GTK_ICON_SIZE_MENU);
+  gtk_widget_show (image2608);
+  gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (menu_change_font1), image2608);
 
   menu_separator4 = gtk_separator_menu_item_new ();
   gtk_widget_show (menu_separator4);
@@ -834,6 +835,7 @@
   tabs1_group = gtk_radio_menu_item_get_group (GTK_RADIO_MENU_ITEM (tabs_and_spaces1));
   gtk_widget_show (tabs_and_spaces1);
   gtk_container_add (GTK_CONTAINER (indent_type1_menu), tabs_and_spaces1);
+  gtk_check_menu_item_set_active (GTK_CHECK_MENU_ITEM (tabs_and_spaces1), TRUE);
 
   separator45 = gtk_separator_menu_item_new ();
   gtk_widget_show (separator45);
@@ -958,25 +960,25 @@
   gtk_widget_show (project_new1);
   gtk_container_add (GTK_CONTAINER (menu_project1_menu), project_new1);
 
-  image2590 = gtk_image_new_from_stock ("gtk-new", GTK_ICON_SIZE_MENU);
-  gtk_widget_show (image2590);
-  gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (project_new1), image2590);
+  image2609 = gtk_image_new_from_stock ("gtk-new", GTK_ICON_SIZE_MENU);
+  gtk_widget_show (image2609);
+  gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (project_new1), image2609);
 
   project_open1 = gtk_image_menu_item_new_with_mnemonic (_("_Open"));
   gtk_widget_show (project_open1);
   gtk_container_add (GTK_CONTAINER (menu_project1_menu), project_open1);
 
-  image2591 = gtk_image_new_from_stock ("gtk-open", GTK_ICON_SIZE_MENU);
-  gtk_widget_show (image2591);
-  gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (project_open1), image2591);
+  image2610 = gtk_image_new_from_stock ("gtk-open", GTK_ICON_SIZE_MENU);
+  gtk_widget_show (image2610);
+  gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (project_open1), image2610);
 
   project_close1 = gtk_image_menu_item_new_with_mnemonic (_("_Close"));
   gtk_widget_show (project_close1);
   gtk_container_add (GTK_CONTAINER (menu_project1_menu), project_close1);
 
-  image2592 = gtk_image_new_from_stock ("gtk-close", GTK_ICON_SIZE_MENU);
-  gtk_widget_show (image2592);
-  gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (project_close1), image2592);
+  image2611 = gtk_image_new_from_stock ("gtk-close", GTK_ICON_SIZE_MENU);
+  gtk_widget_show (image2611);
+  gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (project_close1), image2611);
 
   separator34 = gtk_separator_menu_item_new ();
   gtk_widget_show (separator34);
@@ -1003,9 +1005,9 @@
   gtk_container_add (GTK_CONTAINER (tools1_menu), menu_choose_color1);
   gtk_tooltips_set_tip (tooltips, menu_choose_color1, _("Open a color chooser dialog, to interactively pick colors from a palette."), NULL);
 
-  image2593 = gtk_image_new_from_stock ("gtk-select-color", GTK_ICON_SIZE_MENU);
-  gtk_widget_show (image2593);
-  gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (menu_choose_color1), image2593);
+  image2612 = gtk_image_new_from_stock ("gtk-select-color", GTK_ICON_SIZE_MENU);
+  gtk_widget_show (image2612);
+  gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (menu_choose_color1), image2612);
 
   menu_count_words1 = gtk_menu_item_new_with_mnemonic (_("_Word Count"));
   gtk_widget_show (menu_count_words1);
@@ -1022,9 +1024,9 @@
   gtk_container_add (GTK_CONTAINER (tools1_menu), menu_reload_configuration1);
   gtk_tooltips_set_tip (tooltips, menu_reload_configuration1, _("Reload configuration data like snippets, templates and filetype extensions."), NULL);
 
-  image2594 = gtk_image_new_from_stock ("gtk-refresh", GTK_ICON_SIZE_MENU);
-  gtk_widget_show (image2594);
-  gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (menu_reload_configuration1), image2594);
+  image2613 = gtk_image_new_from_stock ("gtk-refresh", GTK_ICON_SIZE_MENU);
+  gtk_widget_show (image2613);
+  gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (menu_reload_configuration1), image2613);
 
   menu_help1 = gtk_menu_item_new_with_mnemonic (_("_Help"));
   gtk_widget_show (menu_help1);
@@ -1037,9 +1039,9 @@
   gtk_widget_show (help1);
   gtk_container_add (GTK_CONTAINER (menu_help1_menu), help1);
 
-  image2595 = gtk_image_new_from_stock ("gtk-help", GTK_ICON_SIZE_MENU);
-  gtk_widget_show (image2595);
-  gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (help1), image2595);
+  image2614 = gtk_image_new_from_stock ("gtk-help", GTK_ICON_SIZE_MENU);
+  gtk_widget_show (image2614);
+  gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (help1), image2614);
 
   keyboard_shortcuts1 = gtk_menu_item_new_with_mnemonic (_("_Keyboard Shortcuts"));
   gtk_widget_show (keyboard_shortcuts1);
@@ -1050,6 +1052,10 @@
   gtk_widget_show (website1);
   gtk_container_add (GTK_CONTAINER (menu_help1_menu), website1);
 
+  debug_messages1 = gtk_menu_item_new_with_mnemonic (_("_Debug Messages"));
+  gtk_widget_show (debug_messages1);
+  gtk_container_add (GTK_CONTAINER (menu_help1_menu), debug_messages1);
+
   separator16 = gtk_separator_menu_item_new ();
   gtk_widget_show (separator16);
   gtk_container_add (GTK_CONTAINER (menu_help1_menu), separator16);
@@ -1640,6 +1646,9 @@
   g_signal_connect ((gpointer) website1, "activate",
                     G_CALLBACK (on_website1_activate),
                     NULL);
+  g_signal_connect ((gpointer) debug_messages1, "activate",
+                    G_CALLBACK (on_debug_messages1_activate),
+                    NULL);
   g_signal_connect ((gpointer) menu_info1, "activate",
                     G_CALLBACK (on_info1_activate),
                     NULL);
@@ -1743,7 +1752,7 @@
   GLADE_HOOKUP_OBJECT (window1, file1_menu, "file1_menu");
   GLADE_HOOKUP_OBJECT (window1, menu_new1, "menu_new1");
   GLADE_HOOKUP_OBJECT (window1, menu_new_with_template1, "menu_new_with_template1");
-  GLADE_HOOKUP_OBJECT (window1, image2576, "image2576");
+  GLADE_HOOKUP_OBJECT (window1, image2595, "image2595");
   GLADE_HOOKUP_OBJECT (window1, menu_new_with_template1_menu, "menu_new_with_template1_menu");
   GLADE_HOOKUP_OBJECT (window1, invisible2, "invisible2");
   GLADE_HOOKUP_OBJECT (window1, separator12, "separator12");
@@ -1754,11 +1763,11 @@
   GLADE_HOOKUP_OBJECT (window1, menu_save1, "menu_save1");
   GLADE_HOOKUP_OBJECT (window1, menu_save_as1, "menu_save_as1");
   GLADE_HOOKUP_OBJECT (window1, menu_save_all1, "menu_save_all1");
-  GLADE_HOOKUP_OBJECT (window1, image2577, "image2577");
+  GLADE_HOOKUP_OBJECT (window1, image2596, "image2596");
   GLADE_HOOKUP_OBJECT (window1, menu_reload1, "menu_reload1");
-  GLADE_HOOKUP_OBJECT (window1, image2578, "image2578");
+  GLADE_HOOKUP_OBJECT (window1, image2597, "image2597");
   GLADE_HOOKUP_OBJECT (window1, menu_reload_as1, "menu_reload_as1");
-  GLADE_HOOKUP_OBJECT (window1, image2579, "image2579");
+  GLADE_HOOKUP_OBJECT (window1, image2598, "image2598");
   GLADE_HOOKUP_OBJECT (window1, menu_reload_as1_menu, "menu_reload_as1_menu");
   GLADE_HOOKUP_OBJECT (window1, invisible7, "invisible7");
   GLADE_HOOKUP_OBJECT (window1, separator21, "separator21");
@@ -1769,9 +1778,9 @@
   GLADE_HOOKUP_OBJECT (window1, separator14, "separator14");
   GLADE_HOOKUP_OBJECT (window1, menu_close1, "menu_close1");
   GLADE_HOOKUP_OBJECT (window1, close_other_documents1, "close_other_documents1");
-  GLADE_HOOKUP_OBJECT (window1, image2580, "image2580");
+  GLADE_HOOKUP_OBJECT (window1, image2599, "image2599");
   GLADE_HOOKUP_OBJECT (window1, menu_close_all1, "menu_close_all1");
-  GLADE_HOOKUP_OBJECT (window1, image2581, "image2581");
+  GLADE_HOOKUP_OBJECT (window1, image2600, "image2600");
   GLADE_HOOKUP_OBJECT (window1, menu_separatormenuitem1, "menu_separatormenuitem1");
   GLADE_HOOKUP_OBJECT (window1, menu_quit1, "menu_quit1");
   GLADE_HOOKUP_OBJECT (window1, edit1, "edit1");
@@ -1796,16 +1805,16 @@
   GLADE_HOOKUP_OBJECT (window1, menu_duplicate_line1, "menu_duplicate_line1");
   GLADE_HOOKUP_OBJECT (window1, separator29, "separator29");
   GLADE_HOOKUP_OBJECT (window1, menu_increase_indent1, "menu_increase_indent1");
-  GLADE_HOOKUP_OBJECT (window1, image2582, "image2582");
+  GLADE_HOOKUP_OBJECT (window1, image2601, "image2601");
   GLADE_HOOKUP_OBJECT (window1, menu_decrease_indent1, "menu_decrease_indent1");
-  GLADE_HOOKUP_OBJECT (window1, image2583, "image2583");
+  GLADE_HOOKUP_OBJECT (window1, image2602, "image2602");
   GLADE_HOOKUP_OBJECT (window1, separator37, "separator37");
   GLADE_HOOKUP_OBJECT (window1, send_selection_to2, "send_selection_to2");
   GLADE_HOOKUP_OBJECT (window1, send_selection_to2_menu, "send_selection_to2_menu");
   GLADE_HOOKUP_OBJECT (window1, invisible13, "invisible13");
   GLADE_HOOKUP_OBJECT (window1, separator18, "separator18");
   GLADE_HOOKUP_OBJECT (window1, add_comments1, "add_comments1");
-  GLADE_HOOKUP_OBJECT (window1, image2584, "image2584");
+  GLADE_HOOKUP_OBJECT (window1, image2603, "image2603");
   GLADE_HOOKUP_OBJECT (window1, add_comments1_menu, "add_comments1_menu");
   GLADE_HOOKUP_OBJECT (window1, menu_add_changelog_entry1, "menu_add_changelog_entry1");
   GLADE_HOOKUP_OBJECT (window1, insert_file_header1, "insert_file_header1");
@@ -1814,11 +1823,11 @@
   GLADE_HOOKUP_OBJECT (window1, insert_gpl_notice2, "insert_gpl_notice2");
   GLADE_HOOKUP_OBJECT (window1, insert_bsd_license_notice2, "insert_bsd_license_notice2");
   GLADE_HOOKUP_OBJECT (window1, insert_date1, "insert_date1");
-  GLADE_HOOKUP_OBJECT (window1, image2585, "image2585");
+  GLADE_HOOKUP_OBJECT (window1, image2604, "image2604");
   GLADE_HOOKUP_OBJECT (window1, insert_date1_menu, "insert_date1_menu");
   GLADE_HOOKUP_OBJECT (window1, invisible8, "invisible8");
   GLADE_HOOKUP_OBJECT (window1, insert_include2, "insert_include2");
-  GLADE_HOOKUP_OBJECT (window1, image2586, "image2586");
+  GLADE_HOOKUP_OBJECT (window1, image2605, "image2605");
   GLADE_HOOKUP_OBJECT (window1, insert_include2_menu, "insert_include2_menu");
   GLADE_HOOKUP_OBJECT (window1, invisible4, "invisible4");
   GLADE_HOOKUP_OBJECT (window1, separator9, "separator9");
@@ -1830,7 +1839,7 @@
   GLADE_HOOKUP_OBJECT (window1, find_previous1, "find_previous1");
   GLADE_HOOKUP_OBJECT (window1, find_in_files1, "find_in_files1");
   GLADE_HOOKUP_OBJECT (window1, replace1, "replace1");
-  GLADE_HOOKUP_OBJECT (window1, image2587, "image2587");
+  GLADE_HOOKUP_OBJECT (window1, image2606, "image2606");
   GLADE_HOOKUP_OBJECT (window1, separator33, "separator33");
   GLADE_HOOKUP_OBJECT (window1, find_nextsel1, "find_nextsel1");
   GLADE_HOOKUP_OBJECT (window1, find_prevsel1, "find_prevsel1");
@@ -1839,11 +1848,11 @@
   GLADE_HOOKUP_OBJECT (window1, previous_message1, "previous_message1");
   GLADE_HOOKUP_OBJECT (window1, separator32, "separator32");
   GLADE_HOOKUP_OBJECT (window1, go_to_line1, "go_to_line1");
-  GLADE_HOOKUP_OBJECT (window1, image2588, "image2588");
+  GLADE_HOOKUP_OBJECT (window1, image2607, "image2607");
   GLADE_HOOKUP_OBJECT (window1, menu_view1, "menu_view1");
   GLADE_HOOKUP_OBJECT (window1, menu_view1_menu, "menu_view1_menu");
   GLADE_HOOKUP_OBJECT (window1, menu_change_font1, "menu_change_font1");
-  GLADE_HOOKUP_OBJECT (window1, image2589, "image2589");
+  GLADE_HOOKUP_OBJECT (window1, image2608, "image2608");
   GLADE_HOOKUP_OBJECT (window1, menu_separator4, "menu_separator4");
   GLADE_HOOKUP_OBJECT (window1, menu_toggle_all_additional_widgets1, "menu_toggle_all_additional_widgets1");
   GLADE_HOOKUP_OBJECT (window1, menu_fullscreen1, "menu_fullscreen1");
@@ -1894,28 +1903,29 @@
   GLADE_HOOKUP_OBJECT (window1, menu_project1, "menu_project1");
   GLADE_HOOKUP_OBJECT (window1, menu_project1_menu, "menu_project1_menu");
   GLADE_HOOKUP_OBJECT (window1, project_new1, "project_new1");
-  GLADE_HOOKUP_OBJECT (window1, image2590, "image2590");
+  GLADE_HOOKUP_OBJECT (window1, image2609, "image2609");
   GLADE_HOOKUP_OBJECT (window1, project_open1, "project_open1");
-  GLADE_HOOKUP_OBJECT (window1, image2591, "image2591");
+  GLADE_HOOKUP_OBJECT (window1, image2610, "image2610");
   GLADE_HOOKUP_OBJECT (window1, project_close1, "project_close1");
-  GLADE_HOOKUP_OBJECT (window1, image2592, "image2592");
+  GLADE_HOOKUP_OBJECT (window1, image2611, "image2611");
   GLADE_HOOKUP_OBJECT (window1, separator34, "separator34");
   GLADE_HOOKUP_OBJECT (window1, project_properties1, "project_properties1");
   GLADE_HOOKUP_OBJECT (window1, menu_build1, "menu_build1");
   GLADE_HOOKUP_OBJECT (window1, tools1, "tools1");
   GLADE_HOOKUP_OBJECT (window1, tools1_menu, "tools1_menu");
   GLADE_HOOKUP_OBJECT (window1, menu_choose_color1, "menu_choose_color1");
-  GLADE_HOOKUP_OBJECT (window1, image2593, "image2593");
+  GLADE_HOOKUP_OBJECT (window1, image2612, "image2612");
   GLADE_HOOKUP_OBJECT (window1, menu_count_words1, "menu_count_words1");
   GLADE_HOOKUP_OBJECT (window1, load_tags1, "load_tags1");
   GLADE_HOOKUP_OBJECT (window1, menu_reload_configuration1, "menu_reload_configuration1");
-  GLADE_HOOKUP_OBJECT (window1, image2594, "image2594");
+  GLADE_HOOKUP_OBJECT (window1, image2613, "image2613");
   GLADE_HOOKUP_OBJECT (window1, menu_help1, "menu_help1");
   GLADE_HOOKUP_OBJECT (window1, menu_help1_menu, "menu_help1_menu");
   GLADE_HOOKUP_OBJECT (window1, help1, "help1");
-  GLADE_HOOKUP_OBJECT (window1, image2595, "image2595");
+  GLADE_HOOKUP_OBJECT (window1, image2614, "image2614");
   GLADE_HOOKUP_OBJECT (window1, keyboard_shortcuts1, "keyboard_shortcuts1");
   GLADE_HOOKUP_OBJECT (window1, website1, "website1");
+  GLADE_HOOKUP_OBJECT (window1, debug_messages1, "debug_messages1");
   GLADE_HOOKUP_OBJECT (window1, separator16, "separator16");
   GLADE_HOOKUP_OBJECT (window1, menu_info1, "menu_info1");
   GLADE_HOOKUP_OBJECT (window1, toolbar1, "toolbar1");

Added: trunk/src/log.c
===================================================================
--- trunk/src/log.c	                        (rev 0)
+++ trunk/src/log.c	2008-08-11 18:16:35 UTC (rev 2876)
@@ -0,0 +1,176 @@
+/*
+ *      log.c - this file is part of Geany, a fast and lightweight IDE
+ *
+ *      Copyright 2008 Enrico Tröger <enrico(dot)troeger(at)uvena(dot)de>
+ *      Copyright 2008 Nick Treleaven <nick(dot)treleaven(at)btinternet(dot)com>
+ *
+ *      This program is free software; you can redistribute it and/or modify
+ *      it under the terms of the GNU General Public License as published by
+ *      the Free Software Foundation; either version 2 of the License, or
+ *      (at your option) any later version.
+ *
+ *      This program is distributed in the hope that it will be useful,
+ *      but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *      MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *      GNU General Public License for more details.
+ *
+ *      You should have received a copy of the GNU General Public License
+ *      along with this program; if not, write to the Free Software
+ *      Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ * $Id$
+ */
+
+/*
+ * Logging functions and the debug messages window.
+ */
+
+#include "geany.h"
+
+#ifdef HAVE_LOCALE_H
+# include <locale.h>
+#endif
+
+#include "log.h"
+#include "support.h"
+#include "utils.h"
+#include "ui_utils.h"
+
+
+static GString *log_buffer = NULL;
+
+enum
+{
+	DIALOG_RESPONSE_CLEAR = 1
+};
+
+
+/* Geany's main debug/log function, declared in geany.h */
+void geany_debug(gchar const *format, ...)
+{
+	va_list args;
+	va_start(args, format);
+	g_logv(G_LOG_DOMAIN, G_LOG_LEVEL_INFO, format, args);
+	va_end(args);
+}
+
+
+static void handler_print(const gchar *msg)
+{
+	printf("%s\n", msg);
+	g_string_append_printf(log_buffer, "%s\n", msg);
+}
+
+
+static void handler_printerr(const gchar *msg)
+{
+	fprintf(stderr, "%s\n", msg);
+	g_string_append_printf(log_buffer, "%s\n", msg);
+}
+
+
+static const gchar *get_log_prefix(GLogLevelFlags log_level)
+{
+	switch (log_level & G_LOG_LEVEL_MASK)
+    {
+		case G_LOG_LEVEL_ERROR:
+			return "ERROR\t\t";
+		case G_LOG_LEVEL_CRITICAL:
+			return "CRITICAL\t";
+		case G_LOG_LEVEL_WARNING:
+			return "WARNING\t";
+		case G_LOG_LEVEL_MESSAGE:
+			return "MESSAGE\t";
+		case G_LOG_LEVEL_INFO:
+			return "INFO\t\t";
+		case G_LOG_LEVEL_DEBUG:
+			return "DEBUG\t";
+	}
+	return "LOG";
+}
+
+
+static void handler_log(const gchar *domain, GLogLevelFlags level, const gchar *msg, gpointer data)
+{
+	gchar *time_str;
+	
+#ifndef GEANY_DEBUG
+	if (app != NULL && app->debug_mode)
+#endif
+	{	/* print the message as usual on stdout/stderr */
+		g_log_default_handler(domain, level, msg, data);
+	}
+
+	time_str = utils_get_current_time_string();
+
+	g_string_append_printf(log_buffer, "%s: %s: %s\n", time_str, get_log_prefix(level), msg);
+
+	g_free(time_str);
+}
+
+
+void log_handlers_init(void)
+{
+	log_buffer = g_string_sized_new(2048);
+	
+	g_set_print_handler(handler_print);
+	g_set_printerr_handler(handler_printerr);
+	g_log_set_default_handler(handler_log, NULL);
+}
+
+
+static void on_dialog_response(GtkWidget *dialog, gint response, gpointer user_data)
+{
+	if (response == DIALOG_RESPONSE_CLEAR)
+	{
+		GtkTextIter start_iter, end_iter;
+		GtkTextBuffer *tb = gtk_text_view_get_buffer(GTK_TEXT_VIEW(user_data));
+
+		gtk_text_buffer_get_start_iter(tb, &start_iter);
+		gtk_text_buffer_get_end_iter(tb, &end_iter);
+		gtk_text_buffer_delete(tb, &start_iter, &end_iter);
+
+		g_string_erase(log_buffer, 0, -1);
+	}
+	else
+		gtk_widget_destroy(dialog);
+}
+
+
+void log_show_debug_messages_dialog(void)
+{
+	GtkWidget *dialog, *textview, *vbox, *swin;
+
+	dialog = gtk_dialog_new_with_buttons(_("Debug Messages"), GTK_WINDOW(main_widgets.window),
+				GTK_DIALOG_DESTROY_WITH_PARENT,
+				GTK_STOCK_CLEAR, DIALOG_RESPONSE_CLEAR,
+				GTK_STOCK_CLOSE, GTK_RESPONSE_CLOSE, NULL);
+	vbox = ui_dialog_vbox_new(GTK_DIALOG(dialog));
+	gtk_box_set_spacing(GTK_BOX(vbox), 6);
+	gtk_widget_set_name(dialog, "GeanyDialog");
+
+	gtk_window_set_default_size(GTK_WINDOW(dialog), 450, 250);
+	gtk_dialog_set_default_response(GTK_DIALOG(dialog), GTK_RESPONSE_CANCEL);
+
+	textview = gtk_text_view_new();
+	gtk_text_view_set_editable(GTK_TEXT_VIEW(textview), FALSE);
+	gtk_text_view_set_cursor_visible(GTK_TEXT_VIEW(textview), FALSE);
+	gtk_text_buffer_set_text(gtk_text_view_get_buffer(
+		GTK_TEXT_VIEW(textview)), log_buffer->str, log_buffer->len);
+		
+	swin = gtk_scrolled_window_new(NULL, NULL);
+	gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(swin),
+		GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);
+	gtk_scrolled_window_add_with_viewport(GTK_SCROLLED_WINDOW(swin), textview);
+
+	gtk_box_pack_start(GTK_BOX(vbox), swin, TRUE, TRUE, 0);
+
+	g_signal_connect(dialog, "response", G_CALLBACK(on_dialog_response), textview);
+	gtk_widget_show_all(dialog);
+}
+
+
+void log_finalize(void)
+{
+	g_string_free(log_buffer, TRUE);
+}

Added: trunk/src/log.h
===================================================================
--- trunk/src/log.h	                        (rev 0)
+++ trunk/src/log.h	2008-08-11 18:16:35 UTC (rev 2876)
@@ -0,0 +1,34 @@
+/*
+ *      log.h - this file is part of Geany, a fast and lightweight IDE
+ *
+ *      Copyright 2008 Enrico Tröger <enrico(dot)troeger(at)uvena(dot)de>
+ *      Copyright 2008 Nick Treleaven <nick(dot)treleaven(at)btinternet(dot)com>
+ *
+ *      This program is free software; you can redistribute it and/or modify
+ *      it under the terms of the GNU General Public License as published by
+ *      the Free Software Foundation; either version 2 of the License, or
+ *      (at your option) any later version.
+ *
+ *      This program is distributed in the hope that it will be useful,
+ *      but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *      MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *      GNU General Public License for more details.
+ *
+ *      You should have received a copy of the GNU General Public License
+ *      along with this program; if not, write to the Free Software
+ *      Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ * $Id$
+ */
+
+
+#ifndef GEANY_LOG_H
+#define GEANY_LOG_H
+
+void log_handlers_init(void);
+
+void log_finalize(void);
+
+void log_show_debug_messages_dialog(void);
+
+#endif

Modified: trunk/src/main.c
===================================================================
--- trunk/src/main.c	2008-08-11 16:57:40 UTC (rev 2875)
+++ trunk/src/main.c	2008-08-11 18:16:35 UTC (rev 2876)
@@ -47,7 +47,7 @@
 #include "interface.h"
 #include "support.h"
 #include "callbacks.h"
-
+#include "log.h"
 #include "ui_utils.h"
 #include "utils.h"
 #include "document.h"
@@ -149,21 +149,6 @@
 
 
 
-/* Geany main debug function */
-void geany_debug(gchar const *format, ...)
-{
-#ifndef GEANY_DEBUG
-	if (app != NULL && app->debug_mode)
-#endif
-	{
-		va_list args;
-		va_start(args, format);
-		g_logv(G_LOG_DOMAIN, G_LOG_LEVEL_INFO, format, args);
-		va_end(args);
-	}
-}
-
-
 /* special things for the initial setup of the checkboxes and related stuff
  * an action on a setting is only performed if the setting is not equal to the program default
  * (all the following code is not perfect but it works for the moment) */
@@ -727,6 +712,8 @@
 	gint config_dir_result;
 	gboolean load_project_from_cl = FALSE;
 
+	log_handlers_init();
+	
 	app = g_new0(GeanyApp, 1);
 	memset(&main_status, 0, sizeof(GeanyStatus));
 	memset(&prefs, 0, sizeof(GeanyPrefs));
@@ -936,6 +923,7 @@
 	editor_finalize();
 	editor_snippets_free();
 	encodings_finalize();
+	log_finalize();
 
 	tm_workspace_free(TM_WORK_OBJECT(app->tm_workspace));
 	g_free(app->configdir);

Modified: trunk/src/makefile.win32
===================================================================
--- trunk/src/makefile.win32	2008-08-11 16:57:40 UTC (rev 2875)
+++ trunk/src/makefile.win32	2008-08-11 18:16:35 UTC (rev 2876)
@@ -62,7 +62,7 @@
 
 OBJS =	about.o build.o callbacks.o dialogs.o document.o editor.o encodings.o filetypes.o \
 		geanyobject.o geanywraplabel.o highlighting.o interface.o keybindings.o keyfile.o \
-		main.o msgwindow.o navqueue.o notebook.o plugins.o prefs.o printing.o project.o \
+		log.o main.o msgwindow.o navqueue.o notebook.o plugins.o prefs.o printing.o project.o \
 		sciwrappers.o search.o socket.o support.o symbols.o templates.o treeviews.o tools.o \
 		ui_utils.o utils.o win32.o
 

Modified: trunk/wscript
===================================================================
--- trunk/wscript	2008-08-11 16:57:40 UTC (rev 2875)
+++ trunk/wscript	2008-08-11 18:16:35 UTC (rev 2876)
@@ -86,7 +86,7 @@
     'src/about.c', 'src/build.c', 'src/callbacks.c', 'src/dialogs.c', 'src/document.c',
     'src/editor.c', 'src/encodings.c', 'src/filetypes.c', 'src/geanyobject.c',
     'src/geanywraplabel.c', 'src/highlighting.c', 'src/interface.c', 'src/keybindings.c',
-    'src/keyfile.c', 'src/main.c', 'src/msgwindow.c', 'src/navqueue.c', 'src/notebook.c',
+    'src/keyfile.c', 'src/log.c', 'src/main.c', 'src/msgwindow.c', 'src/navqueue.c', 'src/notebook.c',
     'src/plugins.c', 'src/prefix.c', 'src/prefs.c', 'src/printing.c', 'src/project.c',
     'src/sciwrappers.c', 'src/search.c', 'src/socket.c', 'src/support.c', 'src/symbols.c',
     'src/templates.c', 'src/tools.c', 'src/treeviews.c', 'src/ui_utils.c', 'src/utils.c' ]


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