From d37e36f01c84be3675a9930c58b1cedd96ee5ec3 Mon Sep 17 00:00:00 2001 From: Jean-Philippe Orsini Date: Sat, 26 Oct 2013 17:39:42 +0000 Subject: [PATCH] save/restore window position and size --- src/main.c | 21 +++------------------ src/ui.c | 50 ++++++++++++++++++++++++++++++++++++++++++++++++-- src/ui.h | 2 +- 3 files changed, 52 insertions(+), 21 deletions(-) diff --git a/src/main.c b/src/main.c index 1b86c22..70b65a0 100644 --- a/src/main.c +++ b/src/main.c @@ -43,7 +43,7 @@ static GtkWidget *w_tasksave_btn; static GtkWidget *w_taskdone_btn; static GtkComboBox *w_status; static GtkComboBox *w_priority; -/*static GSettings *settings;*/ +static GSettings *settings; enum { COL_ID, @@ -293,15 +293,6 @@ int refresh_clicked_cbk(GtkButton *btn, gpointer data) return FALSE; } -static gboolean delete_event_cbk(GtkWidget *w, GdkEvent *evt, gpointer data) -{ - gtk_widget_destroy(w); - gtk_main_quit(); - - return FALSE; -} - - int newtask_clicked_cbk(GtkButton *btn, gpointer data) { gint result; @@ -504,20 +495,14 @@ int main(int argc, char **argv) gtk_init(NULL, NULL); - /* settings = g_settings_new("ptask"); - - printf("%d\n", g_settings_get_int(settings, "windows_x"));*/ + settings = g_settings_new("ptask"); builder = gtk_builder_new(); gtk_builder_add_from_file (builder, PACKAGE_DATA_DIR G_DIR_SEPARATOR_S "ptask.glade", NULL); - /* window = create_window();*/ - window = GTK_WINDOW(gtk_builder_get_object(builder, "window")); - - g_signal_connect(window, "delete_event", - G_CALLBACK(delete_event_cbk), NULL); + window = create_window(builder, settings); w_treeview = GTK_TREE_VIEW(gtk_builder_get_object(builder, "treeview")); model = gtk_tree_view_get_model(GTK_TREE_VIEW(w_treeview)); diff --git a/src/ui.c b/src/ui.c index 8567d4f..a63288b 100644 --- a/src/ui.c +++ b/src/ui.c @@ -17,9 +17,55 @@ * 02110-1301 USA */ +#include #include -GtkWindow *create_window() +static void save_settings(GtkWindow *window, GSettings *settings) { - return NULL; + int w, h, x, y; + + gtk_window_get_size(window, &w, &h); + gtk_window_get_position(window, &x, &y); + + log_debug("save_settings(): x=%d, y=%d, w=%d, h=%d", x, y, w, h); + + g_settings_set_int(settings, "window-width", w); + g_settings_set_int(settings, "window-height", h); + g_settings_set_int(settings, "window-x", x); + g_settings_set_int(settings, "window-y", y); + + g_settings_sync(); +} + +static gboolean delete_event_cbk(GtkWidget *w, GdkEvent *evt, gpointer data) +{ + log_debug("delete_event_cbk"); + + save_settings(GTK_WINDOW(w), (GSettings *)data); + gtk_widget_destroy(w); + gtk_main_quit(); + + return TRUE; } + +GtkWindow *create_window(GtkBuilder *builder, GSettings *settings) +{ + GtkWindow *window; + int x, y, h, w; + + window = GTK_WINDOW(gtk_builder_get_object(builder, "window")); + + x = g_settings_get_int(settings, "window-x"); + y = g_settings_get_int(settings, "window-y"); + w = g_settings_get_int(settings, "window-width"); + h = g_settings_get_int(settings, "window-height"); + + gtk_window_set_default_size(window, w, h); + gtk_window_move(window, x, y); + + g_signal_connect(window, "delete_event", + G_CALLBACK(delete_event_cbk), settings); + + return window; +} + diff --git a/src/ui.h b/src/ui.h index d560094..27aebce 100644 --- a/src/ui.h +++ b/src/ui.h @@ -22,6 +22,6 @@ #include -GtkWindow *create_window(); +GtkWindow *create_window(GtkBuilder *, GSettings *); #endif -- 2.7.4