diff --git a/gui/window.c b/gui/window.c index f2439409..434d3d99 100644 --- a/gui/window.c +++ b/gui/window.c @@ -7,9 +7,13 @@ static const gchar *SETTINGS_WIDTH = "gui.window.width"; static const gchar *SETTINGS_HEIGHT = "gui.window.height"; +static const gchar *SETTINGS_X = "gui.window.x"; +static const gchar *SETTINGS_Y = "gui.window.y"; static int saved_width = 0; static int saved_height = 0; +static int saved_x = 0; +static int saved_y = 0; gboolean __window_configure(GtkWindow *window, GdkEventConfigure *event, @@ -17,6 +21,8 @@ gboolean __window_configure(GtkWindow *window, GdkEventConfigure *event, { int width = settings_get(SETTINGS_WIDTH); int height = settings_get(SETTINGS_HEIGHT); + int x = settings_get(SETTINGS_X); + int y = settings_get(SETTINGS_Y); if (event->width != width) { saved_width = width; @@ -28,6 +34,16 @@ gboolean __window_configure(GtkWindow *window, GdkEventConfigure *event, settings_set(SETTINGS_HEIGHT, event->height); } + if (event->x != x) { + saved_x = x; + settings_set(SETTINGS_X, event->x); + } + + if (event->y != y) { + saved_y = y; + settings_set(SETTINGS_Y, event->y); + } + return FALSE; } @@ -38,6 +54,8 @@ gboolean __window_state(GtkWindow *window, GdkEventWindowState *event, event->new_window_state & GDK_WINDOW_STATE_MAXIMIZED) { settings_set(SETTINGS_WIDTH, saved_width); settings_set(SETTINGS_HEIGHT, saved_height); + settings_set(SETTINGS_X, saved_x); + settings_set(SETTINGS_Y, saved_y); } return FALSE; @@ -53,8 +71,13 @@ void gui_window_init(const gchar *icon) saved_width = settings_get(SETTINGS_WIDTH); saved_height = settings_get(SETTINGS_HEIGHT); - if (saved_width > 0 && saved_height > 0) + saved_x = settings_get(SETTINGS_X); + saved_y = settings_get(SETTINGS_Y); + + if (saved_width > 0 || saved_height > 0) gtk_window_resize(gui_window(), saved_width, saved_height); + if (saved_x > 0 || saved_y > 0) + gtk_window_move(gui_window(), saved_x, saved_y); g_free(title); } diff --git a/share/ocarina/ocarina.ui b/share/ocarina/ocarina.ui index d8032820..a392b713 100644 --- a/share/ocarina/ocarina.ui +++ b/share/ocarina/ocarina.ui @@ -102,6 +102,7 @@ Ocarina 6.1.3 1024 615 + static diff --git a/tests/gui/window.c b/tests/gui/window.c index c036c34e..9cab321e 100644 --- a/tests/gui/window.c +++ b/tests/gui/window.c @@ -12,19 +12,27 @@ static void test_window() g_assert_false(settings_has("gui.window.width")); g_assert_false(settings_has("gui.window.height")); + g_assert_false(settings_has("gui.window.x")); + g_assert_false(settings_has("gui.window.y")); g_assert_cmpstr(gtk_window_get_title(window), ==, "Ocarina " CONFIG_VERSION); gui_test_main_loop(); g_assert_true(settings_has("gui.window.width")); g_assert_true(settings_has("gui.window.height")); + g_assert_true(settings_has("gui.window.x")); + g_assert_true(settings_has("gui.window.y")); settings_set("gui.window.width", 800); settings_set("gui.window.height", 600); + settings_set("gui.window.x", 42); + settings_set("gui.window.y", 42); gui_window_init("share/ocarina/ocarina.png"); gui_test_main_loop(); g_assert_cmpuint(settings_get("gui.window.width"), ==, 800); g_assert_cmpuint(settings_get("gui.window.height"), ==, 600); + g_assert_cmpuint(settings_get("gui.window.x"), ==, 42); + g_assert_cmpuint(settings_get("gui.window.y"), ==, 42); } int main(int argc, char **argv)