static gboolean panel_layout_append_group (GKeyFile *keyfile, const char *group, int screen_for_toplevels, gboolean dry_run, GError **error) { g_return_val_if_fail (error == NULL || *error == NULL, FALSE); if (g_strcmp0 (group, "Toplevel") == 0 || g_str_has_prefix (group, "Toplevel ")) return panel_layout_append_group_helper ( keyfile, group, screen_for_toplevels, "Toplevel", PANEL_LAYOUT_TOPLEVEL_ID_LIST_KEY, PANEL_TOPLEVEL_SCHEMA, PANEL_LAYOUT_TOPLEVEL_PATH, PANEL_LAYOUT_TOPLEVEL_DEFAULT_PREFIX, panel_layout_toplevel_keys, G_N_ELEMENTS (panel_layout_toplevel_keys), dry_run, error, "toplevel"); else if (g_strcmp0 (group, "Object") == 0 || g_str_has_prefix (group, "Object ")) return panel_layout_append_group_helper ( keyfile, group, -1, "Object", PANEL_LAYOUT_OBJECT_ID_LIST_KEY, PANEL_OBJECT_SCHEMA, PANEL_LAYOUT_OBJECT_PATH, PANEL_LAYOUT_OBJECT_DEFAULT_PREFIX, panel_layout_object_keys, G_N_ELEMENTS (panel_layout_object_keys), dry_run, error, "object"); g_set_error (error, PANEL_LAYOUT_ERROR, 0, "Unknown group '%s'", group); return FALSE; }
void panel_layout_apply_default_from_gkeyfile (GdkScreen *screen) { int screen_n; gchar *layout_file = NULL; GKeyFile *keyfile = NULL; gchar **groups = NULL; GError *error = NULL; int i; screen_n = gdk_screen_get_number (screen); layout_file = panel_layout_filename(); if (layout_file) { keyfile = g_key_file_new (); if (g_key_file_load_from_file (keyfile, layout_file, G_KEY_FILE_NONE, &error)) { groups = g_key_file_get_groups (keyfile, NULL); for (i = 0; groups[i] != NULL; i++) { if (g_strcmp0 (groups[i], "Toplevel") == 0 || g_str_has_prefix (groups[i], "Toplevel ")) panel_layout_append_group_helper ( keyfile, groups[i], screen_n, "Toplevel", PANEL_TOPLEVEL_ID_LIST_KEY, PANEL_TOPLEVEL_SCHEMA, PANEL_TOPLEVEL_PATH, PANEL_TOPLEVEL_DEFAULT_PREFIX, panel_layout_toplevel_keys, G_N_ELEMENTS (panel_layout_toplevel_keys), "toplevel"); else if (g_strcmp0 (groups[i], "Object") == 0 || g_str_has_prefix (groups[i], "Object ")) panel_layout_append_group_helper ( keyfile, groups[i], -1, "Object", PANEL_OBJECT_ID_LIST_KEY, PANEL_OBJECT_SCHEMA, PANEL_OBJECT_PATH, PANEL_OBJECT_DEFAULT_PREFIX, panel_layout_object_keys, G_N_ELEMENTS (panel_layout_object_keys), "object"); else g_warning ("Unknown group in default layout: '%s'", groups[i]); } } else { g_warning ("Error while parsing default layout from '%s': %s\n", layout_file, error->message); g_error_free (error); } } else { g_warning ("Cant find a default layout file!"); /* FIXME implement a fallback panel */ } if (groups) g_strfreev (groups); if (keyfile) g_key_file_free (keyfile); if (layout_file) g_free (layout_file); }