Revision: 5039 http://geany.svn.sourceforge.net/geany/?rev=5039&view=rev Author: statc Date: 2010-06-17 14:54:23 +0000 (Thu, 17 Jun 2010)
Log Message: ----------- SM: do not rely on Geany session management and always specify required file names in restore command
Modified Paths: -------------- branches/sm/src/main.c branches/sm/src/main.h branches/sm/src/sm.c branches/sm/src/socket.c
Modified: branches/sm/src/main.c =================================================================== --- branches/sm/src/main.c 2010-06-17 14:53:59 UTC (rev 5038) +++ branches/sm/src/main.c 2010-06-17 14:54:23 UTC (rev 5039) @@ -888,7 +888,7 @@ }
-void main_load_project_from_command_line(const gchar *locale_filename) +void main_load_project_from_command_line(const gchar *locale_filename, gboolean use_session) { gchar *pfile = NULL;
@@ -898,13 +898,18 @@ pfile = g_strdup(locale_filename);
if (pfile != NULL) - project_load_file_with_session(pfile); + { + if (use_session) + project_load_file_with_session(pfile); + else + project_load_file(pfile); + }
g_free(pfile); }
-static void load_startup_files(gint argc, gchar **argv) +static void load_startup_files(gint argc, gchar **argv, gboolean restoring) { gboolean load_default_session = TRUE;
@@ -915,7 +920,9 @@
if (cl_options.project) { - main_load_project_from_command_line(cl_options.project); + /* when being restored by session manager, do not open file names from project session file, + * because required file names are passed via command-line and handled by open_cl_files() */ + main_load_project_from_command_line(cl_options.project, !restoring); load_default_session = FALSE; }
@@ -924,7 +931,8 @@ /* load filenames from the default session into global session_files variable */ load_session_project_file(); /* load files into tabs, as they are found in the session_files variable */ - configuration_open_files(); + if (!restoring) + configuration_open_files(); }
open_cl_files(argc, argv); @@ -1101,7 +1109,7 @@
/* load any command line files or session files */ main_status.opening_session_files = TRUE; - load_startup_files(argc, argv); + load_startup_files(argc, argv, libsm_client_id != NULL); main_status.opening_session_files = FALSE;
/* open a new file if no other file was opened */
Modified: branches/sm/src/main.h =================================================================== --- branches/sm/src/main.h 2010-06-17 14:53:59 UTC (rev 5038) +++ branches/sm/src/main.h 2010-06-17 14:54:23 UTC (rev 5039) @@ -84,6 +84,6 @@
gboolean main_is_realized(void);
-void main_load_project_from_command_line(const gchar *locale_filename); +void main_load_project_from_command_line(const gchar *locale_filename, gboolean use_session);
#endif
Modified: branches/sm/src/sm.c =================================================================== --- branches/sm/src/sm.c 2010-06-17 14:53:59 UTC (rev 5038) +++ branches/sm/src/sm.c 2010-06-17 14:54:23 UTC (rev 5039) @@ -469,48 +469,42 @@ */ static void sm_files_props(GArray * arr) { - gboolean store_project = TRUE, store_files = TRUE; SmPropValue val; - gint i; + gint i, page_count;
- if (cl_options.load_session) - /* Files will be restored by Geany session management facilities. */ - store_project = store_files = FALSE; + /* Unfortunately, we can't rely entirely on Geany session management facilities and have to pass + * active project and opened files even if they are probably, for example, stored in geany.conf */
- if (store_project && app->project) + /* Specify active project */ + + if (app->project) { gchar * locale_filename = utils_get_locale_from_utf8(app->project->file_name); val.value = g_strconcat("--project=", locale_filename, NULL); val.length = strlen(val.value); g_free(locale_filename); g_array_append_val(arr, val); - - if (project_prefs.project_session) - /* Files will be restored when the project is reopened. */ - store_files = FALSE; }
- if (store_files) - { - /* Specify file names in the command line */ - const gint page_count = gtk_notebook_get_n_pages(GTK_NOTEBOOK(main_widgets.notebook)); + /* Specify opened files */
- val.length = 2; - val.value = g_strdup("--"); - g_array_append_val(arr, val); + val.length = 2; + val.value = g_strdup("--"); + g_array_append_val(arr, val);
- /* NOTE: compare this cycle with the one inside - * configuration_save_session_files() function in keyfile.c. */ - for (i = 0; i < page_count; i++) + page_count = gtk_notebook_get_n_pages(GTK_NOTEBOOK(main_widgets.notebook)); + + /* NOTE: compare this cycle with the one inside + * configuration_save_session_files() function in keyfile.c. */ + for (i = 0; i < page_count; i++) + { + GeanyDocument * doc = document_get_from_page(i); + if (doc && doc->real_path) { - GeanyDocument * doc = document_get_from_page(i); - if (doc && doc->real_path) - { - gchar * locale_filename = utils_get_locale_from_utf8(doc->file_name); - val.value = locale_filename; - val.length = strlen(val.value); - g_array_append_val(arr, val); - } + gchar * locale_filename = utils_get_locale_from_utf8(doc->file_name); + val.value = locale_filename; + val.length = strlen(val.value); + g_array_append_val(arr, val); } } }
Modified: branches/sm/src/socket.c =================================================================== --- branches/sm/src/socket.c 2010-06-17 14:53:59 UTC (rev 5038) +++ branches/sm/src/socket.c 2010-06-17 14:54:23 UTC (rev 5039) @@ -573,7 +573,7 @@ if (project) { if (project_ask_close()) - main_load_project_from_command_line(locale_filename); + main_load_project_from_command_line(locale_filename, TRUE); } else main_handle_filename(locale_filename);
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.