X-Git-Url: https://git.dogcows.com/gitweb?p=chaz%2Fopenbox;a=blobdiff_plain;f=obt%2Fddparse.c;h=c4be8e1edbb85454df449b3b4b31ff7df5226238;hp=6aee25e72ec5f4a8606bd815746846df592cf5cf;hb=0c8c9caba6f529c11b04643d24a5a503f49a245b;hpb=632eb082277eb74d5e64beda779eee5b4456ca18 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(); }