gboolean term; /*!< Run the app in a terminal or not */
ObtLinkAppOpen open;
- /* XXX gchar**? or something better, a mime struct.. maybe
- glib has something i can use. */
gchar **mime; /*!< Mime types the app can open */
+ GQuark *categories; /*!< Array of quarks representing the
+ application's categories */
+ gulong n_categories; /*!< Number of categories for the app */
+
ObtLinkAppStartup startup;
gchar *startup_wmclass;
} app;
/* 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"))) {
}
}
- /* XXX there's more app specific stuff */
+ if ((v = g_hash_table_lookup(keys, "Categories"))) {
+ gulong i;
+ gchar *end;
+
+ link->d.app.categories = g_new(GQuark, v->value.strings.n);
+ link->d.app.n_categories = v->value.strings.n;
+
+ for (i = 0; i < v->value.strings.n; ++i) {
+ link->d.app.categories[i] =
+ g_quark_from_string(v->value.strings.a[i]);
+ c = end = end+1; /* next */
+ }
+ }
+
+ if ((v = g_hash_table_lookup(keys, "MimeType"))) {
+ /* steal the string array */
+ link->d.app.mime = v->value.strings.a;
+ v->value.strings.a = NULL;
+ v->value.strings.n = 0;
+ }
}
else if (link->type == OBT_LINK_TYPE_URL) {
v = g_hash_table_lookup(keys, "URL");
v->value.string = NULL;
}
+ /* destroy the parsing info */
+ g_hash_table_destroy(groups);
+
return link;
}
void obt_link_unref(ObtLink *dd)
{
if (--dd->ref < 1) {
+ g_free(dd->name);
+ g_free(dd->generic);
+ g_free(dd->comment);
+ g_free(dd->icon);
+ if (dd->type == OBT_LINK_TYPE_APPLICATION) {
+ g_free(dd->d.app.exec);
+ g_free(dd->d.app.wdir);
+ g_strfreev(dd->d.app.mime);
+ g_free(dd->d.app.categories);
+ g_free(dd->d.app.startup_wmclass);
+ }
+ else if (dd->type == OBT_LINK_TYPE_URL)
+ g_free(dd->d.url.addr);
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;
+}