summaryrefslogtreecommitdiff
path: root/obt/ddparse.c
diff options
context:
space:
mode:
authorDana Jansens <danakj@orodu.net>2010-05-21 20:03:21 -0400
committerDana Jansens <danakj@orodu.net>2010-05-21 20:03:21 -0400
commit0c8c9caba6f529c11b04643d24a5a503f49a245b (patch)
treedf20d71b526229f964212facfc5fdea33d5f71a4 /obt/ddparse.c
parent632eb082277eb74d5e64beda779eee5b4456ca18 (diff)
parse OnlyShowIn/NotShowIn
Diffstat (limited to 'obt/ddparse.c')
-rw-r--r--obt/ddparse.c67
1 files changed, 67 insertions, 0 deletions
diff --git a/obt/ddparse.c b/obt/ddparse.c
index 6aee25e7..c4be8e1e 100644
--- a/obt/ddparse.c
+++ b/obt/ddparse.c
@@ -80,6 +80,7 @@ static void parse_value_free(ObtDDParseValue *v)
case OBT_DDPARSE_BOOLEAN:
case OBT_DDPARSE_NUMERIC:
case OBT_DDPARSE_ENUM_APPLICATION:
+ case OBT_DDPARSE_ENVIRONMENTS:
break;
default:
g_assert_not_reached();
@@ -183,6 +184,69 @@ static gchar* parse_value_string(const gchar *in,
return o;
}
+static guint parse_value_environments(const gchar *in,
+ const ObtDDParse *const parse,
+ gboolean *error)
+{
+ const gchar *s;
+ int i;
+ guint mask = 0;
+
+ s = in;
+ while (*s) {
+ switch (*(s++)) {
+ case 'G':
+ if (strcmp(s, "NOME") == 0) {
+ mask |= OBT_LINK_ENV_GNOME;
+ s += 4;
+ }
+ break;
+ case 'K':
+ if (strcmp(s, "DE") == 0) {
+ mask |= OBT_LINK_ENV_KDE;
+ s += 2;
+ }
+ break;
+ case 'L':
+ if (strcmp(s, "XDE") == 0) {
+ mask |= OBT_LINK_ENV_LXDE;
+ s += 3;
+ }
+ break;
+ case 'R':
+ if (strcmp(s, "OX") == 0) {
+ mask |= OBT_LINK_ENV_ROX;
+ s += 2;
+ }
+ break;
+ case 'X':
+ if (strcmp(s, "FCE") == 0) {
+ mask |= OBT_LINK_ENV_XFCE;
+ s += 3;
+ }
+ break;
+ case 'O':
+ switch (*(s++)) {
+ case 'l':
+ if (strcmp(s, "d") == 0) {
+ mask |= OBT_LINK_ENV_OLD;
+ s += 1;
+ }
+ break;
+ case 'P':
+ if (strcmp(s, "ENBOX") == 0) {
+ mask |= OBT_LINK_ENV_OPENBOX;
+ s += 5;
+ }
+ break;
+ }
+ }
+ /* find the next string, or the end of the sequence */
+ while (*s && *s != ';') ++s;
+ }
+ return mask;
+}
+
static gboolean parse_value_boolean(const gchar *in,
const ObtDDParse *const parse,
gboolean *error)
@@ -559,6 +623,9 @@ static gboolean parse_desktop_entry_value(gchar *key, const gchar *val,
return FALSE;
}
break;
+ case OBT_DDPARSE_ENVIRONMENTS:
+ v.value.environments = parse_value_environments(val, parse, error);
+ break;
default:
g_assert_not_reached();
}