2 #include "e_mod_main.h"
5 typedef struct _Instance Instance;
10 Ecore_Event_Handler *hdl;
13 /* local function prototypes */
14 static E_Gadcon_Client *_gc_init(E_Gadcon *gc, const char *name, const char *id, const char *style);
15 static void _gc_shutdown(E_Gadcon_Client *gcc);
16 static void _gc_orient(E_Gadcon_Client *gcc, E_Gadcon_Orient orient);
17 static const char *_gc_label(const E_Gadcon_Client_Class *cc);
18 static Evas_Object *_gc_icon(const E_Gadcon_Client_Class *cc, Evas *evas);
19 static const char *_gc_id_new(const E_Gadcon_Client_Class *cc);
20 static void _cb_action_mode_single(void *data, Evas_Object *obj __UNUSED__, const char *emission __UNUSED__, const char *source __UNUSED__);
21 static void _cb_action_mode_dual_top(void *data, Evas_Object *obj __UNUSED__, const char *emission __UNUSED__, const char *source __UNUSED__);
22 static void _cb_action_mode_dual_left(void *data, Evas_Object *obj __UNUSED__, const char *emission __UNUSED__, const char *source __UNUSED__);
23 static Eina_Bool _cb_event_client_message(void *data, int type __UNUSED__, void *event);
24 static void _set_icon(Instance *inst);
25 static void _mode_set(Instance *inst, Ecore_X_Illume_Mode mode);
28 static Eina_List *instances = NULL;
29 static const char *mod_dir = NULL;
31 static const E_Gadcon_Client_Class _gc_class =
33 GADCON_CLIENT_CLASS_VERSION, "illume-mode-toggle",
34 { _gc_init, _gc_shutdown, _gc_orient, _gc_label, _gc_icon, _gc_id_new, NULL,
35 e_gadcon_site_is_not_toolbar
36 }, E_GADCON_CLIENT_STYLE_PLAIN
39 /* public functions */
40 EAPI E_Module_Api e_modapi = { E_MODULE_API_VERSION, "Illume Mode Toggle" };
43 e_modapi_init(E_Module *m)
45 mod_dir = eina_stringshare_add(m->dir);
46 e_gadcon_provider_register(&_gc_class);
51 e_modapi_shutdown(E_Module *m __UNUSED__)
53 e_gadcon_provider_unregister(&_gc_class);
54 if (mod_dir) eina_stringshare_del(mod_dir);
60 e_modapi_save(E_Module *m __UNUSED__)
66 static E_Gadcon_Client *
67 _gc_init(E_Gadcon *gc, const char *name, const char *id, const char *style)
71 inst = E_NEW(Instance, 1);
72 inst->o_toggle = edje_object_add(gc->evas);
73 e_theme_edje_object_set(inst->o_toggle,
74 "base/theme/modules/illume_mode_toggle",
75 "e/modules/illume_mode_toggle/main");
77 inst->gcc = e_gadcon_client_new(gc, name, id, style, inst->o_toggle);
78 inst->gcc->data = inst;
80 edje_object_signal_callback_add(inst->o_toggle, "e,action,mode,single", "",
81 _cb_action_mode_single, inst);
82 edje_object_signal_callback_add(inst->o_toggle, "e,action,mode,dual,top", "",
83 _cb_action_mode_dual_top, inst);
84 edje_object_signal_callback_add(inst->o_toggle, "e,action,mode,dual,left", "",
85 _cb_action_mode_dual_left, inst);
89 inst->hdl = ecore_event_handler_add(ECORE_X_EVENT_CLIENT_MESSAGE,
90 _cb_event_client_message, inst);
92 instances = eina_list_append(instances, inst);
97 _gc_shutdown(E_Gadcon_Client *gcc)
101 if (!(inst = gcc->data)) return;
102 instances = eina_list_remove(instances, inst);
103 if (inst->o_toggle) evas_object_del(inst->o_toggle);
104 if (inst->hdl) ecore_event_handler_del(inst->hdl);
110 _gc_orient(E_Gadcon_Client *gcc, E_Gadcon_Orient orient __UNUSED__)
112 e_gadcon_client_aspect_set(gcc, 16, 16);
113 e_gadcon_client_min_size_set(gcc, 16, 16);
117 _gc_label(const E_Gadcon_Client_Class *cc __UNUSED__)
119 return _("Illume-Mode-Toggle");
123 _gc_icon(const E_Gadcon_Client_Class *cc __UNUSED__, Evas *evas)
128 snprintf(buff, sizeof(buff), "%s/e-module-illume-mode-toggle.edj", mod_dir);
129 o = edje_object_add(evas);
130 edje_object_file_set(o, buff, "icon");
135 _gc_id_new(const E_Gadcon_Client_Class *cc __UNUSED__)
137 static char buff[32];
139 snprintf(buff, sizeof(buff), "%s.%d", _gc_class.name,
140 eina_list_count(instances));
145 _cb_action_mode_single(void *data, Evas_Object *obj __UNUSED__, const char *emission __UNUSED__, const char *source __UNUSED__)
147 _mode_set(data, ECORE_X_ILLUME_MODE_SINGLE);
151 _cb_action_mode_dual_top(void *data, Evas_Object *obj __UNUSED__, const char *emission __UNUSED__, const char *source __UNUSED__)
153 _mode_set(data, ECORE_X_ILLUME_MODE_DUAL_TOP);
157 _cb_action_mode_dual_left(void *data, Evas_Object *obj __UNUSED__, const char *emission __UNUSED__, const char *source __UNUSED__)
159 _mode_set(data, ECORE_X_ILLUME_MODE_DUAL_LEFT);
163 _cb_event_client_message(void *data, int type __UNUSED__, void *event)
165 Ecore_X_Event_Client_Message *ev;
169 if (ev->message_type != ECORE_X_ATOM_E_ILLUME_MODE)
170 return ECORE_CALLBACK_PASS_ON;
171 if (!(inst = data)) return ECORE_CALLBACK_PASS_ON;
173 return ECORE_CALLBACK_PASS_ON;
177 _set_icon(Instance *inst)
180 Ecore_X_Illume_Mode mode;
182 xwin = inst->gcc->gadcon->zone->black_win;
183 mode = ecore_x_e_illume_mode_get(xwin);
185 if (mode == ECORE_X_ILLUME_MODE_DUAL_TOP)
186 edje_object_signal_emit(inst->o_toggle, "e,mode,dual,top", "e");
187 else if (mode == ECORE_X_ILLUME_MODE_DUAL_LEFT)
188 edje_object_signal_emit(inst->o_toggle, "e,mode,dual,left", "e");
190 edje_object_signal_emit(inst->o_toggle, "e,mode,single", "e");
194 _mode_set(Instance *inst, Ecore_X_Illume_Mode mode)
200 xwin = inst->gcc->gadcon->zone->black_win;
201 ecore_x_e_illume_mode_set(xwin, mode);
202 ecore_x_e_illume_mode_send(xwin, mode);