4
4
G_DEFINE_TYPE (GPumpSettingsData, gpump_settings_data, G_TYPE_OBJECT)
7
/* Private datastructure */
8
struct GPumpSettingsData {
9
#if GPUMP_USE_GSETTINGS
10
/* org.gego.gpump.ui */
11
GSettings * ui_settings;
13
GSettings * gpump_settings;
15
GKeyFile * gpump_settings; /* Stores both UI and other settings... */
16
GFile * gpump_settigs_file;
17
#endif /* GPUMP_USE_GSETTINGS */
7
20
/* * Override the default constructer *****************************************/
8
21
GObject * _constructor (GType type,
9
22
guint n_construct_params,
21
34
void gpump_settings_data_init (GPumpSettingsData * self) {
22
35
g_print ("Init GPumpSettingsData\n");
37
self->priv = GPUMP_SETTINGS_DATA_GET_PRIVATE (self);
39
#if GPUMP_USE_GSETTINGS
40
/* This will not be compiled, this will have to be implemented later...
23
43
self->ui_settings = g_settings_new ("org.gego.gpump.ui");
24
44
self->gpump_settings = g_settings_new ("org.gego.gpump");
47
/* Construct the path for the files, 1) the GPump settings 2) the GPump UI
50
* The file names are defined static, so they do not need to be re-created,
51
* each and every time te object is re-created.
54
self->priv->gpump_settings = g_key_file_new ();
56
static gchar * gpump_settings_file_uri = NULL;
58
if (!(gpump_settings_file_uri)) {
60
gchar * base_config_dir = g_get_user_config_dir ();
62
gchar * settings_basedir = g_strdup_printf ("%s/%s",
65
g_free (base_config_dir);
67
gpump_settings_file_uri = g_strdup_printf ("%s/%s",
72
/* Do not want to re-create this object every time, now do we? */
73
self->priv->gpump_settings_file = g_file_new_from_path (gpump_settings_uri);
76
if (!( g_key_file_load_from_file (self->priv->gpump_settings,
77
pump_settings_file_uri,
80
/* File does not exist or something else might be wrong. */
82
/* Did the file exist? */
83
if (!(g_error_match(err, G_KEY_FILE_ERROR, G_KEY_FILE_ERROR_NOT_FOUND))) {
84
g_error ("GPumpSettingsData:\nAn %s error occured:\n\t%s\n\n",
85
g_quark_to_string (err->domain),
89
/* The file did not exist, thus we must create a key-file and store it.
92
GOutputStream * out_stream = g_file_create (
93
self->priv->gpump_settings_file,
94
G_FILE_CREATE_PRIVATE,
97
g_object_unref (out_stream);
100
g_error ("GPumpSettingsData: %s\n\t%s\n\n",
101
g_quark_to_string (err->domain),
107
/* -1 is undefined, these are set when the main window is displayed */
108
g_key_file_set_integer (self->priv->gpump_settings, "ui","x", -1);
109
g_key_file_set_integer (self->priv->gpump_settings, "ui","y", -1);
110
/* 500x500 is the default window size */
111
g_key_file_set_integer (self->priv->gpump_settings, "ui","h", 500);
112
g_key_file_set_integer (self->priv->gpump_settings, "ui","x", 500);
114
g_key_file_set_boolean (self->priv->gpump_settings,
119
/* commit data to file. */
120
if (!(gpump_settings_data_commit (self, err))) {
121
g_error ("GPumpSettingsData:\n An %s error occured:\n\t%s\n\n",
122
g_quark_to_string (err->domain),
128
#endif /* GPUMP_USE_GSETTINGS */
29
133
GObjectClass * parent = G_OBJECT_CLASS (klass);
31
135
parent->constructor = _constructor;
137
g_type_class_add_private (klass, sizeof (GPumpSettingsDataPrivate);
141
void gpump_settings_data_set (GPumpSettingsData * self,
144
#if GPUMP_USE_GSETTINGS
152
GVariant * gpump_settings_data_get (GPumpSettingsData * self,
154
#if GPUMP_USE_GSETTINGS
162
gboolean gpump_settings_data_commit (GPumpSettingsData * self,
164
#if GPUMP_USE_GSETTINGS
168
g_assert (err == NULL);
170
GFileOutputStream * out_stream = g_file_replace (
171
self->priv->gpump_settings_file,
174
G_FILE_CREATE_PRIVATE,
178
g_object_unref (out_stream);
183
gchar * buff = g_key_file_to_data (self->priv->gpump_settings, len, err);
186
g_object_unref (out_stream);
192
g_output_stream_write (out_stream,
199
g_object_unref (out_stream);
205
g_object_unref (out_stream);
34
214
/* * Implementation of the constructor ****************************************