1 #ifndef _ECORE_DESKTOP_H
2 # define _ECORE_DESKTOP_H
4 #include <Ecore_Data.h>
8 * @file Ecore_Desktop.h
9 * @brief The file that provides the freedesktop.org desktop, icon, and menu
12 * This header provides the Ecore_Desktop freedesktop.org desktop, icon,
13 * and menu handling functions, as well as ancillary functions for searching
14 * freedesktop.org specific paths. Other freedesktop.org specifications
15 * make use of similar files, paths, and icons, implementors can use / extend
18 * Ecore_Desktop is not for every freedesktop.org specification, just those that
19 * are associated with .desktop files.
21 * For path searching details, see @ref Ecore_Desktop_Paths_Group.
23 * For desktop file details, see @ref Ecore_Desktop_Main_Group.
25 * For icon theme details, see @ref Ecore_Desktop_Icon_Group.
27 * For menu file details, see @ref Ecore_Desktop_Menu_Group.
32 /* FIXME: Do the ECORE_MAGIC thing here.
33 * While this might help with segfaults and such, I think it's a waste of
34 * space and cycles that just covers up bugs. On the other hand, it makes
35 * for a more robust library, and it's used everywhere else in ecore.
37 Ecore_Hash *data, *group, *Categories, *OnlyShowIn, *NotShowIn, *MimeTypes, *Actions;
52 time_t icon_time; /* For checking if the icon cache is valid. */
57 char *window_class; /* window class */
58 char *window_name; /* window name */
59 char *window_title; /* window title */
60 char *window_role; /* window role */
61 unsigned char wait_exit:1; /* wait for app to exit before execing next */
62 unsigned char startup:1;
63 unsigned char hidden:1;
64 unsigned char no_display:1;
65 unsigned char allocated:1;
66 unsigned char ondisk:1;
67 unsigned char hard_icon:1;
68 /* Actually calling this st_mtime causes compile issues, must be some strange macros at work. */
69 time_t mtime; /* For checking if the cache is valid. */
71 typedef struct _Ecore_Desktop Ecore_Desktop;
73 struct _Ecore_Desktop_Icon_Theme
75 Ecore_Hash *data, *group;
77 Ecore_List *Directories;
86 unsigned char hicolor:1;
87 /* Actually calling this st_mtime causes compile issues, must be some strange macros at work. */
88 time_t mtime; /* For checking if the cache is valid. */
91 typedef struct _Ecore_Desktop_Icon_Theme Ecore_Desktop_Icon_Theme;
93 struct _Ecore_Desktop_Icon_Theme_Directory
99 int size, minimum, maximum, threshold;
101 typedef struct _Ecore_Desktop_Icon_Theme_Directory
102 Ecore_Desktop_Icon_Theme_Directory;
104 enum _Ecore_Desktop_Paths_Type
106 ECORE_DESKTOP_PATHS_CONFIG = 0,
107 ECORE_DESKTOP_PATHS_MENUS = 1,
108 ECORE_DESKTOP_PATHS_DIRECTORIES = 2,
109 ECORE_DESKTOP_PATHS_DESKTOPS = 3,
110 ECORE_DESKTOP_PATHS_ICONS = 4,
111 ECORE_DESKTOP_PATHS_KDE_LEGACY = 5,
112 ECORE_DESKTOP_PATHS_XSESSIONS = 6,
113 ECORE_DESKTOP_PATHS_MAX = 7
115 typedef enum _Ecore_Desktop_Paths_Type Ecore_Desktop_Paths_Type;
117 enum _Ecore_Desktop_Tree_Element_Type
119 ECORE_DESKTOP_TREE_ELEMENT_TYPE_NULL = 0,
120 ECORE_DESKTOP_TREE_ELEMENT_TYPE_STRING = 1,
121 ECORE_DESKTOP_TREE_ELEMENT_TYPE_TREE = 2,
122 ECORE_DESKTOP_TREE_ELEMENT_TYPE_HASH = 3
124 typedef enum _Ecore_Desktop_Tree_Element_Type Ecore_Desktop_Tree_Element_Type;
126 struct _Ecore_Desktop_Tree_Element
128 void *element; /* A pointer to the element. */
129 Ecore_Desktop_Tree_Element_Type type; /* The type of the element. */
131 typedef struct _Ecore_Desktop_Tree_Element Ecore_Desktop_Tree_Element;
133 typedef struct _Ecore_Desktop_Tree Ecore_Desktop_Tree;
134 struct _Ecore_Desktop_Tree
136 Ecore_Desktop_Tree_Element *elements; /* An array of elements. */
137 int size; /* The size of the array. */
138 char **buffers; /* An array of pointers to the bits of data. */
139 int buffers_size; /* The size of the array. */
140 Ecore_Desktop_Tree *parent; /* Parent if this is a child. */
143 struct _Ecore_Desktop_Instrumentation
145 double desktops_time;
146 double desktops_in_cache_time;
147 double desktops_not_found_time;
149 double icons_in_cache_time;
150 double icons_not_found_time;
152 int desktops_in_cache;
153 int desktops_not_found;
165 /* Function Prototypes */
166 EAPI int ecore_desktop_paths_init(void);
167 EAPI void ecore_desktop_paths_extras_clear(void);
168 EAPI void ecore_desktop_paths_prepend_user(Ecore_Desktop_Paths_Type
169 type, const char *paths);
171 ecore_desktop_paths_prepend_system(Ecore_Desktop_Paths_Type type,
173 EAPI void ecore_desktop_paths_append_user(Ecore_Desktop_Paths_Type
174 type, const char *paths);
176 ecore_desktop_paths_append_system(Ecore_Desktop_Paths_Type type,
178 EAPI void ecore_desktop_paths_regen(void);
179 char *ecore_desktop_paths_file_find(Ecore_List * paths,
180 const char *file, int sub,
186 EAPI int ecore_desktop_paths_for_each(Ecore_Desktop_Paths_Type
188 Ecore_For_Each function,
190 char *ecore_desktop_paths_recursive_search(const char *path,
202 EAPI int ecore_desktop_paths_shutdown(void);
204 Ecore_Hash *ecore_desktop_paths_to_hash(const char *paths);
205 Ecore_List *ecore_desktop_paths_to_list(const char *paths);
207 EAPI int ecore_desktop_init(void);
208 EAPI int ecore_desktop_shutdown(void);
209 Ecore_Hash *ecore_desktop_ini_get(const char *file);
210 Ecore_Desktop *ecore_desktop_get(const char *file, const char *lang);
211 void ecore_desktop_save(Ecore_Desktop * desktop);
212 EAPI Ecore_List *ecore_desktop_get_command(Ecore_Desktop * desktop,
213 Ecore_List * files, int fill);
214 EAPI char *ecore_desktop_merge_command(char *exec, char *params);
215 void ecore_desktop_destroy(Ecore_Desktop * desktop);
217 EAPI int ecore_desktop_icon_init(void);
218 EAPI int ecore_desktop_icon_shutdown(void);
219 EAPI char *ecore_desktop_icon_find(const char *icon,
220 const char *icon_size,
221 const char *icon_theme);
223 Ecore_Hash *ecore_desktop_icon_theme_list(void);
224 Ecore_Desktop_Icon_Theme *ecore_desktop_icon_theme_get(const char *file,
226 void ecore_desktop_icon_theme_destroy(Ecore_Desktop_Icon_Theme
230 ecore_desktop_menu_for_each(void (*func)
231 (const char *name, const char *path, const char *directory, Ecore_Hash * apps));
232 Ecore_Desktop_Tree *ecore_desktop_menu_get(char *file);
234 Ecore_Desktop_Tree *ecore_desktop_tree_new(char *buffer);
235 Ecore_Desktop_Tree *ecore_desktop_tree_add(Ecore_Desktop_Tree * tree,
236 const char *element);
237 void ecore_desktop_tree_track(Ecore_Desktop_Tree * tree,
239 Ecore_Desktop_Tree *ecore_desktop_tree_extend(Ecore_Desktop_Tree * tree,
240 const char *element);
241 Ecore_Desktop_Tree *ecore_desktop_tree_insert(Ecore_Desktop_Tree * tree,
242 int before, void *element,
243 Ecore_Desktop_Tree_Element_Type
245 Ecore_Desktop_Tree *ecore_desktop_tree_merge(Ecore_Desktop_Tree * tree,
247 Ecore_Desktop_Tree * element);
248 Ecore_Desktop_Tree *ecore_desktop_tree_add_child(Ecore_Desktop_Tree * tree,
251 Ecore_Desktop_Tree *ecore_desktop_tree_add_hash(Ecore_Desktop_Tree * tree,
252 Ecore_Hash * element);
253 void ecore_desktop_tree_remove(Ecore_Desktop_Tree * tree,
255 int ecore_desktop_tree_exist(Ecore_Desktop_Tree * tree,
257 int ecore_desktop_tree_foreach(Ecore_Desktop_Tree * tree,
259 int (*func) (const void *data,
265 void ecore_desktop_tree_dump(Ecore_Desktop_Tree * tree,
267 void ecore_desktop_tree_del(Ecore_Desktop_Tree * tree);
269 Ecore_Desktop_Tree *ecore_desktop_xmlame_new(char *buffer);
270 Ecore_Desktop_Tree *ecore_desktop_xmlame_get(char *file);
272 char *ecore_desktop_home_get(void);
274 EAPI void ecore_desktop_instrumentation_reset(void);
275 EAPI void ecore_desktop_instrumentation_print(void);