X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;ds=sidebyside;f=src%2Fui%2Fgui%2Fpsppire-conf.c;h=d0b082cbe3f587d2da753681548d7ebbf5732a3c;hb=7d4150d7cba15550753a0a574685de26656c0633;hp=561f933ff061369243647d6e791e471072adac29;hpb=7870d7c1461cbbf1496913f999ed31c47c490512;p=pspp diff --git a/src/ui/gui/psppire-conf.c b/src/ui/gui/psppire-conf.c index 561f933ff0..d0b082cbe3 100644 --- a/src/ui/gui/psppire-conf.c +++ b/src/ui/gui/psppire-conf.c @@ -96,7 +96,7 @@ static void conf_write (PsppireConf *conf) { if ( conf->idle == 0) - conf->idle = g_idle_add_full (G_PRIORITY_LOW, + conf->idle = g_idle_add_full (G_PRIORITY_LOW, (GSourceFunc) flush_conf, conf, NULL); } @@ -248,6 +248,62 @@ psppire_conf_get_string (PsppireConf *conf, const gchar *base, + +gboolean +psppire_conf_get_variant (PsppireConf *conf, const gchar *base, + const gchar *name, GVariant **v) +{ + gboolean ok; + gchar *b; + GError *err = NULL; + conf_read (conf); + b = g_key_file_get_string (conf->keyfile, + base, + name, &err); + + ok = (err == NULL); + if ( err != NULL ) + g_error_free (err); + + if (ok) + { + *v = g_variant_parse (NULL, b, NULL, NULL, NULL); + g_free (b); + } + + return ok; +} + +gboolean +psppire_conf_get_enum (PsppireConf *conf, const gchar *base, + const gchar *name, + GType t, + int *v) +{ + gboolean ok; + gchar *b; + GError *err = NULL; + conf_read (conf); + b = g_key_file_get_string (conf->keyfile, + base, + name, &err); + + ok = (err == NULL); + if ( err != NULL ) + g_error_free (err); + + if (ok) + { + GEnumClass *ec = g_type_class_ref (t); + GEnumValue *ev = g_enum_get_value_by_nick (ec, b); + *v = ev->value; + g_type_class_unref (ec); + g_free (b); + } + + return ok; +} + void psppire_conf_set_int (PsppireConf *conf, const gchar *base, const gchar *name, @@ -276,6 +332,34 @@ psppire_conf_set_string (PsppireConf *conf, conf_write (conf); } +void +psppire_conf_set_variant (PsppireConf *conf, + const gchar *base, const gchar *name, + GVariant *value) +{ + gchar *v = g_variant_print (value, FALSE); + g_key_file_set_string (conf->keyfile, base, name, v); + conf_write (conf); + g_free (v); +} + +void +psppire_conf_set_enum (PsppireConf *conf, + const gchar *base, const gchar *name, + GType enum_type, + int value) +{ + GEnumClass *ec = g_type_class_ref (enum_type); + GEnumValue *ev = g_enum_get_value (ec, value); + + g_key_file_set_string (conf->keyfile, base, name, + ev->value_nick); + + g_type_class_unref (ec); + + conf_write (conf); +} + /* @@ -337,10 +421,11 @@ psppire_conf_save_window_geometry (PsppireConf *conf, if (!maximized) { - gint width, height; gint x, y; - gdk_drawable_get_size (w, &width, &height); + gint width = gdk_window_get_width (w); + gint height= gdk_window_get_height (w); + gdk_window_get_position (w, &x, &y); psppire_conf_set_int (conf, base, "height", height);