X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=src%2Fui%2Fgui%2Fpsppire-conf.c;h=02cc2751212a2a0de931fe7a2b9e722b342255e2;hb=407f3c634628b92fb6b57cbcff229270107cdddc;hp=4090b74c3ea9dce414e42cb59bb643c6c312a15e;hpb=6d92819eef56352a284f410ac7e356afa4a4ce35;p=pspp diff --git a/src/ui/gui/psppire-conf.c b/src/ui/gui/psppire-conf.c index 4090b74c3e..02cc275121 100644 --- a/src/ui/gui/psppire-conf.c +++ b/src/ui/gui/psppire-conf.c @@ -1,5 +1,5 @@ /* PSPPIRE - a graphical user interface for PSPP. - Copyright (C) 2009 Free Software Foundation + Copyright (C) 2009, 2010 Free Software Foundation This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -20,7 +20,9 @@ */ #include +#include #include +#include #include "psppire-conf.h" @@ -140,7 +142,15 @@ psppire_conf_class_init (PsppireConfClass *class) static void psppire_conf_init (PsppireConf *conf) { - const gchar *dirname = g_get_user_config_dir (); + const gchar *dirname; + struct stat s; + + /* Get the name of the directory for user configuration files, then, if it + doesn't already exist, create it, since we might be the first program + to want to put files there. */ + dirname = g_get_user_config_dir (); + if (stat (dirname, &s) == -1 && errno == ENOENT) + mkdir (dirname, 0700); conf->filename = g_strdup_printf ("%s/%s", dirname, "psppirerc"); @@ -262,36 +272,29 @@ psppire_conf_set_window_geometry (PsppireConf *conf, void psppire_conf_save_window_geometry (PsppireConf *conf, const gchar *base, - GdkEvent *e) + GtkWindow *gtk_window) { - switch (e->type) - { - case GDK_CONFIGURE: - { - GdkEventConfigure *event = &e->configure; + gboolean maximized; + GdkWindow *w; - if ( gdk_window_get_state (event->window) & - GDK_WINDOW_STATE_MAXIMIZED ) - return; + w = gtk_widget_get_window (GTK_WIDGET (gtk_window)); + if (w == NULL) + return; - psppire_conf_set_int (conf, base, "height", event->height); - psppire_conf_set_int (conf, base, "width", event->width); + maximized = (gdk_window_get_state (w) & GDK_WINDOW_STATE_MAXIMIZED) != 0; + psppire_conf_set_boolean (conf, base, "maximize", maximized); - psppire_conf_set_int (conf, base, "x", event->x); - psppire_conf_set_int (conf, base, "y", event->y); - } - break; - case GDK_WINDOW_STATE: - { - GdkEventWindowState *event = &e->window_state; + if (!maximized) + { + gint width, height; + gint x, y; - psppire_conf_set_boolean (conf, base, "maximize", - event->new_window_state & - GDK_WINDOW_STATE_MAXIMIZED ); - } - break; - default: - break; - }; + gdk_drawable_get_size (w, &width, &height); + gdk_window_get_position (w, &x, &y); + psppire_conf_set_int (conf, base, "height", height); + psppire_conf_set_int (conf, base, "width", width); + psppire_conf_set_int (conf, base, "x", x); + psppire_conf_set_int (conf, base, "y", y); + } }