[geany/geany] e38916: Make main window geometry loading more robust
Colomban Wendling
git-noreply at xxxxx
Thu Jul 26 00:02:13 UTC 2012
Branch: refs/heads/document-messages
Author: Colomban Wendling <ban at herbesfolles.org>
Committer: Colomban Wendling <ban at herbesfolles.org>
Date: Sun, 11 Dec 2011 22:13:24
Commit: e389168162835e9174d678656dab13d5615ecff0
https://github.com/geany/geany/commit/e389168162835e9174d678656dab13d5615ecff0
Log Message:
-----------
Make main window geometry loading more robust
Properly handle the case the saved geometry isn't valid, avoiding
a crash with corrupted preferences.
Modified Paths:
--------------
src/keyfile.c
Modified: src/keyfile.c
29 files changed, 11 insertions(+), 18 deletions(-)
===================================================================
@@ -906,7 +906,7 @@ static void load_dialog_prefs(GKeyFile *config)
static void load_ui_prefs(GKeyFile *config)
{
gint *geo;
- GError *error = NULL;
+ 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);
@@ -918,35 +918,28 @@ static void load_ui_prefs(GKeyFile *config)
_("Type here what you want, use it as a notice/scratch board"));
scribble_pos = utils_get_setting_integer(config, PACKAGE, "scribble_pos", -1);
- geo = g_key_file_get_integer_list(config, PACKAGE, "geometry", NULL, &error);
- if (error)
+ geo = g_key_file_get_integer_list(config, PACKAGE, "geometry", &geo_len, NULL);
+ if (! geo || geo_len < 5)
{
+ if (geo_len < 5)
+ g_warning("Cannot restore window geometry: invalid geometry saved");
+
ui_prefs.geometry[0] = -1;
ui_prefs.geometry[1] = -1;
ui_prefs.geometry[2] = -1;
ui_prefs.geometry[3] = -1;
ui_prefs.geometry[4] = 0;
- g_error_free(error);
- error = NULL;
}
else
{
- gint i;
-
- ui_prefs.geometry[0] = geo[0];
- ui_prefs.geometry[1] = geo[1];
- ui_prefs.geometry[2] = geo[2];
- ui_prefs.geometry[3] = geo[3];
- ui_prefs.geometry[4] = geo[4];
-
/* don't use insane values but when main windows was maximized last time, pos might be
* negative (due to differences in root window and window decorations) */
/* quitting when minimized can make pos -32000, -32000 on Windows! */
- for (i = 0; i < 4; i++)
- {
- if (ui_prefs.geometry[i] < -1)
- ui_prefs.geometry[i] = -1;
- }
+ ui_prefs.geometry[0] = MAX(-1, geo[0]);
+ ui_prefs.geometry[1] = MAX(-1, geo[1]);
+ ui_prefs.geometry[2] = MAX(-1, geo[2]);
+ ui_prefs.geometry[3] = MAX(-1, geo[3]);
+ ui_prefs.geometry[4] = geo[4] != 0;
}
hpan_position = utils_get_setting_integer(config, PACKAGE, "treeview_position", 156);
vpan_position = utils_get_setting_integer(config, PACKAGE, "msgwindow_position", (geo) ?
@@ Diff output truncated at 100000 characters. @@
--------------
This E-Mail was brought to you by github_commit_mail.py (Source: TBD).
More information about the Commits
mailing list