added option to restore window position and size
authorJean-Philippe Orsini <jeanfi@gmail.com>
Tue, 25 Oct 2011 22:34:09 +0000 (22:34 +0000)
committerJean-Philippe Orsini <jeanfi@gmail.com>
Tue, 25 Oct 2011 22:34:09 +0000 (22:34 +0000)
NEWS
src/cfg.c
src/cfg.h
src/ui.c

diff --git a/NEWS b/NEWS
index 25a14d2..ac39966 100644 (file)
--- 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.
index b866a8c..73cc7e8 100644 (file)
--- a/src/cfg.c
+++ b/src/cfg.c
 #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);
 }
index 5f91230..eebfc60 100644 (file)
--- 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;
index 016cbad..fa93fe3 100644 (file)
--- a/src/ui.c
+++ b/src/ui.c
 
 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"));