parse Categories tag and save them as an array of GQuarks

This commit is contained in:
Dana Jansens 2010-06-03 13:09:38 -04:00
parent a6141fe7a4
commit 78a8f407a9

View file

@ -49,6 +49,9 @@ struct _ObtLink {
glib has something i can use. */ glib has something i can use. */
gchar **mime; /*!< Mime types the app can open */ gchar **mime; /*!< Mime types the app can open */
GQuark *categories; /*!< Array of quarks representing the
application's categories */
ObtLinkAppStartup startup; ObtLinkAppStartup startup;
gchar *startup_wmclass; gchar *startup_wmclass;
} app; } app;
@ -164,7 +167,21 @@ ObtLink* obt_link_from_ddfile(const gchar *ddname, GSList *paths,
} }
} }
/* 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);
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);
c = end = end+1; /* next */
}
}
/* XXX do something with mime types */
} }
else if (link->type == OBT_LINK_TYPE_URL) { else if (link->type == OBT_LINK_TYPE_URL) {
v = g_hash_table_lookup(keys, "URL"); v = g_hash_table_lookup(keys, "URL");
@ -173,6 +190,9 @@ ObtLink* obt_link_from_ddfile(const gchar *ddname, GSList *paths,
v->value.string = NULL; v->value.string = NULL;
} }
/* destroy the parsing info */
g_hash_table_destroy(groups);
return link; return link;
} }
@ -184,6 +204,18 @@ void obt_link_ref(ObtLink *dd)
void obt_link_unref(ObtLink *dd) void obt_link_unref(ObtLink *dd)
{ {
if (--dd->ref < 1) { 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_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); g_slice_free(ObtLink, dd);
} }
} }