~ubuntu-branches/ubuntu/oneiric/gnome-panel/oneiric

« back to all changes in this revision

Viewing changes to gnome-panel/panel-gconf.c

  • Committer: Bazaar Package Importer
  • Author(s): Sebastien Bacher
  • Date: 2011-05-30 11:04:49 UTC
  • mfrom: (1.3.4 upstream)
  • mto: This revision was merged to the branch mainline in revision 204.
  • Revision ID: james.westby@ubuntu.com-20110530110449-ut1tc5t61rpvf9e3
Tags: upstream-3.0.2
ImportĀ upstreamĀ versionĀ 3.0.2

Show diffs side-by-side

added added

removed removed

Lines of Context:
101
101
        return buffer;
102
102
}
103
103
 
104
 
const char *
105
 
panel_gconf_key_type_to_id_list (PanelGConfKeyType type)
106
 
{
107
 
        char *retval;
108
 
 
109
 
        switch (type) {
110
 
        case PANEL_GCONF_TOPLEVELS:
111
 
                retval = "toplevel_id_list";
112
 
                break;
113
 
        case PANEL_GCONF_APPLETS:
114
 
                retval = "applet_id_list";
115
 
                break;
116
 
        case PANEL_GCONF_OBJECTS:
117
 
                retval = "object_id_list";
118
 
                break;
119
 
        default:
120
 
                retval = NULL;
121
 
                g_assert_not_reached ();
122
 
                break;
123
 
        }
124
 
 
125
 
        return retval;
126
 
}
127
 
 
128
 
const char * 
129
 
panel_gconf_global_key (const char *key)
130
 
{
131
 
        return panel_gconf_sprintf ("/apps/panel/global/%s", key);
132
 
}
133
 
 
134
 
const char *
135
 
panel_gconf_general_key (const char *key)
136
 
{
137
 
        return panel_gconf_sprintf (PANEL_CONFIG_DIR "/general/%s", key);
138
 
}
139
 
 
140
 
const char *
141
 
panel_gconf_full_key (PanelGConfKeyType  type,
142
 
                      const char        *id,
143
 
                      const char        *key)
144
 
{
145
 
        char *subdir = NULL;
146
 
 
147
 
        switch (type) {
148
 
        case PANEL_GCONF_TOPLEVELS:
149
 
                subdir = "toplevels";
150
 
                break;
151
 
        case PANEL_GCONF_OBJECTS:
152
 
                subdir = "objects";
153
 
                break;
154
 
        case PANEL_GCONF_APPLETS:
155
 
                subdir = "applets";
156
 
                break;
157
 
        default:
158
 
                g_assert_not_reached ();
159
 
                break;
160
 
        }
161
 
 
162
 
        return panel_gconf_sprintf (PANEL_CONFIG_DIR "/%s/%s/%s",
163
 
                                    subdir, id, key);
164
 
}
165
 
 
166
 
const char *
167
 
panel_gconf_basename (const char *key)
168
 
{
169
 
        char *retval;
170
 
 
171
 
        g_return_val_if_fail (key != NULL, NULL);
172
 
 
173
 
        retval = strrchr (key, '/');
174
 
 
175
 
        return retval ? retval + 1 : NULL;
176
 
}
177
 
 
178
 
char *
179
 
panel_gconf_dirname (const char *key)
180
 
{
181
 
        char *retval;
182
 
        int   len;
183
 
 
184
 
        g_return_val_if_fail (key != NULL, NULL);
185
 
 
186
 
        retval = strrchr (key, '/');
187
 
        g_assert (retval != NULL);
188
 
 
189
 
        len = retval - key;
190
 
        g_assert (len > 0);
191
 
 
192
 
        retval = g_new0 (char, len + 1);
193
 
        memcpy (retval, key, len);
194
 
 
195
 
        return retval;
196
 
}
197
 
 
198
104
static void
199
105
panel_notify_object_dead (guint notify_id)
200
106
{
228
134
        return notify_id;
229
135
}
230
136
 
231
 
void
232
 
panel_gconf_copy_dir (GConfClient  *client,
233
 
                      const char   *src_dir,
234
 
                      const char   *dest_dir)
235
 
{
236
 
        GSList *list, *l;
237
 
 
238
 
        list = gconf_client_all_entries (client, src_dir, NULL);
239
 
        for (l = list; l; l = l->next) {
240
 
                GConfEntry *entry = l->data;
241
 
                const char *key;
242
 
                char       *tmp;
243
 
 
244
 
                tmp = g_path_get_basename (gconf_entry_get_key (entry));
245
 
                key = panel_gconf_sprintf ("%s/%s", dest_dir, tmp);
246
 
                g_free (tmp);
247
 
 
248
 
                gconf_engine_associate_schema (client->engine,
249
 
                                               key,
250
 
                                               gconf_entry_get_schema_name (entry),
251
 
                                               NULL);
252
 
 
253
 
                if (!gconf_entry_get_is_default (entry) && entry->value)
254
 
                        gconf_client_set (client, key, entry->value, NULL);
255
 
 
256
 
                gconf_entry_unref (entry);
257
 
        }
258
 
        g_slist_free (list);
259
 
 
260
 
        list = gconf_client_all_dirs (client, src_dir, NULL);
261
 
        for (l = list; l; l = l->next) {
262
 
                char *subdir = l->data;
263
 
                char *src_subdir;
264
 
                char *dest_subdir;
265
 
                char *tmp;
266
 
 
267
 
                tmp = g_path_get_basename (subdir);
268
 
                src_subdir  = gconf_concat_dir_and_key (src_dir,  tmp);
269
 
                dest_subdir = gconf_concat_dir_and_key (dest_dir, tmp);
270
 
                g_free (tmp);
271
 
 
272
 
                panel_gconf_copy_dir (client, src_subdir, dest_subdir);
273
 
 
274
 
                g_free (src_subdir);
275
 
                g_free (dest_subdir);
276
 
                g_free (subdir);
277
 
        }
278
 
 
279
 
        g_slist_free (list);
280
 
}
281
 
 
282
 
void
283
 
panel_gconf_associate_schemas_in_dir (GConfClient  *client,
284
 
                                      const char   *profile_dir,
285
 
                                      const char   *schema_dir)
286
 
{
287
 
        GSList *list, *l;
288
 
 
289
 
#ifdef PANEL_GCONF_DEBUG
290
 
        g_print ("associating schemas in %s to %s\n", schema_dir, profile_dir);
291
 
#endif
292
 
 
293
 
        list = gconf_client_all_entries (client, schema_dir, NULL);
294
 
        for (l = list; l; l = l->next) {
295
 
                GConfEntry *entry = l->data;
296
 
                const char *key;
297
 
                char       *tmp;
298
 
 
299
 
                tmp = g_path_get_basename (gconf_entry_get_key (entry));
300
 
 
301
 
                key = panel_gconf_sprintf ("%s/%s", profile_dir, tmp);
302
 
 
303
 
                g_free (tmp);
304
 
 
305
 
                gconf_engine_associate_schema (
306
 
                        client->engine, key, gconf_entry_get_key (entry), NULL);
307
 
 
308
 
                gconf_entry_unref (entry);
309
 
        }
310
 
 
311
 
        g_slist_free (list);
312
 
 
313
 
        list = gconf_client_all_dirs (client, schema_dir, NULL);
314
 
        for (l = list; l; l = l->next) {
315
 
                char *subdir = l->data;
316
 
                char *prefs_subdir;
317
 
                char *schema_subdir;
318
 
                char *tmp;
319
 
 
320
 
                tmp = g_path_get_basename (subdir);
321
 
 
322
 
                prefs_subdir  = g_strdup_printf ("%s/%s", profile_dir, tmp);
323
 
                schema_subdir = g_strdup_printf ("%s/%s", schema_dir, tmp);
324
 
 
325
 
                panel_gconf_associate_schemas_in_dir (
326
 
                        client, prefs_subdir, schema_subdir);
327
 
 
328
 
                g_free (prefs_subdir);
329
 
                g_free (schema_subdir);
330
 
                g_free (subdir);
331
 
                g_free (tmp);
332
 
        }
333
 
 
334
 
        g_slist_free (list);
335
 
}
336
 
 
337
 
gint
338
 
panel_gconf_value_strcmp (gconstpointer a,
339
 
                          gconstpointer b)
340
 
{
341
 
        const char *str_a;
342
 
        const char *str_b;
343
 
 
344
 
        if (a == b || !a || !b)
345
 
                return 0;
346
 
 
347
 
        str_a = gconf_value_get_string (a);
348
 
        str_b = gconf_value_get_string (b);
349
 
 
350
 
        return strcmp (str_a, str_b);
 
137
gboolean
 
138
panel_gconf_recursive_unset (const gchar  *dir,
 
139
                             GError     **error)
 
140
{
 
141
        return gconf_client_recursive_unset (panel_gconf_get_client (), dir,
 
142
                                             GCONF_UNSET_INCLUDING_SCHEMA_NAMES,
 
143
                                             NULL);
351
144
}