Remove macro provided by Eina.
[framework/uifw/efreet.git] / src / lib / efreet_private.h
1 /* vim: set sw=4 ts=4 sts=4 et: */
2 #ifndef EFREET_PRIVATE_H
3 #define EFREET_PRIVATE_H
4
5 /**
6  * @file efreet_private.h
7  * @brief Contains methods and defines that are private to the Efreet
8  * implementaion
9  * @addtogroup Efreet_Private Efreet_Private: Private methods and defines
10  *
11  * @{
12  */
13
14 #include "config.h"
15 #include <stdlib.h>
16 #include <stdio.h>
17 #include <string.h>
18 #include <unistd.h>
19 #include <ctype.h>
20 #include <fcntl.h>
21 #include <sys/mman.h>
22 #include <sys/types.h>
23 #include <sys/stat.h>
24 #include <dirent.h>
25 #include <fnmatch.h>
26 #include <limits.h>
27
28 #ifdef HAVE_ALLOCA_H
29 #include <alloca.h>
30 #endif
31
32 #include <Eina.h>
33 #include <Ecore.h>
34 #include <Ecore_File.h>
35 #include <Ecore_Str.h>
36
37 #include "efreet_xml.h"
38 #include "efreet_ini.h"
39
40 /**
41  * @def NEW(x, c)
42  * Allocate and zero out c structures of type x
43  */
44 #define NEW(x, c) calloc(c, sizeof(x))
45
46 /**
47  * @def FREE(x)
48  * Free x and set to NULL
49  */
50 #define FREE(x) do { free(x); x = NULL; } while (0)
51
52 /**
53  * @def IF_FREE(x)
54  * If x is set, free x and set to NULL
55  */
56 #define IF_FREE(x) do { if (x) FREE(x); } while (0)
57
58 /**
59  * @def IF_RELEASE(x)
60  * If x is set, eina_stringshare_del x and set to NULL
61  */
62 #define IF_RELEASE(x) do { \
63     if (x) { \
64         const char *__tmp; __tmp = (x); (x) = NULL; eina_stringshare_del(__tmp); \
65     } \
66     (x) = NULL; \
67 } while (0)
68
69 /**
70  * @def IF_FREE_LIST(x)
71  * If x is a valid pointer destroy x and set to NULL
72  */
73 #define IF_FREE_LIST(x) do { \
74     if (x) { \
75         Ecore_List *__tmp; __tmp = (x); (x) = NULL; ecore_list_destroy(__tmp); \
76     } \
77     (x) = NULL; \
78 } while (0)
79
80 /**
81  * @def IF_FREE_DLIST(x)
82  * If x is a valid pointer destroy x and set to NULL
83  */
84 #define IF_FREE_DLIST(x) do { \
85     if (x) { \
86         Ecore_DList *__tmp; __tmp = (x); (x) = NULL; ecore_dlist_destroy(__tmp); \
87     } \
88     (x) = NULL; \
89 } while (0)
90
91 /**
92  * @def IF_FREE_HASH(x)
93  * If x is a valid pointer destroy x and set to NULL
94  */
95 #define IF_FREE_HASH(x) do { \
96     if (x) { \
97         Ecore_Hash *__tmp; __tmp = (x); (x) = NULL; ecore_hash_destroy(__tmp); \
98     } \
99     (x) = NULL; \
100 } while (0)
101
102 #ifndef PATH_MAX
103 /**
104  * @def PATH_MAX
105  * Convenience define to set the maximim path length
106  */
107 #define PATH_MAX 4096
108 #endif
109
110 /**
111  * @internal
112  * The different types of commands in an Exec entry
113  */
114 enum Efreet_Desktop_Command_Flag
115 {
116     EFREET_DESKTOP_EXEC_FLAG_FULLPATH = 0x0001,
117     EFREET_DESKTOP_EXEC_FLAG_URI      = 0x0002,
118     EFREET_DESKTOP_EXEC_FLAG_DIR      = 0x0004,
119     EFREET_DESKTOP_EXEC_FLAG_FILE     = 0x0008
120 };
121
122 /**
123  * @internal
124  * Efreet_Desktop_Command_Flag
125  */
126 typedef enum Efreet_Desktop_Command_Flag Efreet_Desktop_Command_Flag;
127
128 /**
129  * @internal
130  * Efreet_Desktop_Command
131  */
132 typedef struct Efreet_Desktop_Command Efreet_Desktop_Command;
133
134 /**
135  * @internal
136  * Holds information on a desktop Exec command entry
137  */
138 struct Efreet_Desktop_Command
139 {
140   Efreet_Desktop *desktop;
141   int num_pending;
142
143   Efreet_Desktop_Command_Flag flags;
144
145   Efreet_Desktop_Command_Cb cb_command;
146   Efreet_Desktop_Progress_Cb cb_progress;
147   void *data;
148
149   Ecore_List *files; /**< list of Efreet_Desktop_Command_File */
150 };
151
152 /**
153  * @internal
154  * Efreet_Desktop_Command_File
155  */
156 typedef struct Efreet_Desktop_Command_File Efreet_Desktop_Command_File;
157
158 /**
159  * @internal
160  * Stores information on a file passed to the desktop Exec command
161  */
162 struct Efreet_Desktop_Command_File
163 {
164   Efreet_Desktop_Command *command;
165   char *dir;
166   char *file;
167   char *fullpath;
168   char *uri;
169
170   int pending;
171 };
172
173 int efreet_base_init(void);
174 void efreet_base_shutdown(void);
175
176 int efreet_icon_init(void);
177 void efreet_icon_shutdown(void);
178
179 int efreet_menu_init(void);
180 void efreet_menu_shutdown(void);
181 Ecore_List *efreet_default_dirs_get(const char *user_dir,
182                                     Ecore_List *system_dirs,
183                                     const char *suffix);
184
185 int efreet_ini_init(void);
186 int efreet_ini_shutdown(void);
187
188 int efreet_desktop_init(void);
189 int efreet_desktop_shutdown(void);
190
191 const char *efreet_home_dir_get(void);
192
193 const char *efreet_lang_get(void);
194 const char *efreet_lang_country_get(void);
195 const char *efreet_lang_modifier_get(void);
196
197 size_t efreet_array_cat(char *buffer, size_t size, const char *strs[]);
198
199 const char *efreet_desktop_environment_get(void);
200
201 /**
202  * @}
203  */
204
205 #endif