SF.net SVN: geany:[5041] branches/sm/src

statc at users.sourceforge.net statc at xxxxx
Thu Jun 17 14:55:15 UTC 2010


Revision: 5041
          http://geany.svn.sourceforge.net/geany/?rev=5041&view=rev
Author:   statc
Date:     2010-06-17 14:55:15 +0000 (Thu, 17 Jun 2010)

Log Message:
-----------
Update for r4974: add some checks to prevent unnecessary writes to geany.conf; do not touch recent lists while being restored by session manager

Modified Paths:
--------------
    branches/sm/src/keyfile.c
    branches/sm/src/main.c
    branches/sm/src/main.h
    branches/sm/src/ui_utils.c

Modified: branches/sm/src/keyfile.c
===================================================================
--- branches/sm/src/keyfile.c	2010-06-17 14:54:46 UTC (rev 5040)
+++ branches/sm/src/keyfile.c	2010-06-17 14:55:15 UTC (rev 5041)
@@ -575,6 +575,16 @@
 {
 	GKeyFile *config;
 	gchar *configfile;
+	gboolean write_recent_files, write_recent_projects, write_other;
+
+	write_recent_files = ((flags & GEANY_SETTINGS_RECENT_FILES) &&
+		ui_prefs.recent_queue->length > 0);
+	write_recent_projects = ((flags & GEANY_SETTINGS_RECENT_PROJECTS) &&
+		ui_prefs.recent_projects_queue->length > 0);
+	write_other = (flags & ~(GEANY_SETTINGS_RECENT_FILES | GEANY_SETTINGS_RECENT_PROJECTS));
+	if (!write_recent_files && !write_recent_projects && !write_other)
+		return; /* nothing to do */
+
 	open_config(&config, &configfile);
 
 	/* this signal can be used e.g. to prepare any settings before Stash code reads them below */
@@ -592,13 +602,13 @@
 			configuration_save_session_files(config);
 	}
 
-	if (flags & GEANY_SETTINGS_RECENT_FILES)
+	if (write_recent_files)
 	{
 		load_recent_files(config, ui_prefs.recent_queue, "recent_files");
 		save_recent_files(config, ui_prefs.recent_queue, "recent_files");
 	}
 
-	if (flags & GEANY_SETTINGS_RECENT_PROJECTS)
+	if (write_recent_projects)
 	{
 		load_recent_files(config, ui_prefs.recent_projects_queue, "recent_projects");
 		save_recent_files(config, ui_prefs.recent_projects_queue, "recent_projects");

Modified: branches/sm/src/main.c
===================================================================
--- branches/sm/src/main.c	2010-06-17 14:54:46 UTC (rev 5040)
+++ branches/sm/src/main.c	2010-06-17 14:55:15 UTC (rev 5041)
@@ -279,6 +279,7 @@
 	ui_prefs.recent_projects_queue		= g_queue_new();
 	ui_prefs.closed_queue				= g_queue_new();
 	main_status.opening_session_files	= FALSE;
+	main_status.restoring = FALSE;
 
 	ui_init_stock_items();
 
@@ -909,7 +910,7 @@
 }
 
 
-static void load_startup_files(gint argc, gchar **argv, gboolean restoring)
+static void load_startup_files(gint argc, gchar **argv)
 {
 	gboolean load_default_session = TRUE;
 
@@ -922,7 +923,7 @@
 	{
 		/* Do not load project session files if we are being restored by session manager:
 		 * corresponding file names are passed via command-line and will be handled by open_cl_files() */
-		main_load_project_from_command_line(cl_options.project, !restoring);
+		main_load_project_from_command_line(cl_options.project, !main_status.restoring);
 		load_default_session = FALSE;
 	}
 
@@ -931,9 +932,9 @@
 		/* Load project session file (if any) writing its filenames into global session_files variable.
 		 * Don't load filenames when being restored by session manager: in that case file names are
 		 * passed via command line and will be opened by open_cl_files() */
-		load_session_project_file(!restoring);
+		load_session_project_file(!main_status.restoring);
 		/* load files into tabs, as they are found in the session_files variable */
-		if (!restoring)
+		if (!main_status.restoring)
 			configuration_open_files();
 	}
 
@@ -1111,8 +1112,11 @@
 
 	/* load any command line files or session files */
 	main_status.opening_session_files = TRUE;
-	load_startup_files(argc, argv, libsm_client_id != NULL);
+	if (libsm_client_id != NULL)
+		main_status.restoring = TRUE;
+	load_startup_files(argc, argv);
 	main_status.opening_session_files = FALSE;
+	main_status.restoring = FALSE;
 
 	/* open a new file if no other file was opened */
 	document_new_file_if_non_open();

Modified: branches/sm/src/main.h
===================================================================
--- branches/sm/src/main.h	2010-06-17 14:54:46 UTC (rev 5040)
+++ branches/sm/src/main.h	2010-06-17 14:55:15 UTC (rev 5041)
@@ -62,6 +62,7 @@
 							  * (used to prevent notebook switch page signals) */
 	gboolean	quitting;	/* state when Geany is quitting completely */
 	gboolean	main_window_realized;
+	gboolean	restoring;  /* being restored by session manager */
 }
 GeanyStatus;
 

Modified: branches/sm/src/ui_utils.c
===================================================================
--- branches/sm/src/ui_utils.c	2010-06-17 14:54:46 UTC (rev 5040)
+++ branches/sm/src/ui_utils.c	2010-06-17 14:55:15 UTC (rev 5041)
@@ -52,6 +52,7 @@
 #include "toolbar.h"
 #include "geanymenubuttonaction.h"
 #include "keyfile.h"
+#include "main.h"
 
 GeanyInterfacePrefs	interface_prefs;
 GeanyMainWidgets	main_widgets;
@@ -1078,11 +1079,15 @@
 			}
 		}
 #endif
-		g_queue_push_head(grf->recent_queue, g_strdup(utf8_filename));
-		if (g_queue_get_length(grf->recent_queue) > file_prefs.mru_length)
+
+		/* do not touch recent lists while being restored by session manager */
+		if (!main_status.restoring)
 		{
-			g_free(g_queue_pop_tail(grf->recent_queue));
+			g_queue_push_head(grf->recent_queue, g_strdup(utf8_filename));
+			if (g_queue_get_length(grf->recent_queue) > file_prefs.mru_length)
+				g_free(g_queue_pop_tail(grf->recent_queue));
 		}
+
 		update_recent_menu(grf);
 	}
 	/* filename already in recent list */
@@ -1093,6 +1098,10 @@
 
 void ui_add_recent_file(const gchar *utf8_filename, gboolean update_config)
 {
+	/* do not touch recent lists while being restored by session manager */
+	if (main_status.restoring)
+		return;
+
 	add_recent_file(utf8_filename, recent_get_recent_files());
 	if (update_config)
 		configuration_save(GEANY_SETTINGS_RECENT_FILES);
@@ -1101,6 +1110,10 @@
 
 void ui_add_recent_project_file(const gchar *utf8_filename)
 {
+	/* do not touch recent lists while being restored by session manager */
+	if (main_status.restoring)
+		return;
+
 	add_recent_file(utf8_filename, recent_get_recent_projects());
 	configuration_save(GEANY_SETTINGS_RECENT_PROJECTS);
 }
@@ -1137,16 +1150,20 @@
 	void *data;
 	GtkWidget *tmp;
 
-	/* first reorder the queue */
-	item = g_queue_find_custom(grf->recent_queue, utf8_filename, (GCompareFunc) strcmp);
-	if (item != NULL)
+	/* first reorder the queue.
+	 * if we are being restored by session manager, we shouldn't touch it */
+	if (!main_status.restoring)
 	{
-		data = item->data;
-		g_queue_remove(grf->recent_queue, data);
+		item = g_queue_find_custom(grf->recent_queue, utf8_filename, (GCompareFunc) strcmp);
+		if (item != NULL)
+		{
+			data = item->data;
+			g_queue_remove(grf->recent_queue, data);
+		}
+		else
+			data = g_strdup(utf8_filename);
+		g_queue_push_head(grf->recent_queue, data);
 	}
-	else
-		data = g_strdup(utf8_filename);
-	g_queue_push_head(grf->recent_queue, data);
 
 	/* remove the old menuitem for the filename */
 	children = gtk_container_get_children(GTK_CONTAINER(grf->menubar));


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