2
* Copyright © 2007-2009 daniel g. siegel <dgsiegel@gnome.org>
4
* Licensed under the GNU General Public License Version 2
6
* This program is free software; you can redistribute it and/or modify
7
* it under the terms of the GNU General Public License as published by
8
* the Free Software Foundation; either version 2 of the License, or
9
* (at your option) any later version.
11
* This program is distributed in the hope that it will be useful,
12
* but WITHOUT ANY WARRANTY; without even the implied warranty of
13
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14
* GNU General Public License for more details.
16
* You should have received a copy of the GNU General Public License
17
* along with this program. If not, see <http://www.gnu.org/licenses/>.
21
#include <cheese-config.h>
27
#include <gconf/gconf.h>
28
#include <gconf/gconf-client.h>
30
#include "cheese-gconf.h"
32
#define CHEESE_GCONF_PREFIX "/apps/cheese"
34
G_DEFINE_TYPE (CheeseGConf, cheese_gconf, G_TYPE_OBJECT)
36
#define CHEESE_GCONF_GET_PRIVATE(o) \
37
(G_TYPE_INSTANCE_GET_PRIVATE ((o), CHEESE_TYPE_GCONF, CheeseGConfPrivate))
45
cheese_gconf_get_property (GObject *object, guint prop_id, GValue *value,
50
self = CHEESE_GCONF (object);
51
CheeseGConfPrivate *priv = CHEESE_GCONF_GET_PRIVATE (self);
58
case GCONF_PROP_COUNTDOWN:
59
g_value_set_boolean (value, gconf_client_get_bool (priv->client,
60
CHEESE_GCONF_PREFIX "/countdown",
63
case GCONF_PROP_CAMERA:
64
g_value_set_string (value, gconf_client_get_string (priv->client,
65
CHEESE_GCONF_PREFIX "/camera",
68
case GCONF_PROP_SELECTED_EFFECTS:
70
list = gconf_client_get_list (priv->client,
71
CHEESE_GCONF_PREFIX "/selected_effects",
77
char *str = tmp->data;
79
str[0] = g_ascii_toupper (str[0]);
80
for (j = 1; j < g_utf8_strlen (str, -1); j++)
85
str[j + 1] = g_ascii_toupper (str[j + 1]);
87
else if (str[j] == '_')
90
str[j + 1] = g_ascii_toupper (str[j + 1]);
94
effects = g_strdup (str);
97
gchar *dummy = effects;
98
effects = g_strjoin (",", effects, str, NULL);
103
tmp = g_slist_next (tmp);
105
g_value_set_string (value, effects);
110
case GCONF_PROP_X_RESOLUTION:
111
g_value_set_int (value, gconf_client_get_int (priv->client,
112
CHEESE_GCONF_PREFIX "/x_resolution",
115
case GCONF_PROP_Y_RESOLUTION:
116
g_value_set_int (value, gconf_client_get_int (priv->client,
117
CHEESE_GCONF_PREFIX "/y_resolution",
120
case GCONF_PROP_BRIGHTNESS:
121
if (!gconf_client_get (priv->client,
122
CHEESE_GCONF_PREFIX "/brightness",
124
g_value_set_double (value, G_PARAM_SPEC_DOUBLE (pspec)->default_value);
126
g_value_set_double (value, gconf_client_get_float (priv->client,
127
CHEESE_GCONF_PREFIX "/brightness",
130
case GCONF_PROP_CONTRAST:
131
if (!gconf_client_get (priv->client,
132
CHEESE_GCONF_PREFIX "/contrast",
134
g_value_set_double (value, G_PARAM_SPEC_DOUBLE (pspec)->default_value);
136
g_value_set_double (value, gconf_client_get_float (priv->client,
137
CHEESE_GCONF_PREFIX "/contrast",
140
case GCONF_PROP_SATURATION:
141
if (!gconf_client_get (priv->client,
142
CHEESE_GCONF_PREFIX "/saturation",
144
g_value_set_double (value, G_PARAM_SPEC_DOUBLE (pspec)->default_value);
146
g_value_set_double (value, gconf_client_get_float (priv->client,
147
CHEESE_GCONF_PREFIX "/saturation",
151
if (!gconf_client_get (priv->client,
152
CHEESE_GCONF_PREFIX "/hue",
154
g_value_set_double (value, G_PARAM_SPEC_DOUBLE (pspec)->default_value);
156
g_value_set_double (value, gconf_client_get_float (priv->client,
157
CHEESE_GCONF_PREFIX "/hue",
160
case GCONF_PROP_VIDEO_PATH:
161
g_value_set_string (value, gconf_client_get_string (priv->client,
162
CHEESE_GCONF_PREFIX "/video_path",
165
case GCONF_PROP_PHOTO_PATH:
166
g_value_set_string (value, gconf_client_get_string (priv->client,
167
CHEESE_GCONF_PREFIX "/photo_path",
170
case GCONF_PROP_ENABLE_DELETE:
171
g_value_set_boolean (value, gconf_client_get_bool (priv->client,
172
CHEESE_GCONF_PREFIX "/enable_delete",
175
case GCONF_PROP_WIDE_MODE:
176
g_value_set_boolean (value, gconf_client_get_bool (priv->client,
177
CHEESE_GCONF_PREFIX "/wide_mode",
180
case GCONF_PROP_BURST_DELAY:
181
g_value_set_int (value, gconf_client_get_int (priv->client,
182
CHEESE_GCONF_PREFIX "/burst_delay",
185
case GCONF_PROP_BURST_REPEAT:
186
g_value_set_int (value, gconf_client_get_int (priv->client,
187
CHEESE_GCONF_PREFIX "/burst_repeat",
191
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
197
cheese_gconf_set_property (GObject *object, guint prop_id, const GValue *value,
202
self = CHEESE_GCONF (object);
203
CheeseGConfPrivate *priv = CHEESE_GCONF_GET_PRIVATE (self);
205
gchar **effects = NULL;
211
case GCONF_PROP_COUNTDOWN:
212
gconf_client_set_bool (priv->client,
213
CHEESE_GCONF_PREFIX "/countdown",
214
g_value_get_boolean (value),
217
case GCONF_PROP_CAMERA:
218
gconf_client_set_string (priv->client,
219
CHEESE_GCONF_PREFIX "/camera",
220
g_value_get_string (value),
223
case GCONF_PROP_SELECTED_EFFECTS:
225
if (g_value_get_string (value) == NULL)
231
char *str = g_value_dup_string (value);
233
for (j = 0; j < g_utf8_strlen (str, -1); j++)
235
if (g_ascii_isupper (str[j]))
237
str[j] = g_ascii_tolower (str[j]);
239
else if (str[j] == ' ')
243
else if (str[j] == '/')
248
effects = g_strsplit (str, ",", 12);
249
for (i = 0; effects[i] != NULL; i++)
251
list = g_slist_append (list, effects[i]);
255
gconf_client_set_list (priv->client,
256
CHEESE_GCONF_PREFIX "/selected_effects",
261
g_strfreev (effects);
263
case GCONF_PROP_X_RESOLUTION:
264
gconf_client_set_int (priv->client,
265
CHEESE_GCONF_PREFIX "/x_resolution",
266
g_value_get_int (value),
269
case GCONF_PROP_Y_RESOLUTION:
270
gconf_client_set_int (priv->client,
271
CHEESE_GCONF_PREFIX "/y_resolution",
272
g_value_get_int (value),
275
case GCONF_PROP_BRIGHTNESS:
276
gconf_client_set_float (priv->client,
277
CHEESE_GCONF_PREFIX "/brightness",
278
g_value_get_double (value),
281
case GCONF_PROP_CONTRAST:
282
gconf_client_set_float (priv->client,
283
CHEESE_GCONF_PREFIX "/contrast",
284
g_value_get_double (value),
287
case GCONF_PROP_SATURATION:
288
gconf_client_set_float (priv->client,
289
CHEESE_GCONF_PREFIX "/saturation",
290
g_value_get_double (value),
294
gconf_client_set_float (priv->client,
295
CHEESE_GCONF_PREFIX "/hue",
296
g_value_get_double (value),
299
case GCONF_PROP_VIDEO_PATH:
300
gconf_client_set_string (priv->client,
301
CHEESE_GCONF_PREFIX "/video_path",
302
g_value_get_string (value),
305
case GCONF_PROP_PHOTO_PATH:
306
gconf_client_set_string (priv->client,
307
CHEESE_GCONF_PREFIX "/photo_path",
308
g_value_get_string (value),
311
case GCONF_PROP_ENABLE_DELETE:
312
gconf_client_set_bool (priv->client,
313
CHEESE_GCONF_PREFIX "/enable_delete",
314
g_value_get_boolean (value),
317
case GCONF_PROP_WIDE_MODE:
318
gconf_client_set_bool (priv->client,
319
CHEESE_GCONF_PREFIX "/wide_mode",
320
g_value_get_boolean (value),
323
case GCONF_PROP_BURST_DELAY:
324
gconf_client_set_int (priv->client,
325
CHEESE_GCONF_PREFIX "/burst_delay",
326
g_value_get_int (value),
329
case GCONF_PROP_BURST_REPEAT:
330
gconf_client_set_int (priv->client,
331
CHEESE_GCONF_PREFIX "/burst_repeat",
332
g_value_get_int (value),
336
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
342
cheese_gconf_finalize (GObject *object)
346
gconf = CHEESE_GCONF (object);
347
CheeseGConfPrivate *priv = CHEESE_GCONF_GET_PRIVATE (gconf);
349
g_object_unref (priv->client);
350
G_OBJECT_CLASS (cheese_gconf_parent_class)->finalize (object);
354
cheese_gconf_class_init (CheeseGConfClass *klass)
356
GObjectClass *object_class = G_OBJECT_CLASS (klass);
358
object_class->finalize = cheese_gconf_finalize;
360
object_class->get_property = cheese_gconf_get_property;
361
object_class->set_property = cheese_gconf_set_property;
363
g_object_class_install_property (object_class, GCONF_PROP_COUNTDOWN,
364
g_param_spec_boolean ("gconf_prop_countdown",
369
g_object_class_install_property (object_class, GCONF_PROP_CAMERA,
370
g_param_spec_string ("gconf_prop_camera",
375
g_object_class_install_property (object_class, GCONF_PROP_SELECTED_EFFECTS,
376
g_param_spec_string ("gconf_prop_selected_effects",
382
g_object_class_install_property (object_class, GCONF_PROP_X_RESOLUTION,
383
g_param_spec_int ("gconf_prop_x_resolution",
391
g_object_class_install_property (object_class, GCONF_PROP_Y_RESOLUTION,
392
g_param_spec_int ("gconf_prop_y_resolution",
400
g_object_class_install_property (object_class, GCONF_PROP_BRIGHTNESS,
401
g_param_spec_double ("gconf_prop_brightness",
409
g_object_class_install_property (object_class, GCONF_PROP_CONTRAST,
410
g_param_spec_double ("gconf_prop_contrast",
418
g_object_class_install_property (object_class, GCONF_PROP_SATURATION,
419
g_param_spec_double ("gconf_prop_saturation",
427
g_object_class_install_property (object_class, GCONF_PROP_HUE,
428
g_param_spec_double ("gconf_prop_hue",
436
g_object_class_install_property (object_class, GCONF_PROP_VIDEO_PATH,
437
g_param_spec_string ("gconf_prop_video_path",
443
g_object_class_install_property (object_class, GCONF_PROP_PHOTO_PATH,
444
g_param_spec_string ("gconf_prop_photo_path",
450
g_object_class_install_property (object_class, GCONF_PROP_ENABLE_DELETE,
451
g_param_spec_boolean ("gconf_prop_enable_delete",
457
g_object_class_install_property (object_class, GCONF_PROP_WIDE_MODE,
458
g_param_spec_boolean ("gconf_prop_wide_mode",
464
g_object_class_install_property (object_class, GCONF_PROP_BURST_DELAY,
465
g_param_spec_int ("gconf_prop_burst_delay",
468
200, /* based on some experiments */
473
g_object_class_install_property (object_class, GCONF_PROP_BURST_REPEAT,
474
g_param_spec_int ("gconf_prop_burst_repeat",
482
g_type_class_add_private (klass, sizeof (CheeseGConfPrivate));
486
cheese_gconf_init (CheeseGConf *gconf)
488
CheeseGConfPrivate *priv = CHEESE_GCONF_GET_PRIVATE (gconf);
490
priv->client = gconf_client_get_default ();
496
static CheeseGConf *gconf = NULL;
499
return g_object_ref (gconf);
501
gconf = g_object_new (CHEESE_TYPE_GCONF, NULL);
502
g_object_add_weak_pointer (G_OBJECT (gconf),