From 203569f3e33e24693162899cba12d6ad718e5d87 Mon Sep 17 00:00:00 2001 From: Jean-Philippe Orsini Date: Tue, 25 Oct 2011 22:34:09 +0000 Subject: [PATCH] added option to restore window position and size --- NEWS | 1 + src/cfg.c | 41 +++++++++++++++++++++++++++++++++++++++++ src/cfg.h | 6 ++++++ src/ui.c | 35 ++++++++++++++++++++++++++++------- 4 files changed, 76 insertions(+), 7 deletions(-) diff --git a/NEWS b/NEWS index 25a14d2..ac39966 100644 --- a/NEWS +++ b/NEWS @@ -1,6 +1,7 @@ * v0.6.2.12 ** psensor: added -d option to enable debug log (written to $HOME/.psensor/log). ** psensor: log sensor values in debug mode. +** psensor: added option to restore window position and size. * v0.6.2.11 ** psensor-server/web interface: use jqplot default css. diff --git a/src/cfg.c b/src/cfg.c index b866a8c..73cc7e8 100644 --- a/src/cfg.c +++ b/src/cfg.c @@ -64,6 +64,12 @@ #define KEY_INTERFACE_WINDOW_RESTORE_ENABLED \ "/apps/psensor/interface/window_restore_enabled" +#define KEY_INTERFACE_WINDOW_X "/apps/psensor/interface/window_x" +#define KEY_INTERFACE_WINDOW_Y "/apps/psensor/interface/window_y" +#define KEY_INTERFACE_WINDOW_W "/apps/psensor/interface/window_w" +#define KEY_INTERFACE_WINDOW_H "/apps/psensor/interface/window_h" + + GConfClient *client; static char *get_string(char *key, char *default_value) @@ -462,6 +468,24 @@ struct config *config_load() KEY_INTERFACE_WINDOW_RESTORE_ENABLED, NULL); + c->window_x = gconf_client_get_int(client, + KEY_INTERFACE_WINDOW_X, + NULL); + c->window_y = gconf_client_get_int(client, + KEY_INTERFACE_WINDOW_Y, + NULL); + c->window_w = gconf_client_get_int(client, + KEY_INTERFACE_WINDOW_W, + NULL); + c->window_h = gconf_client_get_int(client, + KEY_INTERFACE_WINDOW_H, + NULL); + + if (!c->window_w || !c->window_h) { + c->window_w = 800; + c->window_h = 200; + } + return c; } @@ -502,4 +526,21 @@ void config_save(struct config *c) KEY_INTERFACE_WINDOW_RESTORE_ENABLED, c->window_restore_enabled, NULL); + + gconf_client_set_int(client, + KEY_INTERFACE_WINDOW_X, + c->window_x, + NULL); + gconf_client_set_int(client, + KEY_INTERFACE_WINDOW_Y, + c->window_y, + NULL); + gconf_client_set_int(client, + KEY_INTERFACE_WINDOW_W, + c->window_w, + NULL); + gconf_client_set_int(client, + KEY_INTERFACE_WINDOW_H, + c->window_h, + NULL); } diff --git a/src/cfg.h b/src/cfg.h index 5f91230..eebfc60 100644 --- a/src/cfg.h +++ b/src/cfg.h @@ -43,6 +43,12 @@ struct config { int window_decoration_enabled; int window_keep_below_enabled; int window_restore_enabled; + /* Last saved position of the window. */ + int window_x; + int window_y; + /* Last saved size of the window. */ + int window_w; + int window_h; int graph_update_interval; int graph_monitoring_duration; diff --git a/src/ui.c b/src/ui.c index 016cbad..fa93fe3 100644 --- a/src/ui.c +++ b/src/ui.c @@ -27,21 +27,33 @@ static void save_window_pos(struct ui_psensor *ui) { - gint x, y, w, h; gboolean visible; GtkWindow *win; + struct config *cfg; visible = gtk_widget_get_visible(ui->main_window); log_printf(LOG_DEBUG, "Window visible: %d", visible); if (visible == TRUE) { - win = GTK_WINDOW(ui->main_window); + cfg = ui->config; - gtk_window_get_position(win, &x, &y); - gtk_window_get_size(win, &w, &h); + win = GTK_WINDOW(ui->main_window); - log_printf(LOG_DEBUG, "Window position: %d %d", x, y); - log_printf(LOG_DEBUG, "Window size: %d %d", w, h); + gtk_window_get_position(win, &cfg->window_x, &cfg->window_y); + log_printf(LOG_DEBUG, + "Window position: %d %d", + cfg->window_x, + cfg->window_y); + + gtk_window_get_size(win, + &cfg->window_w, + &cfg->window_h); + log_printf(LOG_DEBUG, + "Window size: %d %d", + cfg->window_w, + cfg->window_h); + + config_save(cfg); } } @@ -207,8 +219,17 @@ void ui_window_create(struct ui_psensor *ui) GdkPixbuf *icon; GtkIconTheme *icon_theme; GtkWidget *menubar; + struct config *cfg; - gtk_window_set_default_size(GTK_WINDOW(window), 800, 200); + cfg = ui->config; + if (cfg->window_restore_enabled) { + gtk_window_set_default_size(GTK_WINDOW(window), + cfg->window_w, + cfg->window_h); + gtk_window_move(GTK_WINDOW(window), + cfg->window_x, + cfg->window_y); + } gtk_window_set_title(GTK_WINDOW(window), _("Psensor - Temperature Monitor")); -- 2.7.4