3 #define E_GADCON_CLIENT(x) ((E_Gadcon_Client *)(x))
5 /* different layout policies - only 1 supported for now */
6 typedef enum _E_Gadcon_Layout_Policy
8 E_GADCON_LAYOUT_POLICY_PANEL
9 } E_Gadcon_Layout_Policy;
11 typedef enum _E_Gadcon_Orient
13 /* generic orientations */
14 E_GADCON_ORIENT_FLOAT,
15 E_GADCON_ORIENT_HORIZ,
18 E_GADCON_ORIENT_RIGHT,
20 E_GADCON_ORIENT_BOTTOM,
21 E_GADCON_ORIENT_CORNER_TL,
22 E_GADCON_ORIENT_CORNER_TR,
23 E_GADCON_ORIENT_CORNER_BL,
24 E_GADCON_ORIENT_CORNER_BR,
25 E_GADCON_ORIENT_CORNER_LT,
26 E_GADCON_ORIENT_CORNER_RT,
27 E_GADCON_ORIENT_CORNER_LB,
28 E_GADCON_ORIENT_CORNER_RB
31 typedef enum _E_Gadcon_Site
33 E_GADCON_SITE_UNKNOWN = 0, // when target site is unknown
36 E_GADCON_SITE_DESKTOP,
37 E_GADCON_SITE_TOOLBAR, // generic toolbar
38 E_GADCON_SITE_EFM_TOOLBAR // filemanager window toolbar
41 #define E_GADCON_CLIENT_STYLE_PLAIN "plain"
42 #define E_GADCON_CLIENT_STYLE_INSET "inset"
44 typedef struct _E_Gadcon E_Gadcon;
45 typedef struct _E_Gadcon_Client E_Gadcon_Client;
46 typedef struct _E_Gadcon_Client_Class E_Gadcon_Client_Class;
47 typedef struct _E_Gadcon_Location E_Gadcon_Location;
53 #define E_GADCON_TYPE 0xE0b01006
54 #define E_GADCON_CLIENT_TYPE 0xE0b01007
58 E_Object e_obj_inherit;
63 E_Gadcon_Layout_Policy layout_policy;
67 Evas_Object *o_parent;
68 const char *swallow_name;
70 Ecore_Evas *ecore_evas;
73 E_Gadcon_Orient orient;
76 Evas_Object *o_container;
81 void (*func) (void *data, E_Gadcon *gc, Evas_Coord w, Evas_Coord h);
83 } resize_request, min_size_request;
86 Evas_Object *(*func) (void *data, E_Gadcon_Client *gcc, const char *style);
91 void (*func) (void *data, E_Gadcon_Client *gcc, E_Menu *menu);
96 void (*func) (void *data, E_Gadcon *gc, const E_Gadcon_Client_Class *cc);
101 void (*func) (void *data, int lock);
106 void (*func) (void *data);
110 E_Config_Dialog *config_dialog;
111 unsigned char editing : 1;
112 Ecore_X_Window dnd_win, xdnd_win;
115 E_Gadcon_Location *location;
117 E_Drop_Handler *drop_handler;
121 unsigned char instant_edit : 1;
124 #define GADCON_CLIENT_CLASS_VERSION 3
125 /* Version 3 add the *client_class param to icon(),label(),id_new(), id_del() */
126 /* and the *orient param to orient() */
127 struct _E_Gadcon_Client_Class
130 /* All members below are part of version 1 */
134 E_Gadcon_Client *(*init) (E_Gadcon *gc, const char *name, const char *id, const char *style);
135 void (*shutdown) (E_Gadcon_Client *gcc);
136 void (*orient) (E_Gadcon_Client *gcc, E_Gadcon_Orient orient);
137 const char *(*label) (E_Gadcon_Client_Class *client_class);
138 Evas_Object *(*icon) (E_Gadcon_Client_Class *client_class, Evas *evas);
139 /* All members below are part of version 2 */
140 /* Create new id, so that the gadcon client can refer to a config set inside the module */
141 const char *(*id_new) (E_Gadcon_Client_Class *client_class);
142 /* Del an id when a gadcon client is removed from the system */
143 void (*id_del) (E_Gadcon_Client_Class *client_class, const char *id);
144 /* All members below are part of version 3 */
145 Eina_Bool (*is_site) (E_Gadcon_Site site);
150 struct _E_Gadcon_Client
152 E_Object e_obj_inherit;
158 Evas_Object *o_frame;
159 Evas_Object *o_control;
160 Evas_Object *o_event;
161 const E_Gadcon_Client_Class *client_class;
166 int pos, size, res; //gadcon
167 double pos_x, pos_y, size_w, size_h; //gadman
172 int seq, flags; /* goes to save */
174 int prev_pos, prev_size;
183 Ecore_Timer *scroll_timer;
184 Ecore_Timer *instant_edit_timer;
185 Ecore_Animator *scroll_animator;
186 double scroll_pos, scroll_wanted;
191 void (*func) (void *data);
196 unsigned char autoscroll : 1;
197 unsigned char resizable : 1;
198 unsigned char moving : 1;
199 unsigned char resizing : 1;
200 unsigned char autoscroll_set : 1;
208 unsigned char hidden : 1;
210 E_Config_Gadcon_Client *cf;
213 /* defines usable gadget placements such as Desktop, Shelf #, etc */
214 /* next fields are mandatory (not NULL): name, add_gadget.func, remove_gadget.func */
215 struct _E_Gadcon_Location
219 /* icon related to location, such as "preferences-desktop-shelf" for shelves, "preferences-desktop" for menus */
220 const char * icon_name;
222 /* adds gadcon client to location. Returns nonzero on success */
225 int (*func) (void *data, const E_Gadcon_Client_Class *cc);
228 /* removes existing gadcon client from location */
231 void (*func) (void *data, E_Gadcon_Client *gcc);
236 EINTERN int e_gadcon_init(void);
237 EINTERN int e_gadcon_shutdown(void);
238 EAPI void e_gadcon_provider_register(const E_Gadcon_Client_Class *cc);
239 EAPI void e_gadcon_provider_unregister(const E_Gadcon_Client_Class *cc);
240 EAPI Eina_List *e_gadcon_provider_list(void);
241 EAPI E_Gadcon *e_gadcon_swallowed_new(const char *name, int id, Evas_Object *obj, const char *swallow_name);
242 EAPI void e_gadcon_custom_new(E_Gadcon *gc);
243 EAPI void e_gadcon_custom_del(E_Gadcon *gc);
244 EAPI void e_gadcon_swallowed_min_size_set(E_Gadcon *gc, Evas_Coord w, Evas_Coord h);
245 EAPI void e_gadcon_min_size_request_callback_set(E_Gadcon *gc, void (*func) (void *data, E_Gadcon *gc, Evas_Coord w, Evas_Coord h), void *data);
246 EAPI void e_gadcon_size_request_callback_set(E_Gadcon *gc, void (*func) (void *data, E_Gadcon *gc, Evas_Coord w, Evas_Coord h), void *data);
247 EAPI void e_gadcon_frame_request_callback_set(E_Gadcon *gc, Evas_Object *(*func) (void *data, E_Gadcon_Client *gcc, const char *style), void *data);
248 EAPI void e_gadcon_populate_callback_set(E_Gadcon *gc, void (*func) (void *data, E_Gadcon *gc, const E_Gadcon_Client_Class *cc), void *data);
249 EAPI void e_gadcon_layout_policy_set(E_Gadcon *gc, E_Gadcon_Layout_Policy layout_policy);
250 EAPI void e_gadcon_populate(E_Gadcon *gc);
251 EAPI void e_gadcon_unpopulate(E_Gadcon *gc);
252 EAPI void e_gadcon_populate_class(E_Gadcon *gc, const E_Gadcon_Client_Class *cc);
253 EAPI void e_gadcon_orient(E_Gadcon *gc, E_Gadcon_Orient orient);
254 EAPI void e_gadcon_edit_begin(E_Gadcon *gc);
255 EAPI void e_gadcon_edit_end(E_Gadcon *gc);
256 EAPI void e_gadcon_all_edit_begin(void);
257 EAPI void e_gadcon_all_edit_end(void);
258 EAPI void e_gadcon_zone_set(E_Gadcon *gc, E_Zone *zone);
259 EAPI E_Zone *e_gadcon_zone_get(E_Gadcon *gc);
260 EAPI void e_gadcon_ecore_evas_set(E_Gadcon *gc, Ecore_Evas *ee);
261 EAPI int e_gadcon_canvas_zone_geometry_get(E_Gadcon *gc, int *x, int *y, int *w, int *h);
262 EAPI void e_gadcon_util_menu_attach_func_set(E_Gadcon *gc, void (*func) (void *data, E_Gadcon_Client *gcc, E_Menu *menu), void *data);
263 EAPI void e_gadcon_util_lock_func_set(E_Gadcon *gc, void (*func) (void *data, int lock), void *data);
264 EAPI void e_gadcon_util_urgent_show_func_set(E_Gadcon *gc, void (*func) (void *data), void *data);
265 EAPI void e_gadcon_dnd_window_set(E_Gadcon *gc, Ecore_X_Window win);
266 EAPI Ecore_X_Window e_gadcon_dnd_window_get(E_Gadcon *gc);
267 EAPI void e_gadcon_xdnd_window_set(E_Gadcon *gc, Ecore_X_Window win);
268 EAPI Ecore_X_Window e_gadcon_xdnd_window_get(E_Gadcon *gc);
269 EAPI void e_gadcon_shelf_set(E_Gadcon *gc, E_Shelf *shelf);
270 EAPI E_Shelf *e_gadcon_shelf_get(E_Gadcon *gc);
271 EAPI void e_gadcon_toolbar_set(E_Gadcon *gc, E_Toolbar *toolbar);
272 EAPI E_Toolbar *e_gadcon_toolbar_get(E_Gadcon *gc);
273 EAPI E_Config_Gadcon_Client *e_gadcon_client_config_new(E_Gadcon *gc, const char *name);
274 EAPI void e_gadcon_client_config_del(E_Config_Gadcon *cf_gc, E_Config_Gadcon_Client *cf_gcc);
275 EAPI E_Gadcon_Client *e_gadcon_client_new(E_Gadcon *gc, const char *name, const char *id, const char *style, Evas_Object *base_obj);
276 EAPI void e_gadcon_client_edit_begin(E_Gadcon_Client *gcc);
277 EAPI void e_gadcon_client_edit_end(E_Gadcon_Client *gcc);
278 EAPI void e_gadcon_client_show(E_Gadcon_Client *gcc);
279 EAPI void e_gadcon_client_hide(E_Gadcon_Client *gcc);
280 EAPI void e_gadcon_client_size_request(E_Gadcon_Client *gcc, Evas_Coord w, Evas_Coord h);
281 EAPI void e_gadcon_client_min_size_set(E_Gadcon_Client *gcc, Evas_Coord w, Evas_Coord h);
282 EAPI void e_gadcon_client_aspect_set(E_Gadcon_Client *gcc, int w, int h);
283 EAPI void e_gadcon_client_autoscroll_set(E_Gadcon_Client *gcc, int autoscroll);
284 EAPI void e_gadcon_client_autoscroll_update(E_Gadcon_Client *gcc, int mx, int my);
285 EAPI void e_gadcon_client_autoscroll_cb_set(E_Gadcon_Client *gcc, void (*func)(void *data), void *data);
286 EAPI void e_gadcon_client_resizable_set(E_Gadcon_Client *gcc, int resizable);
287 EAPI int e_gadcon_client_geometry_get(E_Gadcon_Client *gcc, int *x, int *y, int *w, int *h);
288 EAPI int e_gadcon_client_viewport_geometry_get(E_Gadcon_Client *gcc, int *x, int *y, int *w, int *h);
289 EAPI E_Zone *e_gadcon_client_zone_get(E_Gadcon_Client *gcc);
290 EAPI E_Menu *e_gadcon_client_util_menu_items_append(E_Gadcon_Client *gcc, E_Menu *menu_gadget, int flags);
291 EAPI void e_gadcon_client_util_menu_attach(E_Gadcon_Client *gcc);
292 EAPI void e_gadcon_locked_set(E_Gadcon *gc, int lock);
293 EAPI void e_gadcon_urgent_show(E_Gadcon *gc);
297 EAPI Eina_Bool e_gadcon_site_is_shelf(E_Gadcon_Site site);
298 EAPI Eina_Bool e_gadcon_site_is_desktop(E_Gadcon_Site site);
299 EAPI Eina_Bool e_gadcon_site_is_efm_toolbar(E_Gadcon_Site site);
301 EAPI Eina_Bool e_gadcon_site_is_any_toolbar(E_Gadcon_Site site); // all toolbar sities
302 EAPI Eina_Bool e_gadcon_site_is_not_toolbar(E_Gadcon_Site site); // all non-toolbar sities
304 /* location helpers */
306 EAPI E_Gadcon_Location *
307 e_gadcon_location_new(const char * name, E_Gadcon_Site site,
308 int (*add_func) (void *data, const E_Gadcon_Client_Class *cc),
310 void (*remove_func) (void *data, E_Gadcon_Client *cc),
312 EAPI void e_gadcon_location_free(E_Gadcon_Location *loc);
313 EAPI void e_gadcon_location_register (E_Gadcon_Location *loc);
314 EAPI void e_gadcon_location_unregister (E_Gadcon_Location *loc);
315 EAPI void e_gadcon_location_set_icon_name(E_Gadcon_Location *loc, const char *name);
316 EAPI void e_gadcon_client_add_location_menu(E_Gadcon_Client *gcc, E_Menu *menu);
318 #define GADCON_CLIENT_CONFIG_GET(_type, _items, _gc_class, _id) \
327 ci = eina_list_last(_items)->data; \
328 p = strrchr (ci->id, '.'); \
329 if (p) num = atoi (p + 1) + 1; \
331 snprintf (buf, sizeof (buf), "%s.%d", _gc_class.name, num); \
338 EINA_LIST_FOREACH(_items, l, ci) \
339 if ((ci->id) && (!strcmp(ci->id, id))) return ci; \