summaryrefslogtreecommitdiff
path: root/obt/link.c
diff options
context:
space:
mode:
authorDana Jansens <danakj@orodu.net>2010-06-03 13:53:19 -0400
committerDana Jansens <danakj@orodu.net>2010-06-03 13:53:19 -0400
commitb025a0268f302df78589d3cc36aad5f56693799f (patch)
treeb16c1b9b38bb0320dcf361c64b55149a76f4cb1b /obt/link.c
parent78a8f407a94d16b96a54e32a4c9782a765ad40fe (diff)
parse app Categories better. parse a list of strings into a gchar**
Diffstat (limited to 'obt/link.c')
-rw-r--r--obt/link.c21
1 files changed, 17 insertions, 4 deletions
diff --git a/obt/link.c b/obt/link.c
index a1d08270..b9073de4 100644
--- a/obt/link.c
+++ b/obt/link.c
@@ -51,6 +51,7 @@ struct _ObtLink {
GQuark *categories; /*!< Array of quarks representing the
application's categories */
+ gulong n_categories; /*!< Number of categories for the app */
ObtLinkAppStartup startup;
gchar *startup_wmclass;
@@ -128,15 +129,17 @@ ObtLink* obt_link_from_ddfile(const gchar *ddname, GSList *paths,
/* parse link->d.app.exec to determine link->d.app.open */
percent = FALSE;
for (c = link->d.app.exec; *c; ++c) {
- if (*c == '%') percent = !percent;
if (percent) {
switch (*c) {
case 'f': link->d.app.open = OBT_LINK_APP_SINGLE_LOCAL; break;
case 'F': link->d.app.open = OBT_LINK_APP_MULTI_LOCAL; break;
case 'u': link->d.app.open = OBT_LINK_APP_SINGLE_URL; break;
case 'U': link->d.app.open = OBT_LINK_APP_MULTI_URL; break;
+ default: percent = FALSE;
}
+ if (percent) break; /* found f/F/u/U */
}
+ else if (*c == '%') percent = TRUE;
}
if ((v = g_hash_table_lookup(keys, "TryExec"))) {
@@ -172,11 +175,11 @@ ObtLink* obt_link_from_ddfile(const gchar *ddname, GSList *paths,
gchar *end;
link->d.app.categories = g_new(GQuark, v->value.strings.n);
+ link->d.app.n_categories = v->value.strings.n;
- c = end = v->value.strings.s;
for (i = 0; i < v->value.strings.n; ++i) {
- while (*end) ++end;
- link->d.app.categories[i] = g_quark_from_string(c);
+ link->d.app.categories[i] =
+ g_quark_from_string(v->value.strings.a[i]);
c = end = end+1; /* next */
}
}
@@ -219,3 +222,13 @@ void obt_link_unref(ObtLink *dd)
g_slice_free(ObtLink, dd);
}
}
+
+const GQuark* obt_link_app_categories(ObtLink *e, gulong *n)
+{
+ g_return_val_if_fail(e != NULL, NULL);
+ g_return_val_if_fail(e->type == OBT_LINK_TYPE_APPLICATION, NULL);
+ g_return_val_if_fail(n != NULL, NULL);
+
+ *n = e->d.app.n_categories;
+ return e->d.app.categories;
+}