X-Git-Url: https://git.dogcows.com/gitweb?a=blobdiff_plain;ds=sidebyside;f=parser%2Fparse.c;h=f2dcb09d86e2798f9c1fe31bdcc86da823efe070;hb=ca342aa767d35fe40e710c116d539b9577caa6ae;hp=43d076e1e95450eb11e699f5e77ad7e8982c7913;hpb=a6aaabe62c3651169dda9a1a34bcec64dad4ee92;p=chaz%2Fopenbox diff --git a/parser/parse.c b/parser/parse.c index 43d076e1..f2dcb09d 100644 --- a/parser/parse.c +++ b/parser/parse.c @@ -108,20 +108,35 @@ gboolean parse_load_theme(const gchar *name, xmlDocPtr *doc, xmlNodePtr *root, GSList *it; gchar *path; gboolean r = FALSE; + gchar *eng; /* backward compatibility.. */ path = g_build_filename(g_get_home_dir(), ".themes", name, "openbox-3", "themerc.xml", NULL); - if ((r = parse_load(path, "openbox_theme", doc, root))) - *retpath = g_path_get_dirname(path); + if (parse_load(path, "openbox_theme", doc, root) && + parse_attr_string("engine", *root, &eng)) + { + if (!strcmp(eng, "box")) { + *retpath = g_path_get_dirname(path); + r = TRUE; + } + g_free(eng); + } g_free(path); if (!r) { for (it = xdg_data_dir_paths; !r && it; it = g_slist_next(it)) { path = g_build_filename(it->data, "themes", name, "openbox-3", "themerc.xml", NULL); - if ((r = parse_load(path, "openbox_theme", doc, root))) - *retpath = g_path_get_dirname(path); + if (parse_load(path, "openbox_theme", doc, root) && + parse_attr_string("engine", *root, &eng)) + { + if (!strcmp(eng, "box")) { + *retpath = g_path_get_dirname(path); + r = TRUE; + } + g_free(eng); + } g_free(path); } } @@ -227,7 +242,7 @@ gchar *parse_string(xmlDocPtr doc, xmlNodePtr node) gint parse_int(xmlDocPtr doc, xmlNodePtr node) { xmlChar *c = xmlNodeListGetString(doc, node->children, TRUE); - gint i = atoi((gchar*)c); + gint i = c ? atoi((gchar*)c) : 0; xmlFree(c); return i; } @@ -236,11 +251,11 @@ gboolean parse_bool(xmlDocPtr doc, xmlNodePtr node) { xmlChar *c = xmlNodeListGetString(doc, node->children, TRUE); gboolean b = FALSE; - if (!xmlStrcasecmp(c, (const xmlChar*) "true")) + if (c && !xmlStrcasecmp(c, (const xmlChar*) "true")) b = TRUE; - else if (!xmlStrcasecmp(c, (const xmlChar*) "yes")) + else if (c && !xmlStrcasecmp(c, (const xmlChar*) "yes")) b = TRUE; - else if (!xmlStrcasecmp(c, (const xmlChar*) "on")) + else if (c && !xmlStrcasecmp(c, (const xmlChar*) "on")) b = TRUE; xmlFree(c); return b; @@ -401,6 +416,9 @@ void parse_paths_startup() if (path && path[0] != '\0') /* not unset or empty */ xdg_data_dir_paths = split_paths(path); else { + xdg_data_dir_paths = slist_path_add(xdg_data_dir_paths, + g_strdup(DATADIR), + (GSListFunc) g_slist_append); xdg_data_dir_paths = slist_path_add(xdg_data_dir_paths, g_build_filename (G_DIR_SEPARATOR_S, @@ -411,9 +429,6 @@ void parse_paths_startup() (G_DIR_SEPARATOR_S, "usr", "share", NULL), (GSListFunc) g_slist_append); - xdg_data_dir_paths = slist_path_add(xdg_data_dir_paths, - g_strdup(DATADIR), - (GSListFunc) g_slist_append); } xdg_data_dir_paths = slist_path_add(xdg_data_dir_paths, g_strdup(xdg_data_home_path),