- xmlNodePtr app = parse_find_node("application", node->children);
- gchar *name = NULL, *class = NULL, *role = NULL;
- gboolean name_set, class_set;
- gboolean x_pos_given;
-
- while (app) {
- name_set = class_set = x_pos_given = FALSE;
-
- class_set = parse_attr_string("class", app, &class);
- name_set = parse_attr_string("name", app, &name);
- if (class_set || name_set) {
- xmlNodePtr n, c;
- ObAppSettings *settings = config_create_app_settings();;
-
- if (name_set)
- settings->name = g_pattern_spec_new(name);
-
- if (class_set)
- settings->class = g_pattern_spec_new(class);
-
- if (parse_attr_string("role", app, &role))
- settings->role = g_pattern_spec_new(role);
-
- if ((n = parse_find_node("decor", app->children)))
- if (!parse_contains("default", doc, n))
- settings->decor = parse_bool(doc, n);
-
- if ((n = parse_find_node("shade", app->children)))
- if (!parse_contains("default", doc, n))
- settings->shade = parse_bool(doc, n);
-
- if ((n = parse_find_node("position", app->children))) {
- if ((c = parse_find_node("x", n->children)))
- if (!parse_contains("default", doc, c)) {
- config_parse_gravity_coord(doc, c,
- &settings->position.x);
- x_pos_given = TRUE;
- }
-
- if (x_pos_given && (c = parse_find_node("y", n->children)))
- if (!parse_contains("default", doc, c)) {
- config_parse_gravity_coord(doc, c,
- &settings->position.y);
- settings->pos_given = TRUE;
- }
-
- if (settings->pos_given &&
- (c = parse_find_node("monitor", n->children)))
- if (!parse_contains("default", doc, c)) {
- gchar *s = parse_string(doc, c);
- if (!g_ascii_strcasecmp(s, "mouse"))
- settings->monitor = 0;
- else
- settings->monitor = parse_int(doc, c) + 1;
- g_free(s);
- }
-
- parse_attr_bool("force", n, &settings->pos_force);
- }
-
- if ((n = parse_find_node("focus", app->children)))
- if (!parse_contains("default", doc, n))
- settings->focus = parse_bool(doc, n);
-
- if ((n = parse_find_node("desktop", app->children))) {
- if (!parse_contains("default", doc, n)) {
- gchar *s = parse_string(doc, n);
- if (!g_ascii_strcasecmp(s, "all"))
- settings->desktop = DESKTOP_ALL;
- else {
- gint i = parse_int(doc, n);
- if (i > 0)
- settings->desktop = i;
- }
- g_free(s);
- }
- }
-
- if ((n = parse_find_node("layer", app->children)))
- if (!parse_contains("default", doc, n)) {
- gchar *s = parse_string(doc, n);
- if (!g_ascii_strcasecmp(s, "above"))
- settings->layer = 1;
- else if (!g_ascii_strcasecmp(s, "below"))
- settings->layer = -1;
- else
- settings->layer = 0;
- g_free(s);
- }
-
- if ((n = parse_find_node("iconic", app->children)))
- if (!parse_contains("default", doc, n))
- settings->iconic = parse_bool(doc, n);
-
- if ((n = parse_find_node("skip_pager", app->children)))
- if (!parse_contains("default", doc, n))
- settings->skip_pager = parse_bool(doc, n);
-
- if ((n = parse_find_node("skip_taskbar", app->children)))
- if (!parse_contains("default", doc, n))
- settings->skip_taskbar = parse_bool(doc, n);
-
- if ((n = parse_find_node("fullscreen", app->children)))
- if (!parse_contains("default", doc, n))
- settings->fullscreen = parse_bool(doc, n);
-
- if ((n = parse_find_node("maximized", app->children)))
- if (!parse_contains("default", doc, n)) {
- gchar *s = parse_string(doc, n);
- if (!g_ascii_strcasecmp(s, "horizontal")) {
- settings->max_horz = TRUE;
- settings->max_vert = FALSE;
- } else if (!g_ascii_strcasecmp(s, "vertical")) {
- settings->max_horz = FALSE;
- settings->max_vert = TRUE;
- } else
- settings->max_horz = settings->max_vert =
- parse_bool(doc, n);
- g_free(s);
- }
-
- config_per_app_settings = g_slist_append(config_per_app_settings,
- (gpointer) settings);
- g_free(name);
- g_free(class);
- g_free(role);
- name = class = role = NULL;
+ xmlNodePtr app = obt_xml_find_node(node->children, "application");
+ for (; app; app = obt_xml_find_node(app->next, "application")) {
+ ObAppSettings *settings;
+
+ gboolean name_set, class_set, role_set, title_set,
+ type_set, group_name_set, group_class_set;
+ gchar *name = NULL, *class = NULL, *role = NULL, *title = NULL,
+ *type_str = NULL, *group_name = NULL, *group_class = NULL;
+ ObClientType type;
+
+ class_set = obt_xml_attr_string(app, "class", &class);
+ name_set = obt_xml_attr_string(app, "name", &name);
+ group_class_set = obt_xml_attr_string(app, "groupclass", &group_class);
+ group_name_set = obt_xml_attr_string(app, "groupname", &group_name);
+ type_set = obt_xml_attr_string(app, "type", &type_str);
+ role_set = obt_xml_attr_string(app, "role", &role);
+ title_set = obt_xml_attr_string(app, "title", &title);
+
+ /* validate the type tho */
+ if (type_set) {
+ if (!g_ascii_strcasecmp(type_str, "normal"))
+ type = OB_CLIENT_TYPE_NORMAL;
+ else if (!g_ascii_strcasecmp(type_str, "dialog"))
+ type = OB_CLIENT_TYPE_DIALOG;
+ else if (!g_ascii_strcasecmp(type_str, "splash"))
+ type = OB_CLIENT_TYPE_SPLASH;
+ else if (!g_ascii_strcasecmp(type_str, "utility"))
+ type = OB_CLIENT_TYPE_UTILITY;
+ else if (!g_ascii_strcasecmp(type_str, "menu"))
+ type = OB_CLIENT_TYPE_MENU;
+ else if (!g_ascii_strcasecmp(type_str, "toolbar"))
+ type = OB_CLIENT_TYPE_TOOLBAR;
+ else if (!g_ascii_strcasecmp(type_str, "dock"))
+ type = OB_CLIENT_TYPE_DOCK;
+ else if (!g_ascii_strcasecmp(type_str, "desktop"))
+ type = OB_CLIENT_TYPE_DESKTOP;
+ else
+ type_set = FALSE; /* not valid! */