Revision: 1468 http://svn.sourceforge.net/geany/?rev=1468&view=rev Author: ntrel Date: 2007-04-21 05:25:17 -0700 (Sat, 21 Apr 2007)
Log Message: ----------- Restore the current project when restarting Geany.
Modified Paths: -------------- trunk/ChangeLog trunk/src/keyfile.c trunk/src/main.c trunk/src/project.c trunk/src/project.h
Modified: trunk/ChangeLog =================================================================== --- trunk/ChangeLog 2007-04-20 16:43:11 UTC (rev 1467) +++ trunk/ChangeLog 2007-04-21 12:25:17 UTC (rev 1468) @@ -1,3 +1,9 @@ +2007-04-21 Nick Treleaven nick.treleaven@btinternet.com + + * src/project.c, src/project.h, src/keyfile.c, src/main.c: + Restore the current project when restarting Geany. + + 2007-04-20 Nick Treleaven nick.treleaven@btinternet.com
* doc/geany.docbook:
Modified: trunk/src/keyfile.c =================================================================== --- trunk/src/keyfile.c 2007-04-20 16:43:11 UTC (rev 1467) +++ trunk/src/keyfile.c 2007-04-21 12:25:17 UTC (rev 1468) @@ -47,6 +47,7 @@ #include "main.h" #include "msgwindow.h" #include "search.h" +#include "project.h"
static gchar *scribble_text = NULL; @@ -282,8 +283,8 @@
g_key_file_set_string(config, "search", "fif_extra_options", search_prefs.fif_extra_options ? search_prefs.fif_extra_options : "");
+ project_save_prefs(config); // save project filename, etc. save_recent_files(config); - save_session_files(config);
// write the file @@ -539,6 +540,7 @@
search_prefs.fif_extra_options = utils_get_setting_string(config, "search", "fif_extra_options", "");
+ project_load_prefs(config); load_file_lists(config);
g_key_file_free(config);
Modified: trunk/src/main.c =================================================================== --- trunk/src/main.c 2007-04-20 16:43:11 UTC (rev 1467) +++ trunk/src/main.c 2007-04-21 12:25:17 UTC (rev 1468) @@ -551,6 +551,22 @@ }
+static void load_project_file() +{ + gchar *locale_filename; + + g_return_if_fail(project_prefs.session_file != NULL); + + locale_filename = utils_get_locale_from_utf8(project_prefs.session_file); + + if (*locale_filename) + project_load_file(locale_filename); + + g_free(locale_filename); + g_free(project_prefs.session_file); // no longer needed +} + + gint main(gint argc, gchar **argv) { gint idx; @@ -672,6 +688,9 @@ { if (app->pref_main_load_session && cl_options.load_session) { + load_project_file(); + + // load session files if (! configuration_open_files()) { ui_update_popup_copy_items(-1);
Modified: trunk/src/project.c =================================================================== --- trunk/src/project.c 2007-04-20 16:43:11 UTC (rev 1467) +++ trunk/src/project.c 2007-04-21 12:25:17 UTC (rev 1468) @@ -35,11 +35,15 @@ #include "utils.h" #include "ui_utils.h" #include "msgwindow.h" +#include "main.h" #ifdef G_OS_WIN32 # include "win32.h" #endif
+ProjectPrefs project_prefs = {NULL}; + + static gboolean entries_modified;
// simple struct to keep references to the elements of the properties dialog @@ -751,15 +755,17 @@ gchar *filename = gtk_file_chooser_get_filename(GTK_FILE_CHOOSER(dialog));
// try to load the config - if (load_config(filename)) + if (project_load_file(filename)) { gtk_widget_destroy(GTK_WIDGET(dialog)); - msgwin_status_add(_("Project "%s" opened."), app->project->name); } else { - SHOW_ERR(_("Project file could not be loaded.")); + gchar *utf8_filename = utils_get_utf8_from_locale(filename); + + SHOW_ERR(_("Project file "%s" could not be loaded."), utf8_filename); gtk_widget_grab_focus(GTK_WIDGET(dialog)); + g_free(utf8_filename); } g_free(filename); } @@ -769,6 +775,26 @@ #endif
+gboolean project_load_file(const gchar *locale_file_name) +{ + g_return_val_if_fail(locale_file_name != NULL, FALSE); + + if (load_config(locale_file_name)) + { + msgwin_status_add(_("Project "%s" opened."), app->project->name); + return TRUE; + } + else + { + gchar *utf8_filename = utils_get_utf8_from_locale(locale_file_name); + + msgwin_status_add(_("Project file "%s" could not be loaded."), utf8_filename); + g_free(utf8_filename); + } + return FALSE; +} + + /* Reads the given filename and creates a new project with the data found in the file. * At this point there should not be an already opened project in Geany otherwise it will just * return. @@ -781,8 +807,6 @@ // there should not be an open project g_return_val_if_fail(app->project == NULL && filename != NULL, FALSE);
- p = app->project = g_new0(GeanyProject, 1); - config = g_key_file_new(); if (! g_key_file_load_from_file(config, filename, G_KEY_FILE_KEEP_COMMENTS, NULL)) { @@ -790,6 +814,8 @@ return FALSE; }
+ p = app->project = g_new0(GeanyProject, 1); + p->name = utils_get_setting_string(config, "project", "name", GEANY_STRING_UNTITLED); p->description = utils_get_setting_string(config, "project", "description", ""); p->file_name = utils_get_utf8_from_locale(filename); @@ -853,3 +879,26 @@ }
+void project_save_prefs(GKeyFile *config) +{ + GeanyProject *project = app->project; + + if (cl_options.load_session) + { + gchar *utf8_filename = (project == NULL) ? "" : project->file_name; + + g_key_file_set_string(config, "project", "session_file", utf8_filename); + } +} + + +void project_load_prefs(GKeyFile *config) +{ + if (cl_options.load_session) + { + g_return_if_fail(project_prefs.session_file == NULL); + project_prefs.session_file = utils_get_setting_string(config, "project", + "session_file", ""); + } +} +
Modified: trunk/src/project.h =================================================================== --- trunk/src/project.h 2007-04-20 16:43:11 UTC (rev 1467) +++ trunk/src/project.h 2007-04-21 12:25:17 UTC (rev 1468) @@ -41,7 +41,14 @@ gchar **file_patterns; // array of filename extension patterns };
+typedef struct +{ + gchar *session_file; +} ProjectPrefs;
+extern ProjectPrefs project_prefs; + + void project_new();
void project_open(); @@ -51,6 +58,13 @@ void project_properties();
+gboolean project_load_file(const gchar *locale_file_name); + const gchar *project_get_make_dir();
+ +void project_save_prefs(GKeyFile *config); + +void project_load_prefs(GKeyFile *config); + #endif
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.