diff --git a/data/geany.glade b/data/geany.glade
index d0f49bd248..4e16497a53 100644
--- a/data/geany.glade
+++ b/data/geany.glade
@@ -941,12 +941,12 @@
True
False
-
+
+
+ Save window position
+ True
+ True
+ False
+ Saves the window position and restores it at the start
+ True
+ True
+
+
+ False
+ False
+ 1
+
+
Confirm exit
@@ -969,7 +985,7 @@
False
False
- 1
+ 2
diff --git a/src/keyfile.c b/src/keyfile.c
index 6a91988b5d..ef586b554e 100644
--- a/src/keyfile.c
+++ b/src/keyfile.c
@@ -418,7 +418,8 @@ static void save_dialog_prefs(GKeyFile *config)
g_key_file_set_boolean(config, PACKAGE, "pref_main_load_session", prefs.load_session);
g_key_file_set_boolean(config, PACKAGE, "pref_main_project_session", project_prefs.project_session);
g_key_file_set_boolean(config, PACKAGE, "pref_main_project_file_in_basedir", project_prefs.project_file_in_basedir);
- g_key_file_set_boolean(config, PACKAGE, "pref_main_save_winpos", prefs.save_winpos);
+ g_key_file_set_boolean(config, PACKAGE, "pref_main_save_winpos", prefs.save_winpos);
+ g_key_file_set_boolean(config, PACKAGE, "pref_main_save_wingeom", prefs.save_wingeom);
g_key_file_set_boolean(config, PACKAGE, "pref_main_confirm_exit", prefs.confirm_exit);
g_key_file_set_boolean(config, PACKAGE, "pref_main_suppress_status_messages", prefs.suppress_status_messages);
g_key_file_set_boolean(config, PACKAGE, "switch_msgwin_pages", prefs.switch_to_status);
@@ -572,7 +573,7 @@ static void save_ui_prefs(GKeyFile *config)
g_key_file_set_integer(config, PACKAGE, "scribble_pos", scribble_pos);
}
- if (prefs.save_winpos)
+ if (prefs.save_winpos || prefs.save_wingeom)
{
GdkWindowState wstate;
@@ -754,7 +755,8 @@ static void load_dialog_prefs(GKeyFile *config)
prefs.load_session = utils_get_setting_boolean(config, PACKAGE, "pref_main_load_session", TRUE);
project_prefs.project_session = utils_get_setting_boolean(config, PACKAGE, "pref_main_project_session", TRUE);
project_prefs.project_file_in_basedir = utils_get_setting_boolean(config, PACKAGE, "pref_main_project_file_in_basedir", FALSE);
- prefs.save_winpos = utils_get_setting_boolean(config, PACKAGE, "pref_main_save_winpos", TRUE);
+ prefs.save_winpos = utils_get_setting_boolean(config, PACKAGE, "pref_main_save_winpos", TRUE);
+ prefs.save_wingeom = utils_get_setting_boolean(config, PACKAGE, "pref_main_save_wingeom", TRUE);
prefs.beep_on_errors = utils_get_setting_boolean(config, PACKAGE, "beep_on_errors", TRUE);
prefs.switch_to_status = utils_get_setting_boolean(config, PACKAGE, "switch_msgwin_pages", FALSE);
prefs.auto_focus = utils_get_setting_boolean(config, PACKAGE, "auto_focus", FALSE);
diff --git a/src/libmain.c b/src/libmain.c
index fe4f377259..9e7d5cd547 100644
--- a/src/libmain.c
+++ b/src/libmain.c
@@ -148,19 +148,22 @@ static GOptionEntry entries[] =
static void setup_window_position(void)
{
/* interprets the saved window geometry */
- if (!prefs.save_winpos)
- return;
-
- if (ui_prefs.geometry[0] != -1 && ui_prefs.geometry[1] != -1)
- gtk_window_move(GTK_WINDOW(main_widgets.window),
- ui_prefs.geometry[0], ui_prefs.geometry[1]);
-
- if (ui_prefs.geometry[2] != -1 && ui_prefs.geometry[3] != -1)
- gtk_window_set_default_size(GTK_WINDOW(main_widgets.window),
- ui_prefs.geometry[2], ui_prefs.geometry[3]);
-
- if (ui_prefs.geometry[4] == 1)
- gtk_window_maximize(GTK_WINDOW(main_widgets.window));
+ if (prefs.save_wingeom)
+ {
+ if (ui_prefs.geometry[2] != -1 && ui_prefs.geometry[3] != -1)
+ gtk_window_set_default_size(GTK_WINDOW(main_widgets.window),
+ ui_prefs.geometry[2], ui_prefs.geometry[3]);
+ }
+
+ if (prefs.save_winpos)
+ {
+ if (ui_prefs.geometry[0] != -1 && ui_prefs.geometry[1] != -1)
+ gtk_window_move(GTK_WINDOW(main_widgets.window),
+ ui_prefs.geometry[0], ui_prefs.geometry[1]);
+
+ if (ui_prefs.geometry[4] == 1)
+ gtk_window_maximize(GTK_WINDOW(main_widgets.window));
+ }
}
diff --git a/src/prefs.c b/src/prefs.c
index 714b7bc5cd..9b60e09aef 100644
--- a/src/prefs.c
+++ b/src/prefs.c
@@ -417,8 +417,11 @@ static void prefs_init_dialog(void)
widget = ui_lookup_widget(ui_widgets.prefs_dialog, "check_project_file_in_basedir");
gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(widget), project_prefs.project_file_in_basedir);
- widget = ui_lookup_widget(ui_widgets.prefs_dialog, "check_save_win_pos");
- gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(widget), prefs.save_winpos);
+ widget = ui_lookup_widget(ui_widgets.prefs_dialog, "check_save_win_pos");
+ gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(widget), prefs.save_winpos);
+
+ widget = ui_lookup_widget(ui_widgets.prefs_dialog, "check_save_win_geom");
+ gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(widget), prefs.save_wingeom);
widget = ui_lookup_widget(ui_widgets.prefs_dialog, "check_ask_for_quit");
gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(widget), prefs.confirm_exit);
@@ -897,8 +900,11 @@ on_prefs_dialog_response(GtkDialog *dialog, gint response, gpointer user_data)
widget = ui_lookup_widget(ui_widgets.prefs_dialog, "check_project_file_in_basedir");
project_prefs.project_file_in_basedir = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(widget));
- widget = ui_lookup_widget(ui_widgets.prefs_dialog, "check_save_win_pos");
- prefs.save_winpos = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(widget));
+ widget = ui_lookup_widget(ui_widgets.prefs_dialog, "check_save_win_pos");
+ prefs.save_winpos = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(widget));
+
+ widget = ui_lookup_widget(ui_widgets.prefs_dialog, "check_save_win_geom");
+ prefs.save_wingeom = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(widget));
widget = ui_lookup_widget(ui_widgets.prefs_dialog, "check_ask_for_quit");
prefs.confirm_exit = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(widget));
diff --git a/src/prefs.h b/src/prefs.h
index 68a83b26d0..25ce2eea26 100644
--- a/src/prefs.h
+++ b/src/prefs.h
@@ -31,7 +31,8 @@ typedef struct GeanyPrefs
{
gboolean load_session;
gboolean load_plugins;
- gboolean save_winpos;
+ gboolean save_winpos;
+ gboolean save_wingeom;
gboolean confirm_exit;
gboolean beep_on_errors; /* use utils_beep() instead */
gboolean suppress_status_messages;