Revision: 4693 http://geany.svn.sourceforge.net/geany/?rev=4693&view=rev Author: statc Date: 2010-02-22 22:11:54 +0000 (Mon, 22 Feb 2010)
Log Message: ----------- Remember opened project across restarts.
Modified Paths: -------------- branches/sm/ChangeLog branches/sm/src/sm.c
Modified: branches/sm/ChangeLog =================================================================== --- branches/sm/ChangeLog 2010-02-22 22:11:21 UTC (rev 4692) +++ branches/sm/ChangeLog 2010-02-22 22:11:54 UTC (rev 4693) @@ -2,6 +2,8 @@
* src/main.c, src/main.h, src/socket.c: Use a separate command-line option to specify a project to be opened. + * src/sm.c: + Remember opened project across restarts.
2010-02-15 Eugene Arshinov <earshinov(at)gmail(dot)com>
Modified: branches/sm/src/sm.c =================================================================== --- branches/sm/src/sm.c 2010-02-22 22:11:21 UTC (rev 4692) +++ branches/sm/src/sm.c 2010-02-22 22:11:54 UTC (rev 4693) @@ -60,6 +60,7 @@ #include "ui_utils.h" /* access main_widgets.notebook to iterate over opened docs */ #include "document.h" #include "utils.h" +#include "project.h"
static void ice_connection_watch(IceConn icecon, IcePointer client_data, Bool opening, @@ -387,19 +388,16 @@ static void sm_set_runtime_props(SmcConn smcon) { GArray * arr = g_array_new(FALSE, FALSE, sizeof(SmPropValue)); - gint arr_filenames_begin = -1; - GOptionEntry * optentry; SmPropValue val; SmProp * prop; SmProp restart_command_prop, clone_command_prop; gint i;
- g_array_append_val(arr, sm_program_val); - /* "libsm-client-id" option requires special handling */ g_array_append_val(arr, sm_client_id_arg_val); - /* handle other command-line options */ + + /* Handle command-line options */ for (i = 0, optentry = optentries; optentry->long_name; i++, optentry++) { if (optentries_aux[i].persist_upon_restart) @@ -408,8 +406,8 @@ gchar ** ss = (gchar **)arr2->data; for (; *ss; ss++) { - val.length = strlen(*ss); val.value = *ss; + val.length = strlen(val.value); g_array_append_val(arr, val); } /* elements are freed after `arr' is used */ @@ -417,44 +415,44 @@ } }
- + /* Handle opened files */ if (cl_options.load_session) { - /* - * Files will be restored by Geany session management facilities. - * NOTE: the condition matches the one inside configuration_save() function in keyfile.c. - */ + /* Files will be restored by Geany session management facilities. */ } + else if (app->project) + { + /* Files will be restored when the project is reopened. */ + 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); + } else { /* Specify file names in the command line */ const gint page_count = gtk_notebook_get_n_pages(GTK_NOTEBOOK(main_widgets.notebook));
val.length = 2; - val.value = "--"; + val.value = g_strdup("--"); g_array_append_val(arr, val); - arr_filenames_begin = arr->len;
- /* - * NOTE: compare this cycle with the one inside - * configuration_save_session_files() function in keyfile.c. - */ + /* 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) { - /* freed after `arr' is used */ gchar * locale_filename = utils_get_locale_from_utf8(doc->file_name); - - val.length = strlen(locale_filename); val.value = locale_filename; + val.length = strlen(val.value); g_array_append_val(arr, val); } } }
- restart_command_prop.name = SmRestartCommand; restart_command_prop.type = SmLISTofARRAY8; restart_command_prop.num_vals = arr->len; @@ -462,10 +460,8 @@ prop = &restart_command_prop; SmcSetProperties(smcon, 1, &prop);
- /* - * We should not specify client ID in SmCloneCommand, - * so "remove" the corresponding element from `arr'. - */ + /* We should not specify client ID in SmCloneCommand, + * so "remove" the corresponding element from `arr'. */ ((SmPropValue *)arr->data)[1] = sm_program_val; clone_command_prop.name = SmCloneCommand; clone_command_prop.type = SmLISTofARRAY8; @@ -474,11 +470,8 @@ prop = &clone_command_prop; SmcSetProperties(smcon, 1, &prop);
- - /* free allocated strings storing command-line options and file names */ for (i = 2; i < (gint)arr->len; i++) - if (i != (arr_filenames_begin - 1)) - g_free(((SmPropValue *)arr->data)[i].value); + g_free(((SmPropValue *)arr->data)[i].value); g_array_free(arr, TRUE); }
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.