[geany/geany] 6856ed: Merge branch 'session_split'
Thomas Martitz
git-noreply at xxxxx
Mon Nov 22 15:55:53 UTC 2021
Branch: refs/heads/master
Author: Thomas Martitz <thomas.martitz at mailbox.org>
Committer: Thomas Martitz <thomas.martitz at mailbox.org>
Date: Mon, 22 Nov 2021 15:55:53 UTC
Commit: 6856edd6511e8aa9a225098ac2aab9171b10167f
https://github.com/geany/geany/commit/6856edd6511e8aa9a225098ac2aab9171b10167f
Log Message:
-----------
Merge branch 'session_split'
By Thomas Martitz (2) and Adam Morris (1)
* upstream/session_split:
session.conf split follow-up #2 (#2779)
session.conf split follow-up
Split geany.conf into geany.conf (preferences) and session.conf (recent files and VTE session) (#2776)
Modified Paths:
--------------
src/keyfile.c
Modified: src/keyfile.c
142 lines changed, 96 insertions(+), 46 deletions(-)
===================================================================
@@ -66,6 +66,9 @@
#include <unistd.h>
#endif
+/* define the configuration filenames */
+#define PREFS_FILE "geany.conf"
+#define SESSION_FILE "session.conf"
/* some default settings which are used at the very first start of Geany to fill
* the configuration file */
@@ -575,6 +578,12 @@ static void save_dialog_prefs(GKeyFile *config)
#endif
}
+typedef enum ConfigPayload
+{
+ PREFS,
+ SESSION
+}
+ConfigPayload;
static void save_ui_prefs(GKeyFile *config)
{
@@ -602,6 +611,18 @@ static void save_ui_prefs(GKeyFile *config)
g_key_file_set_integer(config, PACKAGE, "scribble_pos", scribble_pos);
}
+ g_key_file_set_string(config, PACKAGE, "custom_date_format", ui_prefs.custom_date_format);
+ if (ui_prefs.custom_commands != NULL)
+ {
+ g_key_file_set_string_list(config, PACKAGE, "custom_commands",
+ (const gchar**) ui_prefs.custom_commands, g_strv_length(ui_prefs.custom_commands));
+ g_key_file_set_string_list(config, PACKAGE, "custom_commands_labels",
+ (const gchar**) ui_prefs.custom_commands_labels, g_strv_length(ui_prefs.custom_commands_labels));
+ }
+}
+
+static void save_ui_session(GKeyFile *config)
+{
if (prefs.save_winpos || prefs.save_wingeom)
{
GdkWindowState wstate;
@@ -617,45 +638,40 @@ static void save_ui_prefs(GKeyFile *config)
ui_prefs.geometry[4] = (wstate & GDK_WINDOW_STATE_MAXIMIZED) ? 1 : 0;
g_key_file_set_integer_list(config, PACKAGE, "geometry", ui_prefs.geometry, 5);
}
-
- g_key_file_set_string(config, PACKAGE, "custom_date_format", ui_prefs.custom_date_format);
- if (ui_prefs.custom_commands != NULL)
- {
- g_key_file_set_string_list(config, PACKAGE, "custom_commands",
- (const gchar**) ui_prefs.custom_commands, g_strv_length(ui_prefs.custom_commands));
- g_key_file_set_string_list(config, PACKAGE, "custom_commands_labels",
- (const gchar**) ui_prefs.custom_commands_labels, g_strv_length(ui_prefs.custom_commands_labels));
- }
}
-
-void configuration_save(void)
+void write_config_file(gchar const *filename, ConfigPayload payload)
{
GKeyFile *config = g_key_file_new();
- gchar *configfile = g_build_filename(app->configdir, "geany.conf", NULL);
+ gchar *configfile = g_build_filename(app->configdir, filename, NULL);
gchar *data;
g_key_file_load_from_file(config, configfile, G_KEY_FILE_NONE, NULL);
- /* this signal can be used e.g. to prepare any settings before Stash code reads them below */
- g_signal_emit_by_name(geany_object, "save-settings", config);
-
- save_dialog_prefs(config);
- save_ui_prefs(config);
- project_save_prefs(config); /* save project filename, etc. */
- save_recent_files(config, ui_prefs.recent_queue, "recent_files");
- save_recent_files(config, ui_prefs.recent_projects_queue, "recent_projects");
-
- if (cl_options.load_session)
- configuration_save_session_files(config);
-#ifdef HAVE_VTE
- else if (vte_info.have_vte)
+ switch (payload)
{
- vte_get_working_directory(); /* refresh vte_info.dir */
- g_key_file_set_string(config, "VTE", "last_dir", vte_info.dir);
- }
+ case PREFS:
+ /* this signal can be used e.g. to prepare any settings before Stash code reads them below */
+ g_signal_emit_by_name(geany_object, "save-settings", config);
+ save_dialog_prefs(config);
+ save_ui_prefs(config);
+ break;
+ case SESSION:
+ save_recent_files(config, ui_prefs.recent_queue, "recent_files");
+ save_recent_files(config, ui_prefs.recent_projects_queue, "recent_projects");
+ project_save_prefs(config); /* save project filename, etc. */
+ save_ui_session(config);
+ if (cl_options.load_session)
+ configuration_save_session_files(config);
+#ifdef HAVE_VTE
+ else if (vte_info.have_vte)
+ {
+ vte_get_working_directory(); /* refresh vte_info.dir */
+ g_key_file_set_string(config, "VTE", "last_dir", vte_info.dir);
+ }
#endif
-
+ break;
+ }
/* write the file */
data = g_key_file_to_data(config, NULL, NULL);
utils_write_file(configfile, data);
@@ -665,6 +681,14 @@ void configuration_save(void)
g_free(configfile);
}
+void configuration_save(void)
+{
+ /* save all configuration files
+ * it is probably not very efficient to write both files every time
+ * could be more selective about which file is saved when */
+ write_config_file(PREFS_FILE, PREFS);
+ write_config_file(SESSION_FILE, SESSION);
+}
static void load_recent_files(GKeyFile *config, GQueue *queue, const gchar *key)
{
@@ -1019,9 +1043,6 @@ static void load_dialog_prefs(GKeyFile *config)
static void load_ui_prefs(GKeyFile *config)
{
- gint *geo;
- gsize geo_len;
-
ui_prefs.sidebar_visible = utils_get_setting_boolean(config, PACKAGE, "sidebar_visible", TRUE);
ui_prefs.msgwindow_visible = utils_get_setting_boolean(config, PACKAGE, "msgwindow_visible", TRUE);
ui_prefs.fullscreen = utils_get_setting_boolean(config, PACKAGE, "fullscreen", FALSE);
@@ -1068,6 +1089,12 @@ static void load_ui_prefs(GKeyFile *config)
scribble_text = utils_get_setting_string(config, PACKAGE, "scribble_text",
_("Type here what you want, use it as a notice/scratch board"));
scribble_pos = utils_get_setting_integer(config, PACKAGE, "scribble_pos", -1);
+}
+
+static void load_ui_session(GKeyFile *config)
+{
+ gint *geo;
+ gsize geo_len;
geo = g_key_file_get_integer_list(config, PACKAGE, "geometry", &geo_len, NULL);
if (! geo || geo_len < 5)
@@ -1103,7 +1130,7 @@ static void load_ui_prefs(GKeyFile *config)
*/
void configuration_save_default_session(void)
{
- gchar *configfile = g_build_filename(app->configdir, "geany.conf", NULL);
+ gchar *configfile = g_build_filename(app->configdir, PREFS_FILE, NULL);
gchar *data;
GKeyFile *config = g_key_file_new();
@@ -1124,7 +1151,7 @@ void configuration_save_default_session(void)
void configuration_clear_default_session(void)
{
- gchar *configfile = g_build_filename(app->configdir, "geany.conf", NULL);
+ gchar *configfile = g_build_filename(app->configdir, SESSION_FILE, NULL);
gchar *data;
GKeyFile *config = g_key_file_new();
@@ -1148,7 +1175,7 @@ void configuration_clear_default_session(void)
*/
void configuration_reload_default_session(void)
{
- gchar *configfile = g_build_filename(app->configdir, "geany.conf", NULL);
+ gchar *configfile = g_build_filename(app->configdir, SESSION_FILE, NULL);
GKeyFile *config = g_key_file_new();
g_key_file_load_from_file(config, configfile, G_KEY_FILE_NONE, NULL);
@@ -1159,34 +1186,57 @@ void configuration_reload_default_session(void)
g_key_file_free(config);
}
-
-gboolean configuration_load(void)
+gboolean read_config_file(gchar const *filename, ConfigPayload payload)
{
- gchar *configfile = g_build_filename(app->configdir, "geany.conf", NULL);
+ gchar *configfile = g_build_filename(app->configdir, filename, NULL);
GKeyFile *config = g_key_file_new();
if (! g_file_test(configfile, G_FILE_TEST_IS_REGULAR))
{ /* config file does not (yet) exist, so try to load a global config file which may be */
/* created by distributors */
geany_debug("No user config file found, trying to use global configuration.");
- SETPTR(configfile, g_build_filename(app->datadir, "geany.conf", NULL));
+ SETPTR(configfile, g_build_filename(app->datadir, filename, NULL));
}
g_key_file_load_from_file(config, configfile, G_KEY_FILE_NONE, NULL);
g_free(configfile);
- load_dialog_prefs(config);
- load_ui_prefs(config);
- project_load_prefs(config);
- configuration_load_session_files(config, TRUE);
-
- /* this signal can be used e.g. to delay building UI elements until settings have been read */
- g_signal_emit_by_name(geany_object, "load-settings", config);
+ switch (payload)
+ {
+ case PREFS:
+ load_dialog_prefs(config);
+ load_ui_prefs(config);
+ /* this signal can be used e.g. to delay building UI elements until settings have been read */
+ g_signal_emit_by_name(geany_object, "load-settings", config);
+ break;
+ case SESSION:
+ project_load_prefs(config);
+ load_ui_session(config);
+ configuration_load_session_files(config, TRUE);
+ break;
+ }
g_key_file_free(config);
return TRUE;
}
+gboolean configuration_load(void)
+{
+ gboolean prefs_loaded = read_config_file(PREFS_FILE, PREFS);
+ /* backwards-compatibility: try to read session from preferences if session file doesn't exist */
+ gchar *session_filename = SESSION_FILE;
+ gchar *session_file = g_build_filename(app->configdir, session_filename, NULL);
+ if (! g_file_test(session_file, G_FILE_TEST_IS_REGULAR))
+ {
+ geany_debug("No user session file found, trying to use configuration file.");
+ session_filename = PREFS_FILE;
+ }
+ g_free(session_file);
+ gboolean sess_loaded = read_config_file(session_filename, SESSION);
+ return prefs_loaded && sess_loaded;
+}
+
+
static gboolean open_session_file(gchar **tmp, guint len)
{
guint pos;
--------------
This E-Mail was brought to you by github_commit_mail.py (Source: https://github.com/geany/infrastructure).
More information about the Commits
mailing list