diff --git a/src/ag-window.c b/src/ag-window.c index 41c55d4..93f0c32 100644 --- a/src/ag-window.c +++ b/src/ag-window.c @@ -10,6 +10,7 @@ #include "ag-app.h" #include "ag-window.h" #include "ag-chart.h" +#include "ag-settings.h" struct _AgWindowPrivate { GtkWidget *grid; @@ -37,6 +38,7 @@ struct _AgWindowPrivate { GtkWidget *tab_edit; GtkWidget *current_tab; + AgSettings *settings; AgChart *chart; gchar *uri; }; @@ -304,8 +306,9 @@ ag_window_init(AgWindow *window) window->priv = priv = GET_PRIVATE(window); - priv->chart = NULL; - priv->uri = NULL; + priv->chart = NULL; + priv->uri = NULL; + priv->setting = ag_settings_get(); gtk_window_set_hide_titlebar_when_maximized(GTK_WINDOW(window), TRUE); @@ -333,6 +336,7 @@ ag_window_dispose(GObject *gobject) { AgWindow *window = AG_WINDOW(gobject); + g_clear_object(&window->priv->settings); g_clear_object(&window->priv->builder); G_OBJECT_CLASS(ag_window_parent_class)->dispose(gobject); @@ -512,6 +516,8 @@ ag_window_new(AgApp *app) gtk_window_set_icon_name(GTK_WINDOW(window), "astrognome"); + ag_window_settings_restore(GTK_WINDOW(window), ag_settings_peek_window_settings(window->priv->settings)); + return GTK_WIDGET(window); } @@ -550,3 +556,34 @@ ag_window_get_uri(AgWindow *window) return g_strdup(window->priv->uri); } +void +ag_window_settings_restore(GtkWindow *window, GSettings *settings) +{ + gint width, + height; + gboolean maximized; + GdkScreen *screen; + + width = g_settings_get_int(settings, "width"); + height = g_settings_get_int(settings, "height"); + maximized = g_settings_get_boolean(settings, "maximized"); + + if ((width > 1) && (height > 1)) { + gint max_width, + max_height; + + screen = gtk_widget_get_screen(GTK_WIDGET(window)); + max_width = gdk_screen_get_width(screen); + max_height = gdk_screen_get_height(screen); + + width = CLAMP(width, 0, max_width); + height = CLAMP(height, 0, max_height); + + gtk_window_set_default_size(window, width, height); + } + + if (maximized) { + gtk_window_maximize(window); + } +} + diff --git a/src/ag-window.h b/src/ag-window.h index 6613f9e..b8cb79c 100644 --- a/src/ag-window.h +++ b/src/ag-window.h @@ -41,6 +41,7 @@ void ag_window_update_from_chart(AgWindow *window); void ag_window_set_uri(AgWindow *window, const gchar *uri); gchar *ag_window_get_uri(AgWindow *window); +void ag_window_settings_restore(GtkWindow *window, GSettings *settings); #define AG_WINDOW_ERROR (ag_window_error_quark()) GQuark ag_window_error_quark(void);