Revision: 2043 http://geany.svn.sourceforge.net/geany/?rev=2043&view=rev Author: eht16 Date: 2007-11-11 11:06:41 -0800 (Sun, 11 Nov 2007)
Log Message: ----------- Apply patch from Bo Lorentsen to add support for project session files (thank you).
Modified Paths: -------------- trunk/ChangeLog trunk/THANKS trunk/src/keyfile.c trunk/src/keyfile.h trunk/src/main.c trunk/src/project.c trunk/src/project.h
Modified: trunk/ChangeLog =================================================================== --- trunk/ChangeLog 2007-11-11 10:19:50 UTC (rev 2042) +++ trunk/ChangeLog 2007-11-11 19:06:41 UTC (rev 2043) @@ -9,8 +9,10 @@ Enable close tab on middle-clicking a notebook tab label. Enable toggle additional widgets on double-clicking notebook tab label. + * THANKS, src/project.c, src/project.h, src/keyfile.c, src/keyfile.h, + src/main.c: Apply patch from Bo Lorentsen to add support for project + session files (thank you).
- 2007-11-08 Nick Treleaven <nick(dot)treleaven(at)btinternet(dot)com>
* src/prefs.c:
Modified: trunk/THANKS =================================================================== --- trunk/THANKS 2007-11-11 10:19:50 UTC (rev 2042) +++ trunk/THANKS 2007-11-11 19:06:41 UTC (rev 2043) @@ -38,6 +38,7 @@ blackdog <blackdog(at)ipowerhouse(dot)com> - Haxe filetype patch Sebastian Kraft <kraft(dot)sebastian(at)googlemail(dot)com> - new Geany icon Catalin Marinas <catalin(dot)marinas(at)gmail(dot)com> - newline strips trailing spaces patch +Bo Lorentsen <bl(at)lue(dot)dk> - project session patch
Translators: ------------
Modified: trunk/src/keyfile.c =================================================================== --- trunk/src/keyfile.c 2007-11-11 10:19:50 UTC (rev 2042) +++ trunk/src/keyfile.c 2007-11-11 19:06:41 UTC (rev 2043) @@ -87,7 +87,7 @@ }
-static void save_session_files(GKeyFile *config) +void configuration_save_session_files(GKeyFile *config) { gint idx, npage; gchar *tmp; @@ -350,7 +350,7 @@ save_ui_prefs(config); project_save_prefs(config); // save project filename, etc. save_recent_files(config); - save_session_files(config); + configuration_save_session_files(config);
// write the file data = g_key_file_to_data(config, NULL, NULL); @@ -361,8 +361,11 @@ g_free(configfile); }
- -static void load_file_lists(GKeyFile *config) +/* + * Load session list from the given keyfile, and store it in the global + * session_files variable for later file loading + * */ +void configuration_load_session_files(GKeyFile *config) { gchar **recent_files; guint i; @@ -385,6 +388,10 @@ } g_strfreev(recent_files);
+ // the project may load another list than the main setting + if (session_files != NULL) + g_ptr_array_free(session_files, TRUE); + session_files = g_ptr_array_new(); have_session_files = TRUE; i = 0; @@ -681,7 +688,7 @@ load_dialog_prefs(config); load_ui_prefs(config); project_load_prefs(config); - load_file_lists(config); + configuration_load_session_files(config);
g_key_file_free(config); g_free(configfile); @@ -761,6 +768,7 @@ document_colourise_new();
g_ptr_array_free(session_files, TRUE); + session_files = NULL;
if (failure) ui_set_statusbar(TRUE, _("Failed to load one or more session files."));
Modified: trunk/src/keyfile.h =================================================================== --- trunk/src/keyfile.h 2007-11-11 10:19:50 UTC (rev 2042) +++ trunk/src/keyfile.h 2007-11-11 19:06:41 UTC (rev 2043) @@ -31,6 +31,10 @@
gboolean configuration_open_files();
+void configuration_load_session_files(GKeyFile *config); + +void configuration_save_session_files(GKeyFile *config); + void configuration_read_filetype_extensions();
void configuration_read_autocompletions();
Modified: trunk/src/main.c =================================================================== --- trunk/src/main.c 2007-11-11 10:19:50 UTC (rev 2042) +++ trunk/src/main.c 2007-11-11 19:06:41 UTC (rev 2043) @@ -733,7 +733,7 @@ { load_project_file();
- // load session files + // load session files into tabs, as they are found in the session_files variable if (! configuration_open_files()) { ui_update_popup_copy_items(-1); @@ -790,6 +790,9 @@ if (want_plugins) plugins_free(); #endif + if (app->project != NULL) + project_close(); + navqueue_free(); keybindings_free(); filetypes_save_commands(); @@ -802,7 +805,6 @@ document_finalize(); symbols_finalize(); editor_finalize(); - if (app->project != NULL) project_close();
tm_workspace_free(TM_WORK_OBJECT(app->tm_workspace)); g_free(app->configdir);
Modified: trunk/src/project.c =================================================================== --- trunk/src/project.c 2007-11-11 10:19:50 UTC (rev 2042) +++ trunk/src/project.c 2007-11-11 19:06:41 UTC (rev 2043) @@ -37,6 +37,7 @@ #include "ui_utils.h" #include "msgwindow.h" #include "main.h" +#include "keyfile.h" #ifdef G_OS_WIN32 # include "win32.h" #endif @@ -208,6 +209,7 @@ goto retry; } g_free(filename); + configuration_open_files(); } } #endif @@ -229,7 +231,12 @@ file = win32_show_project_open_dialog(_("Open Project"), dir, FALSE); if (file != NULL) { - load_config(file); + // try to load the config + if (! project_load_file(file)) + { + SHOW_ERR1(_("Project file "%s" could not be loaded."), file); + } + configuration_open_files(); g_free(file); } #else @@ -282,13 +289,21 @@ }
+void project_save() +{ + g_return_if_fail(app->project != NULL); + + write_config(); + + ui_set_statusbar(TRUE, _("Project "%s" saved."), app->project->name); +} + + void project_close() { + //~ gint i, max = gtk_notebook_get_n_pages(GTK_NOTEBOOK(app->notebook)); g_return_if_fail(app->project != NULL);
- /// TODO handle open project files - - write_config(); ui_set_statusbar(TRUE, _("Project "%s" closed."), app->project->name);
g_free(app->project->name); @@ -300,6 +315,16 @@ g_free(app->project); app->project = NULL;
+/// TODO really close all tabs? maybe it should configurable +/* + for(i = 0; i < max; i++) + { + if (! document_remove(0)) + break; + } + tm_workspace_update(TM_WORK_OBJECT(app->tm_workspace), TRUE, TRUE, FALSE); +*/ + update_ui(); }
@@ -834,6 +859,9 @@ p->run_cmd = utils_get_setting_string(config, "project", "run_cmd", ""); p->file_patterns = g_key_file_get_string_list(config, "project", "file_patterns", NULL, NULL);
+ // fetch session files too + configuration_load_session_files(config); + g_key_file_free(config);
update_ui(); @@ -870,6 +898,10 @@ g_key_file_set_string_list(config, "project", "file_patterns", (const gchar**) p->file_patterns, g_strv_length(p->file_patterns));
+ // store the session files into the project too + /// TODO maybe it is useful to store relative file names if base_path is relative + configuration_save_session_files(config); + // write the file data = g_key_file_to_data(config, NULL, NULL); ret = (utils_write_file(filename, data) == 0); @@ -920,6 +952,9 @@ } g_key_file_set_string(config, "project", "project_file_path", NVL(local_prefs.project_file_path, "")); + + if (project != NULL) + write_config(); // to store project session files }
Modified: trunk/src/project.h =================================================================== --- trunk/src/project.h 2007-11-11 10:19:50 UTC (rev 2042) +++ trunk/src/project.h 2007-11-11 19:06:41 UTC (rev 2043) @@ -53,6 +53,8 @@
void project_open();
+void project_save(); + void project_close();
void project_properties();
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.