From 0d90bd57abe304ffca4bf5cd1a647d30dea882b7 Mon Sep 17 00:00:00 2001 From: Dana Jansens Date: Thu, 25 Mar 2010 21:10:45 -0400 Subject: [PATCH] Add a new ObtLink type, which is going to be a generalization of a .desktop entry. Move the .desktop file parsing details into obt/ddparse.c, which generates some hash tables holding the data of the file. Add a new obt/link.c which will build an ObtLink from a parsed .desktop file, and may support other ways to create these links in the unforseeable future --- Makefile.am | 8 +- obt/{ddfile.c => ddparse.c} | 326 +++++++++++++++--------------------- obt/ddparse.h | 52 ++++++ obt/link.c | 87 ++++++++++ obt/{ddfile.h => link.h} | 74 ++++---- 5 files changed, 312 insertions(+), 235 deletions(-) rename obt/{ddfile.c => ddparse.c} (72%) create mode 100644 obt/ddparse.h create mode 100644 obt/link.c rename obt/{ddfile.h => link.h} (56%) diff --git a/Makefile.am b/Makefile.am index 00c889a9..d919f65b 100644 --- a/Makefile.am +++ b/Makefile.am @@ -135,8 +135,10 @@ obt_libobt_la_SOURCES = \ obt/mainloop.c \ obt/xml.h \ obt/xml.c \ - obt/ddfile.h \ - obt/ddfile.c \ + obt/ddparse.h \ + obt/ddparse.c \ + obt/link.h \ + obt/link.c \ obt/paths.h \ obt/paths.c \ obt/prop.h \ @@ -429,7 +431,7 @@ rrpubinclude_HEADERS = \ obrender/version.h obtpubinclude_HEADERS = \ - obt/ddfile.h \ + obt/link.h \ obt/display.h \ obt/keyboard.h \ obt/mainloop.h \ diff --git a/obt/ddfile.c b/obt/ddparse.c similarity index 72% rename from obt/ddfile.c rename to obt/ddparse.c index 4ef8114d..8da048d3 100644 --- a/obt/ddfile.c +++ b/obt/ddparse.c @@ -1,6 +1,6 @@ /* -*- indent-tabs-mode: nil; tab-width: 4; c-basic-offset: 4; -*- - obt/ddfile.c for the Openbox window manager + obt/ddparse.c for the Openbox window manager Copyright (c) 2009 Dana Jansens This program is free software; you can redistribute it and/or modify @@ -16,8 +16,7 @@ See the COPYING file for a copy of the GNU General Public License. */ -#include "obt/ddfile.h" -#include +#include "obt/ddparse.h" #ifdef HAVE_STRING_H #include #endif @@ -26,19 +25,12 @@ #endif typedef struct _ObtDDParse ObtDDParse; -typedef struct _ObtDDParseGroup ObtDDParseGroup; -typedef void (*ObtDDParseGroupFunc)(gchar *key, const gchar *val, +/* Parses the value and adds it to the group's key_hash, with the given + key */ +typedef void (*ObtDDParseValueFunc)(gchar *key, const gchar *val, ObtDDParse *parse, gboolean *error); -struct _ObtDDParseGroup { - gchar *name; - gboolean seen; - ObtDDParseGroupFunc key_func; - /* the key is a string (a key inside the group in the .desktop). - the value is an ObtDDParseValue */ - GHashTable *key_hash; -}; struct _ObtDDParse { gchar *filename; @@ -48,99 +40,15 @@ struct _ObtDDParse { GHashTable *group_hash; }; -typedef enum { - DATA_STRING, - DATA_LOCALESTRING, - DATA_STRINGS, - DATA_LOCALESTRINGS, - DATA_BOOLEAN, - DATA_NUMERIC, - NUM_DATA_TYPES -} ObtDDDataType; - -typedef struct _ObtDDParseValue { - ObtDDDataType type; - union _ObtDDParseValueValue { - gchar *string; - struct _ObtDDParseValueStrings { - gchar *s; - gulong n; - } strings; - gboolean boolean; - gfloat numeric; - } value; -} ObtDDParseValue; - -struct _ObtDDFile { - guint ref; - - ObtDDFileType type; - gchar *name; /*!< Specific name for the object (eg Firefox) */ - gchar *generic; /*!< Generic name for the object (eg Web Browser) */ - gchar *comment; /*!< Comment/description to display for the object */ - gchar *icon; /*!< Name/path for an icon for the object */ - - union _ObtDDFileData { - struct _ObtDDFileApp { - gchar *exec; /*!< Executable to run for the app */ - gchar *wdir; /*!< Working dir to run the app in */ - gboolean term; /*!< Run the app in a terminal or not */ - ObtDDFileAppOpen open; - - /* XXX gchar**? or something better, a mime struct.. maybe - glib has something i can use. */ - gchar **mime; /*!< Mime types the app can open */ - - ObtDDFileAppStartup startup; - gchar *startup_wmclass; - } app; - struct _ObtDDFileLink { - gchar *url; - } link; - struct _ObtDDFileDir { - } dir; - } d; +struct _ObtDDParseGroup { + gchar *name; + gboolean seen; + ObtDDParseValueFunc value_func; + /* the key is a string (a key inside the group in the .desktop). + the value is an ObtDDParseValue */ + GHashTable *key_hash; }; -static void value_free(ObtDDParseValue *v) -{ - switch (v->type) { - case DATA_STRING: - case DATA_LOCALESTRING: - g_free(v->value.string); break; - case DATA_STRINGS: - case DATA_LOCALESTRINGS: - g_free(v->value.strings.s); - v->value.strings.n = 0; - break; - case DATA_BOOLEAN: - break; - case DATA_NUMERIC: - break; - default: - g_assert_not_reached(); - } - g_slice_free(ObtDDParseValue, v); -} - -static ObtDDParseGroup* group_new(gchar *name, ObtDDParseGroupFunc f) -{ - ObtDDParseGroup *g = g_slice_new(ObtDDParseGroup); - g->name = name; - g->key_func = f; - g->seen = FALSE; - g->key_hash = g_hash_table_new_full(g_str_hash, g_str_equal, - g_free, (GDestroyNotify)value_free); - return g; -} - -static void group_free(ObtDDParseGroup *g) -{ - g_free(g->name); - g_hash_table_destroy(g->key_hash); - g_slice_free(ObtDDParseGroup, g); -} - /* Displays a warning message including the file name and line number, and sets the boolean @error to true if it points to a non-NULL address. */ @@ -155,17 +63,57 @@ static void parse_error(const gchar *m, const ObtDDParse *const parse, if (error) *error = TRUE; } -/* reads an input string, strips out invalid stuff, and parses - backslash-stuff - if @nstrings is not NULL, then it splits the output string at ';' - characters. they are all returned in the same string with null zeros - between them, @nstrings is set to the number of such strings. +static void parse_value_free(ObtDDParseValue *v) +{ + switch (v->type) { + case OBT_DDPARSE_STRING: + case OBT_DDPARSE_LOCALESTRING: + g_free(v->value.string); break; + case OBT_DDPARSE_STRINGS: + case OBT_DDPARSE_LOCALESTRINGS: + g_free(v->value.strings.s); + v->value.strings.n = 0; + break; + case OBT_DDPARSE_BOOLEAN: + break; + case OBT_DDPARSE_NUMERIC: + break; + default: + g_assert_not_reached(); + } + g_slice_free(ObtDDParseValue, v); +} + +static ObtDDParseGroup* parse_group_new(gchar *name, ObtDDParseValueFunc f) +{ + ObtDDParseGroup *g = g_slice_new(ObtDDParseGroup); + g->name = name; + g->value_func = f; + g->seen = FALSE; + g->key_hash = g_hash_table_new_full(g_str_hash, g_str_equal, + g_free, + (GDestroyNotify)parse_value_free); + return g; +} + +static void parse_group_free(ObtDDParseGroup *g) +{ + g_free(g->name); + g_hash_table_destroy(g->key_hash); + g_slice_free(ObtDDParseGroup, g); +} + +/*! Reads an input string, strips out invalid stuff, and parses + backslash-stuff. + If @nstrings is not NULL, then it splits the output string at ';' + characters. They are all returned in the same string with null zeros + between them, @nstrings is set to the number of such strings. */ -static gchar* parse_string(const gchar *in, - gboolean locale, - gulong *nstrings, - const ObtDDParse *const parse, - gboolean *error) +static gchar* parse_value_string(const gchar *in, + gboolean locale, + gulong *nstrings, + const ObtDDParse *const parse, + gboolean *error) { const gint bytes = strlen(in); gboolean backslash; @@ -177,7 +125,7 @@ static gchar* parse_string(const gchar *in, if (!locale) { end = in + bytes; for (i = in; i < end; ++i) { - if ((guchar)*i > 126 || (guchar)*i < 32) { + if ((guchar)*i >= 127 || (guchar)*i < 32) { /* non-control character ascii */ end = i; parse_error("Invalid bytes in string", parse, error); @@ -217,7 +165,7 @@ static gchar* parse_string(const gchar *in, ++nstrings; *o = '\0'; } - else if ((guchar)*i >= 127 || (guchar)*i < 32) { + else if ((guchar)*i == 127 || (guchar)*i < 32) { /* avoid ascii control characters */ parse_error("Found control character in string", parse, error); break; @@ -232,8 +180,9 @@ static gchar* parse_string(const gchar *in, return o; } -static gboolean parse_bool(const gchar *in, const ObtDDParse *const parse, - gboolean *error) +static gboolean parse_value_boolean(const gchar *in, + const ObtDDParse *const parse, + gboolean *error) { if (strcmp(in, "true") == 0) return TRUE; @@ -242,8 +191,9 @@ static gboolean parse_bool(const gchar *in, const ObtDDParse *const parse, return FALSE; } -static gfloat parse_numeric(const gchar *in, const ObtDDParse *const parse, - gboolean *error) +static gfloat parse_value_numeric(const gchar *in, + const ObtDDParse *const parse, + gboolean *error) { gfloat out = 0; if (sscanf(in, "%f", &out) == 0) @@ -251,52 +201,6 @@ static gfloat parse_numeric(const gchar *in, const ObtDDParse *const parse, return out; } -static void parse_group_desktop_entry(gchar *key, const gchar *val, - ObtDDParse *parse, gboolean *error) -{ - ObtDDParseValue v, *pv; - - /* figure out value type */ - v.type = NUM_DATA_TYPES; - - /* parse the value */ - - switch (v.type) { - case DATA_STRING: - v.value.string = parse_string(val, FALSE, NULL, parse, error); - g_assert(v.value.string); - break; - case DATA_LOCALESTRING: - v.value.string = parse_string(val, TRUE, NULL, parse, error); - g_assert(v.value.string); - break; - case DATA_STRINGS: - v.value.strings.s = parse_string(val, FALSE, &v.value.strings.n, - parse, error); - g_assert(v.value.strings.s); - g_assert(v.value.strings.n); - break; - case DATA_LOCALESTRINGS: - v.value.strings.s = parse_string(val, TRUE, &v.value.strings.n, - parse, error); - g_assert(v.value.strings.s); - g_assert(v.value.strings.n); - break; - case DATA_BOOLEAN: - v.value.boolean = parse_bool(val, parse, error); - break; - case DATA_NUMERIC: - v.value.numeric = parse_numeric(val, parse, error); - break; - default: - g_assert_not_reached(); - } - - pv = g_slice_new(ObtDDParseValue); - *pv = v; - g_hash_table_insert(parse->group->key_hash, key, pv); -} - static gboolean parse_file_line(FILE *f, gchar **buf, gulong *size, gulong *read, ObtDDParse *parse, gboolean *error) @@ -417,7 +321,7 @@ static void parse_group(const gchar *buf, gulong len, } else { if (!g) { - g = group_new(group, NULL); + g = parse_group_new(group, NULL); g_hash_table_insert(parse->group_hash, g->name, g); } else @@ -482,18 +386,17 @@ static void parse_key_value(const gchar *buf, gulong len, return; } g_print("Found key/value %s=%s.\n", key, buf+valstart); - if (parse->group->key_func) - parse->group->key_func(key, buf+valstart, parse, error); + if (parse->group->value_func) + parse->group->value_func(key, buf+valstart, parse, error); } -static gboolean parse_file(ObtDDFile *dd, FILE *f, ObtDDParse *parse) +static gboolean parse_file(FILE *f, ObtDDParse *parse) { gchar *buf = NULL; gulong bytes = 0, read = 0; gboolean error = FALSE; while (!error && parse_file_line(f, &buf, &bytes, &read, parse, &error)) { - /* XXX use the string in buf */ gulong len = strlen(buf); if (buf[0] == '#' || buf[0] == '\0') ; /* ignore comment lines */ @@ -512,29 +415,71 @@ static gboolean parse_file(ObtDDFile *dd, FILE *f, ObtDDParse *parse) return !error; } -ObtDDFile* obt_ddfile_new_from_file(const gchar *name, GSList *paths) +static void parse_desktop_entry_value(gchar *key, const gchar *val, + ObtDDParse *parse, gboolean *error) +{ + ObtDDParseValue v, *pv; + + /* figure out value type */ + v.type = OBT_DDPARSE_NUM_VALUE_TYPES; + /* XXX do this part */ + + /* parse the value */ + switch (v.type) { + case OBT_DDPARSE_STRING: + v.value.string = parse_value_string(val, FALSE, NULL, parse, error); + g_assert(v.value.string); + break; + case OBT_DDPARSE_LOCALESTRING: + v.value.string = parse_value_string(val, TRUE, NULL, parse, error); + g_assert(v.value.string); + break; + case OBT_DDPARSE_STRINGS: + v.value.strings.s = parse_value_string(val, FALSE, &v.value.strings.n, + parse, error); + g_assert(v.value.strings.s); + g_assert(v.value.strings.n); + break; + case OBT_DDPARSE_LOCALESTRINGS: + v.value.strings.s = parse_value_string(val, TRUE, &v.value.strings.n, + parse, error); + g_assert(v.value.strings.s); + g_assert(v.value.strings.n); + break; + case OBT_DDPARSE_BOOLEAN: + v.value.boolean = parse_value_boolean(val, parse, error); + break; + case OBT_DDPARSE_NUMERIC: + v.value.numeric = parse_value_numeric(val, parse, error); + break; + default: + g_assert_not_reached(); + } + + pv = g_slice_new(ObtDDParseValue); + *pv = v; + g_hash_table_insert(parse->group->key_hash, key, pv); +} + +GHashTable* obt_ddparse_file(const gchar *name, GSList *paths) { - ObtDDFile *dd; ObtDDParse parse; ObtDDParseGroup *desktop_entry; GSList *it; FILE *f; gboolean success; - dd = g_slice_new(ObtDDFile); - dd->ref = 1; - parse.filename = NULL; parse.lineno = 0; parse.group = NULL; parse.group_hash = g_hash_table_new_full(g_str_hash, g_str_equal, NULL, - (GDestroyNotify)group_free); + (GDestroyNotify)parse_group_free); /* set up the groups (there's only one right now) */ - desktop_entry = group_new(g_strdup("Desktop Entry"), - parse_group_desktop_entry); + desktop_entry = parse_group_new(g_strdup("Desktop Entry"), + parse_desktop_entry_value); g_hash_table_insert(parse.group_hash, desktop_entry->name, desktop_entry); success = FALSE; @@ -543,29 +488,20 @@ ObtDDFile* obt_ddfile_new_from_file(const gchar *name, GSList *paths) if ((f = fopen(path, "r"))) { parse.filename = path; parse.lineno = 1; - success = parse_file(dd, f, &parse); + success = parse_file(f, &parse); fclose(f); } g_free(path); } if (!success) { - obt_ddfile_unref(dd); - dd = NULL; + g_hash_table_destroy(parse.group_hash); + return NULL; } - - g_hash_table_destroy(parse.group_hash); - - return dd; + else + return parse.group_hash; } -void obt_ddfile_ref(ObtDDFile *dd) +GHashTable* obt_ddparse_group_keys(ObtDDParseGroup *g) { - ++dd->ref; -} - -void obt_ddfile_unref(ObtDDFile *dd) -{ - if (--dd->ref < 1) { - g_slice_free(ObtDDFile, dd); - } + return g->key_hash; } diff --git a/obt/ddparse.h b/obt/ddparse.h new file mode 100644 index 00000000..b4e0bf41 --- /dev/null +++ b/obt/ddparse.h @@ -0,0 +1,52 @@ +/* -*- indent-tabs-mode: nil; tab-width: 4; c-basic-offset: 4; -*- + + obt/ddparse.h for the Openbox window manager + Copyright (c) 2009 Dana Jansens + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + See the COPYING file for a copy of the GNU General Public License. +*/ + +#include + +typedef struct _ObtDDParseGroup ObtDDParseGroup; + +typedef enum { + OBT_DDPARSE_STRING, + OBT_DDPARSE_LOCALESTRING, + OBT_DDPARSE_STRINGS, + OBT_DDPARSE_LOCALESTRINGS, + OBT_DDPARSE_BOOLEAN, + OBT_DDPARSE_NUMERIC, + OBT_DDPARSE_NUM_VALUE_TYPES +} ObtDDParseValueType; + +typedef struct _ObtDDParseValue { + ObtDDParseValueType type; + union _ObtDDParseValueValue { + gchar *string; + struct _ObtDDParseValueStrings { + gchar *s; + gulong n; + } strings; + gboolean boolean; + gfloat numeric; + } value; +} ObtDDParseValue; + +/* Returns a hash table where the keys are groups, and the values are + ObtDDParseGroups */ +GHashTable* obt_ddparse_file(const gchar *name, GSList *paths); + +/* Returns a hash table where the keys are "keys" in the .desktop file, + and the values are "values" in the .desktop file, for the group @g. */ +GHashTable* obt_ddparse_group_keys(ObtDDParseGroup *g); diff --git a/obt/link.c b/obt/link.c new file mode 100644 index 00000000..8249118d --- /dev/null +++ b/obt/link.c @@ -0,0 +1,87 @@ +/* -*- indent-tabs-mode: nil; tab-width: 4; c-basic-offset: 4; -*- + + obt/link.c for the Openbox window manager + Copyright (c) 2009 Dana Jansens + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + See the COPYING file for a copy of the GNU General Public License. +*/ + +#include "obt/link.h" +#include "obt/ddparse.h" +#include + +struct _ObtLink { + guint ref; + + ObtLinkType type; + gchar *name; /*!< Specific name for the object (eg Firefox) */ + gchar *generic; /*!< Generic name for the object (eg Web Browser) */ + gchar *comment; /*!< Comment/description to display for the object */ + gchar *icon; /*!< Name/path for an icon for the object */ + + union _ObtLinkData { + struct _ObtLinkApp { + gchar *exec; /*!< Executable to run for the app */ + gchar *wdir; /*!< Working dir to run the app in */ + 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 */ + + ObtLinkAppStartup startup; + gchar *startup_wmclass; + } app; + struct _ObtLinkLink { + gchar *url; + } link; + struct _ObtLinkDir { + } dir; + } d; +}; + +ObtLink* obt_link_from_ddfile(const gchar *name, GSList *paths) +{ + ObtLink *lnk; + GHashTable *groups, *keys; + ObtDDParseGroup *g; + + groups = obt_ddparse_file(name, paths); + if (!groups) return NULL; + g = g_hash_table_lookup(groups, "Desktop Entry"); + if (!g) { + g_hash_table_destroy(groups); + return NULL; + } + + keys = obt_ddparse_group_keys(g); + + lnk = g_slice_new(ObtLink); + lnk->ref = 1; + /* XXX turn the values in the .desktop file into an ObtLink */ + + return lnk; +} + +void obt_link_ref(ObtLink *dd) +{ + ++dd->ref; +} + +void obt_link_unref(ObtLink *dd) +{ + if (--dd->ref < 1) { + g_slice_free(ObtLink, dd); + } +} diff --git a/obt/ddfile.h b/obt/link.h similarity index 56% rename from obt/ddfile.h rename to obt/link.h index 5d5cf8db..bcac9d99 100644 --- a/obt/ddfile.h +++ b/obt/link.h @@ -1,6 +1,6 @@ /* -*- indent-tabs-mode: nil; tab-width: 4; c-basic-offset: 4; -*- - obt/ddfile.h for the Openbox window manager + obt/link.h for the Openbox window manager Copyright (c) 2009 Dana Jansens This program is free software; you can redistribute it and/or modify @@ -16,50 +16,50 @@ See the COPYING file for a copy of the GNU General Public License. */ -#ifndef __obt_ddfile_h -#define __obt_ddfile_h +#ifndef __obt_link_h +#define __obt_link_h #include G_BEGIN_DECLS typedef enum { - OBT_DDFILE_TYPE_APPLICATION = 1, - OBT_DDFILE_TYPE_LINK = 2, - OBT_DDFILE_TYPE_DIRECTORY = 3 -} ObtDDFileType; + OBT_LINK_TYPE_APPLICATION = 1, + OBT_LINK_TYPE_URL = 2, + OBT_LINK_TYPE_DIRECTORY = 3 +} ObtLinkType; typedef enum { - OBT_DDFILE_APP_STARTUP_NO_SUPPORT, - OBT_DDFILE_APP_STARTUP_PROTOCOL_SUPPORT, - OBT_DDFILE_APP_STARTUP_LEGACY_SUPPORT -} ObtDDFileAppStartup; + OBT_LINK_APP_STARTUP_NO_SUPPORT, + OBT_LINK_APP_STARTUP_PROTOCOL_SUPPORT, + OBT_LINK_APP_STARTUP_LEGACY_SUPPORT +} ObtLinkAppStartup; typedef enum { /*! The app can be launched with a single local file */ - OBT_DDFILE_APP_SINGLE_LOCAL = 1 << 0, + OBT_LINK_APP_SINGLE_LOCAL = 1 << 0, /*! The app can be launched with multiple local files */ - OBT_DDFILE_APP_MULTI_LOCAL = 1 << 1, + OBT_LINK_APP_MULTI_LOCAL = 1 << 1, /*! The app can be launched with a single URL */ - OBT_DDFILE_APP_SINGLE_URL = 1 << 2, + OBT_LINK_APP_SINGLE_URL = 1 << 2, /*! The app can be launched with multiple URLs */ - OBT_DDFILE_APP_MULTI_URL = 1 << 3 -} ObtDDFileAppOpen; + OBT_LINK_APP_MULTI_URL = 1 << 3 +} ObtLinkAppOpen; -typedef struct _ObtDDFile ObtDDFile; +typedef struct _ObtLink ObtLink; -ObtDDFile* obt_ddfile_new_from_file(const gchar *name, GSList *paths); +ObtLink* obt_link_from_ddfile(const gchar *name, GSList *paths); -void obt_ddfile_ref(ObtDDFile *e); -void obt_ddfile_unref(ObtDDFile *e); +void obt_link_ref(ObtLink *e); +void obt_link_unref(ObtLink *e); /*! Returns TRUE if the file exists but says it should be ignored, with - the Hidden flag. No other functions can be used for the ObtDDFile + the Hidden flag. No other functions can be used for the ObtLink in this case. */ -gboolean obt_ddfile_deleted (ObtDDFile *e); +gboolean obt_link_deleted (ObtLink *e); /*! Returns the type of object refered to by the .desktop file. */ -ObtDDFileType obt_ddfile_type (ObtDDFile *e); +ObtLinkType obt_link_type (ObtLink *e); /*! Returns TRUE if the .desktop file should be displayed to users, given the current environment. If FALSE, the .desktop file should not be showed. @@ -67,32 +67,32 @@ ObtDDFileType obt_ddfile_type (ObtDDFile *e); @env A semicolon-deliminated list of environemnts. Can be one or more of: GNOME, KDE, ROX, XFCE. Other environments not listed here may also be supported. This can be null also if not listing any environment. */ -gboolean obt_ddfile_display(ObtDDFile *e, const gchar *env); +gboolean obt_link_display(ObtLink *e, const gchar *env); -const gchar* obt_ddfile_name (ObtDDFile *e); -const gchar* obt_ddfile_generic_name (ObtDDFile *e); -const gchar* obt_ddfile_comment (ObtDDFile *e); +const gchar* obt_link_name (ObtLink *e); +const gchar* obt_link_generic_name (ObtLink *e); +const gchar* obt_link_comment (ObtLink *e); /*! Returns the icon for the object referred to by the .desktop file. Returns either an absolute path, or a string which can be used to find the icon using the algorithm given by: http://freedesktop.org/wiki/Specifications/icon-theme-spec?action=show&redirect=Standards/icon-theme-spec */ -const gchar* obt_ddfile_icon (ObtDDFile *e); +const gchar* obt_link_icon (ObtLink *e); -const gchar *obt_ddfile_link_url(ObtDDFile *e); +const gchar *obt_link_url_path(ObtLink *e); -const gchar* obt_ddfile_app_executable (ObtDDFile *e); +const gchar* obt_link_app_executable (ObtLink *e); /*! Returns the path in which the application should be run */ -const gchar* obt_ddfile_app_path (ObtDDFile *e); -gboolean obt_ddfile_app_run_in_terminal (ObtDDFile *e); -const gchar** obt_ddfile_app_mime_types (ObtDDFile *e); -/*! Returns a combination of values in the ObtDDFileAppOpen enum, +const gchar* obt_link_app_path (ObtLink *e); +gboolean obt_link_app_run_in_terminal (ObtLink *e); +const gchar** obt_link_app_mime_types (ObtLink *e); +/*! Returns a combination of values in the ObtLinkAppOpen enum, specifying if the application can be launched to open one or more files and URLs. */ -ObtDDFileAppOpen obt_ddfile_app_open(ObtDDFile *e); +ObtLinkAppOpen obt_link_app_open(ObtLink *e); -ObtDDFileAppStartup obt_ddfile_app_startup_notify(ObtDDFile *e); -const gchar* obt_ddfile_app_startup_wmclass(ObtDDFile *e); +ObtLinkAppStartup obt_link_app_startup_notify(ObtLink *e); +const gchar* obt_link_app_startup_wmclass(ObtLink *e); G_END_DECLS