#include "psppire-conf.h"
-static void psppire_conf_init (PsppireConf *conf);
-static void psppire_conf_class_init (PsppireConfClass *class);
+G_DEFINE_TYPE (PsppireConf, psppire_conf, G_TYPE_OBJECT)
static void psppire_conf_finalize (GObject *object);
static void psppire_conf_dispose (GObject *object);
static GObjectClass *parent_class = NULL;
-
-GType
-psppire_conf_get_type (void)
-{
- static GType conf_type = 0;
-
- if (!conf_type)
- {
- static const GTypeInfo conf_info =
- {
- sizeof (PsppireConfClass),
- NULL, /* base_init */
- NULL, /* base_finalize */
- (GClassInitFunc) psppire_conf_class_init,
- NULL, /* class_finalize */
- NULL, /* class_data */
- sizeof (PsppireConf),
- 0,
- (GInstanceInitFunc) psppire_conf_init,
- };
-
- conf_type = g_type_register_static (G_TYPE_OBJECT,
- "PsppireConf",
- &conf_info, 0);
- }
-
- return conf_type;
-}
-
-
static void
conf_read (PsppireConf *conf)
{
gsize length = 0;
gchar *kf = g_key_file_to_data (conf->keyfile, &length, NULL);
+ GError *err = NULL;
- if ( ! g_file_set_contents (conf->filename, kf, length, NULL) )
+ if (! g_file_set_contents (conf->filename, kf, length, &err))
{
- g_warning ("Cannot open %s for writing", conf->filename);
+ g_warning ("Cannot open %s for writing: %s", conf->filename, err->message);
+ g_error_free (err);
}
g_free (kf);
static void
conf_write (PsppireConf *conf)
{
- if ( conf->idle == 0)
- conf->idle = g_idle_add_full (G_PRIORITY_LOW,
+ if (conf->idle == 0)
+ conf->idle = g_idle_add_full (G_PRIORITY_LOW,
(GSourceFunc) flush_conf, conf, NULL);
}
GObjectClass *object_class;
parent_class = g_type_class_peek_parent (class);
- object_class = (GObjectClass*) class;
+ object_class = G_OBJECT_CLASS (class);
object_class->finalize = psppire_conf_finalize;
object_class->dispose = psppire_conf_dispose;
object_class->constructor = psppire_conf_construct;
-
}
conf->keyfile = g_key_file_new ();
- conf->dispose_has_run = FALSE;
conf->idle = 0;
}
name, &err);
ok = (err == NULL);
- if ( err != NULL )
+ if (err != NULL)
g_error_free (err);
return ok;
name, &err);
ok = (err == NULL);
- if ( err != NULL )
+ if (err != NULL)
g_error_free (err);
if (ok)
name, &err);
ok = (err == NULL);
- if ( err != NULL )
+ if (err != NULL)
g_error_free (err);
if (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,
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);
+}
+
/*
if (psppire_conf_get_int (conf, base, "height", &height)
&&
- psppire_conf_get_int (conf, base, "width", &width) )
+ psppire_conf_get_int (conf, base, "width", &width))
{
gtk_window_set_default_size (window, width, height);
}
- if ( psppire_conf_get_int (conf, base, "x", &x)
+ if (psppire_conf_get_int (conf, base, "x", &x)
&&
- psppire_conf_get_int (conf, base, "y", &y) )
+ psppire_conf_get_int (conf, base, "y", &y))
{
gtk_window_move (window, x, y);
}
- if ( psppire_conf_get_boolean (conf, base, "maximize", &maximize))
+ if (psppire_conf_get_boolean (conf, base, "maximize", &maximize))
{
if (maximize)
gtk_window_maximize (window);