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=e917ecebb87f294fd1b4b8e3a6e15a69af023cb1;hpb=b2b2b0a29f80de89d96bcceea90f117930ab47b9;p=pspp diff --git a/src/ui/gui/psppire-conf.c b/src/ui/gui/psppire-conf.c index e917ecebb8..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); } @@ -223,6 +223,87 @@ psppire_conf_get_boolean (PsppireConf *conf, const gchar *base, } + +gboolean +psppire_conf_get_string (PsppireConf *conf, const gchar *base, + const gchar *name, gchar **value) +{ + 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) + *value = b; + + return ok; +} + + + + +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, @@ -241,6 +322,46 @@ psppire_conf_set_boolean (PsppireConf *conf, conf_write (conf); } + +void +psppire_conf_set_string (PsppireConf *conf, + const gchar *base, const gchar *name, + const gchar *value) +{ + g_key_file_set_string (conf->keyfile, base, name, value); + 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); +} + + + /* A convenience function to set the geometry of a window from from a saved config