2009-10-03 11:33:08 +04:00
|
|
|
#ifndef __DESKTOPENTRY_H__
|
|
|
|
#define __DESKTOPENTRY_H__
|
|
|
|
|
|
|
|
#include <edelib/String.h>
|
|
|
|
#include <edelib/Debug.h>
|
|
|
|
#include <edelib/List.h>
|
|
|
|
|
|
|
|
EDELIB_NS_USING(String)
|
|
|
|
EDELIB_NS_USING(list)
|
|
|
|
|
|
|
|
class DesktopEntry;
|
|
|
|
|
|
|
|
typedef list<DesktopEntry*> DesktopEntryList;
|
|
|
|
typedef list<DesktopEntry*>::iterator DesktopEntryListIt;
|
|
|
|
|
|
|
|
typedef list<String> StrList;
|
|
|
|
typedef list<String>::iterator StrListIt;
|
|
|
|
|
|
|
|
/* Represents entry for a menu. Do not confuse it with DesktopFile from edelib */
|
|
|
|
class DesktopEntry {
|
|
|
|
private:
|
|
|
|
/* used to load "later" found .desktop file, in case duplicate desktop file id's was found */
|
|
|
|
unsigned int age;
|
|
|
|
|
|
|
|
/* used for <OnlyUnallocated> and <NotOnlyUnallocated> */
|
|
|
|
bool allocated;
|
|
|
|
|
|
|
|
/* absolute path to .desktop file */
|
|
|
|
String *path;
|
|
|
|
|
|
|
|
/* Desktop File Id */
|
|
|
|
String *id;
|
|
|
|
|
|
|
|
/* Categories value from .desktop file; filled with load() */
|
|
|
|
String *categories;
|
|
|
|
|
|
|
|
/* Localized Name value from .desktop file; filled with load() */
|
|
|
|
String *name;
|
|
|
|
|
|
|
|
/* GenericName value from .desktop file; filled with load() */
|
|
|
|
String *generic_name;
|
|
|
|
|
|
|
|
/* Comment value from .desktop file; filled with load() */
|
|
|
|
String *comment;
|
|
|
|
|
|
|
|
/* Icon value from .desktop file; filled with load() */
|
|
|
|
String *icon;
|
|
|
|
|
|
|
|
/* Exec value from .desktop file; filled with load() */
|
2009-10-06 18:22:51 +04:00
|
|
|
String *exec_cmd;
|
2009-10-03 11:33:08 +04:00
|
|
|
|
|
|
|
/* tokenized 'categories' */
|
|
|
|
StrList category_list;
|
|
|
|
|
|
|
|
E_DISABLE_CLASS_COPY(DesktopEntry)
|
|
|
|
public:
|
|
|
|
DesktopEntry() : age(0), allocated(false), path(NULL), id(NULL),
|
2009-10-06 18:22:51 +04:00
|
|
|
categories(NULL), name(NULL), generic_name(NULL), comment(NULL), icon(NULL), exec_cmd(NULL) { }
|
2009-10-03 11:33:08 +04:00
|
|
|
|
|
|
|
~DesktopEntry();
|
|
|
|
|
|
|
|
/*
|
|
|
|
* Construct full path by using 'dir/p' and construct desktop file id according
|
|
|
|
* to the menu spec. If 'basedir' was given (can be NULL), 'dir' will be diffed against it
|
|
|
|
* so correct prefix for desktop file id can be calculated.
|
|
|
|
*
|
|
|
|
* The id is calculated like this:
|
|
|
|
* $XDG_DATA_DIRS/applications/foo.desktop => foo.desktop
|
|
|
|
* $XDG_DATA_DIRS/applications/ede/foo.desktop => ede-foo.desktop
|
|
|
|
* $XDG_DATA_DIRS/applications/ede/menu/foo.desktop => ede-menu-foo.desktop
|
|
|
|
*/
|
|
|
|
void assign_path(const char *dir, const char *p , const char *basedir);
|
|
|
|
|
|
|
|
/* loads actual .desktop file and reads it */
|
|
|
|
bool load(void);
|
|
|
|
|
|
|
|
/* check if Categories key contains given category */
|
|
|
|
bool in_category(const char *cat);
|
|
|
|
|
|
|
|
void mark_as_allocated(void) { allocated = true; }
|
|
|
|
bool is_allocated(void) { return allocated; }
|
|
|
|
|
|
|
|
const char *get_path(void) { return path ? path->c_str() : NULL; }
|
|
|
|
const char *get_id(void) { return id ? id->c_str() : NULL; }
|
|
|
|
unsigned int get_age(void) { return age; }
|
|
|
|
|
|
|
|
const char *get_name(void) { return name ? name->c_str() : NULL; }
|
|
|
|
const char *get_icon(void) { return icon ? icon->c_str() : NULL; }
|
2009-10-06 18:22:51 +04:00
|
|
|
const char *get_exec(void) { return exec_cmd ? exec_cmd->c_str() : NULL; }
|
2009-10-03 11:33:08 +04:00
|
|
|
};
|
|
|
|
|
|
|
|
/* remove duplicate items in the list, by looking at DesktopEntry id */
|
|
|
|
void desktop_entry_list_remove_duplicates(DesktopEntryList &lst);
|
|
|
|
|
|
|
|
/* call 'load()' on each member; if 'load()' fails, that member will be removed */
|
|
|
|
void desktop_entry_list_load_all(DesktopEntryList &lst);
|
|
|
|
|
|
|
|
/* sort a list of entries */
|
|
|
|
void desktop_entry_list_sort(DesktopEntryList &lst);
|
|
|
|
|
|
|
|
#endif
|