static void xfapplet_cleanup_unused_mateconf_keys () { MateConfClient *client; gchar *dir; gchar *in_use_key; int i = 0; client = mateconf_client_get_default (); while (1) { dir = g_strdup_printf (XFAPPLET_MATECONF_DIR "applet_%d", i++); if (mateconf_client_dir_exists (client, dir, NULL)) { in_use_key = g_strdup_printf ("%s/in_use", dir); if (!mateconf_client_get_bool (client, in_use_key, NULL)) mateconf_client_recursive_unset (client, dir, MATECONF_UNSET_INCLUDING_SCHEMA_NAMES, NULL); g_free (in_use_key); g_free (dir); } else break; } g_object_unref (client); g_free (dir); }
static char *get_all_applets (void) { MateConfClient *client; GError *error; GSList *list, *l; char *key, *oafiid, *name; GHashTable *hash_table; GString *string; error = NULL; hash_table = g_hash_table_new (g_str_hash, g_str_equal); insert_oafiids (hash_table); string = g_string_new (""); client = mateconf_client_get_default (); mateconf_client_suggest_sync (client, NULL); list = mateconf_client_all_dirs (client, "/apps/panel/applets", &error); if (error) { g_warning ("Error: %s", error->message); g_error_free (error); error = NULL; } for (l = list; l; l = l->next) { key = g_strdup_printf ("%s/matecomponent_iid", (gchar *)l->data); oafiid = mateconf_client_get_string (client, key, &error); if (error) { g_warning ("Error: %s", error->message); g_error_free (error); error = NULL; } g_free (key); if (oafiid) { name = g_hash_table_lookup (hash_table, oafiid); if (name) { mateconf_client_recursive_unset (client, l->data, MATECONF_UNSET_INCLUDING_SCHEMA_NAMES, &error); if (error) { g_warning ("Error: %s", error->message); g_error_free (error); error = NULL; } g_string_append_printf (string, " • %s\n", name); } g_free (oafiid); } g_free (l->data); } g_slist_free (list); g_hash_table_destroy (hash_table); return g_string_free (string, FALSE); }