2 #include "e_mod_main.h"
4 typedef struct _Instance Instance;
11 /* actual module specifics */
13 static void _e_mod_action_conf_cb(E_Object *obj, const char *params);
14 static void _e_mod_conf_cb(void *data, E_Menu *m, E_Menu_Item *mi);
15 static void _e_mod_menu_add(void *data, E_Menu *m);
16 static void _e_mod_run_cb(void *data, E_Menu *m, E_Menu_Item *mi);
17 static void _config_pre_activate_cb(void *data, E_Menu *m);
19 /* gadcon requirements */
20 static E_Gadcon_Client *_gc_init(E_Gadcon *gc, const char *name, const char *id, const char *style);
21 static void _gc_shutdown(E_Gadcon_Client *gcc);
22 static void _gc_orient(E_Gadcon_Client *gcc, E_Gadcon_Orient orient);
23 static const char *_gc_label(const E_Gadcon_Client_Class *client_class);
24 static Evas_Object *_gc_icon(const E_Gadcon_Client_Class *client_class, Evas *evas);
25 static const char *_gc_id_new(const E_Gadcon_Client_Class *client_class);
26 static void _cb_action_conf(void *data, Evas_Object *obj, const char *emission, const char *source);
28 static void _conf_new(void);
29 static void _conf_free(void);
31 static E_Module *conf_module = NULL;
32 static E_Action *act = NULL;
33 static E_Int_Menu_Augmentation *maug = NULL;
34 static E_Config_DD *conf_edd = NULL;
37 static Eina_List *instances = NULL;
39 /* and actually define the gadcon class that this module provides (just 1) */
40 static const E_Gadcon_Client_Class _gadcon_class =
42 GADCON_CLIENT_CLASS_VERSION, "configuration",
44 _gc_init, _gc_shutdown, _gc_orient, _gc_label, _gc_icon, _gc_id_new, NULL,
45 e_gadcon_site_is_not_toolbar
47 E_GADCON_CLIENT_STYLE_PLAIN
50 static E_Gadcon_Client *
51 _gc_init(E_Gadcon *gc, const char *name, const char *id, const char *style)
55 inst = E_NEW(Instance, 1);
56 inst->o_toggle = edje_object_add(gc->evas);
57 e_theme_edje_object_set(inst->o_toggle,
58 "base/theme/modules/conf",
59 "e/modules/conf/main");
61 inst->gcc = e_gadcon_client_new(gc, name, id, style, inst->o_toggle);
62 inst->gcc->data = inst;
64 edje_object_signal_callback_add(inst->o_toggle, "e,action,conf", "",
65 _cb_action_conf, inst);
67 instances = eina_list_append(instances, inst);
68 e_gadcon_client_util_menu_attach(inst->gcc);
74 _gc_shutdown(E_Gadcon_Client *gcc)
78 if (!(inst = gcc->data)) return;
79 instances = eina_list_remove(instances, inst);
80 if (inst->o_toggle) evas_object_del(inst->o_toggle);
85 _gc_orient(E_Gadcon_Client *gcc, E_Gadcon_Orient orient __UNUSED__)
89 edje_object_size_min_get(gcc->o_base, &mw, &mh);
90 if ((mw < 1) || (mh < 1))
91 edje_object_size_min_calc(gcc->o_base, &mw, &mh);
94 e_gadcon_client_aspect_set(gcc, mw, mh);
95 e_gadcon_client_min_size_set(gcc, mw, mh);
99 _gc_label(const E_Gadcon_Client_Class *client_class __UNUSED__)
101 return _("Settings");
105 _gc_icon(const E_Gadcon_Client_Class *client_class __UNUSED__, Evas *evas)
110 o = edje_object_add(evas);
111 snprintf(buf, sizeof(buf), "%s/e-module-conf.edj",
112 e_module_dir_get(conf_module));
113 edje_object_file_set(o, buf, "icon");
118 _gc_id_new(const E_Gadcon_Client_Class *client_class __UNUSED__)
120 return _gadcon_class.name;
125 _cb_button_click(void *data __UNUSED__, void *data2 __UNUSED__)
129 a = e_action_find("configuration");
130 if ((a) && (a->func.go)) a->func.go(NULL, NULL);
135 _cb_action_conf(void *data, Evas_Object *obj __UNUSED__, const char *emission __UNUSED__, const char *source __UNUSED__)
140 if (!(inst = data)) return;
141 a = e_action_find("configuration");
142 if ((a) && (a->func.go)) a->func.go(NULL, NULL);
146 _e_mod_run_cb(void *data, E_Menu *m, E_Menu_Item *mi __UNUSED__)
149 E_Configure_Cat *ecat;
151 EINA_LIST_FOREACH(e_configure_registry, l, ecat)
153 if ((ecat->pri >= 0) && (ecat->items))
158 EINA_LIST_FOREACH(ecat->items, ll, eci)
162 if ((eci->pri >= 0) && (eci == data))
164 snprintf(buf, sizeof(buf), "%s/%s", ecat->cat, eci->item);
165 e_configure_registry_call(buf, m->zone->container, NULL);
173 _config_pre_activate_cb(void *data, E_Menu *m)
175 E_Configure_Cat *ecat = data;
180 e_menu_pre_activate_callback_set(m, NULL, NULL);
182 EINA_LIST_FOREACH(ecat->items, l, eci)
186 mi = e_menu_item_new(m);
187 e_menu_item_label_set(mi, eci->label);
191 e_menu_item_icon_edje_set(mi, eci->icon_file, eci->icon);
193 e_util_menu_item_theme_icon_set(mi, eci->icon);
195 e_menu_item_callback_set(mi, _e_mod_run_cb, eci);
201 _config_item_activate_cb(void *data, E_Menu *m, E_Menu_Item *mi __UNUSED__)
203 E_Configure_Cat *ecat = data;
204 e_configure_show(m->zone->container, ecat->cat);
208 _config_all_pre_activate_cb(void *data __UNUSED__, E_Menu *m)
211 E_Configure_Cat *ecat;
213 e_menu_pre_activate_callback_set(m, NULL, NULL);
215 EINA_LIST_FOREACH(e_configure_registry, l, ecat)
220 if ((ecat->pri < 0) || (!ecat->items)) continue;
222 mi = e_menu_item_new(m);
223 e_menu_item_label_set(mi, ecat->label);
227 e_menu_item_icon_edje_set(mi, ecat->icon_file, ecat->icon);
229 e_util_menu_item_theme_icon_set(mi, ecat->icon);
231 e_menu_item_callback_set(mi, _config_item_activate_cb, ecat);
233 e_menu_item_submenu_set(mi, sub);
234 e_object_unref(E_OBJECT(sub));
235 e_menu_pre_activate_callback_set(sub, _config_pre_activate_cb, ecat);
239 /* menu item add hook */
241 e_mod_config_menu_add(void *data __UNUSED__, E_Menu *m)
246 e_menu_pre_activate_callback_set(m, NULL, NULL);
249 e_menu_pre_activate_callback_set(sub, _config_all_pre_activate_cb, NULL);
251 mi = e_menu_item_new(m);
252 e_menu_item_label_set(mi, _("All"));
253 e_menu_item_submenu_set(mi, sub);
254 e_object_unref(E_OBJECT(sub));
258 EAPI E_Module_Api e_modapi = { E_MODULE_API_VERSION, "Conf" };
261 e_modapi_init(E_Module *m)
267 /* add module supplied action */
268 act = e_action_add("configuration");
271 act->func.go = _e_mod_action_conf_cb;
272 e_action_predef_name_set(_("Launch"), _("Settings Panel"),
273 "configuration", NULL, NULL, 0);
276 e_int_menus_menu_augmentation_add_sorted("config/0", _("Settings Panel"),
277 _e_mod_menu_add, NULL, NULL, NULL);
278 e_module_delayed_set(m, 1);
280 snprintf(buf, sizeof(buf), "%s/e-module-conf.edj",
281 e_module_dir_get(conf_module));
283 e_configure_registry_category_add("advanced", 80, _("Advanced"),
284 NULL, "preferences-advanced");
285 e_configure_registry_item_add("advanced/conf", 110, _("Configuration Panel"),
286 NULL, buf, e_int_config_conf_module);
288 conf_edd = E_CONFIG_DD_NEW("Config", Config);
293 E_CONFIG_VAL(D, T, version, INT);
294 E_CONFIG_VAL(D, T, menu_augmentation, INT);
296 conf = e_config_domain_load("module.conf", conf_edd);
299 if (!e_util_module_config_check("Configuration Panel", conf->version, MOD_CONFIG_FILE_VERSION))
303 if (!conf) _conf_new();
306 if (conf->menu_augmentation)
309 e_int_menus_menu_augmentation_add
310 ("config/2", e_mod_config_menu_add, NULL, NULL, NULL);
313 e_gadcon_provider_register(&_gadcon_class);
318 e_modapi_shutdown(E_Module *m __UNUSED__)
322 e_configure_registry_item_del("advanced/conf");
323 e_configure_registry_category_del("advanced");
325 if (conf->cfd) e_object_del(E_OBJECT(conf->cfd));
328 e_gadcon_provider_unregister(&_gadcon_class);
330 /* remove module-supplied menu additions */
333 e_int_menus_menu_augmentation_del("config/0", maug);
338 e_int_menus_menu_augmentation_del("config/2", conf->aug);
342 /* remove module-supplied action */
345 e_action_predef_name_del(_("Launch"), _("Settings Panel"));
346 e_action_del("configuration");
352 E_CONFIG_DD_FREE(conf_edd);
358 e_modapi_save(E_Module *m __UNUSED__)
360 e_config_domain_save("module.conf", conf_edd, conf);
364 /* action callback */
366 _e_mod_action_conf_cb(E_Object *obj, const char *params)
372 if (obj->type == E_MANAGER_TYPE)
373 zone = e_util_zone_current_get((E_Manager *)obj);
374 else if (obj->type == E_CONTAINER_TYPE)
375 zone = e_util_zone_current_get(((E_Container *)obj)->manager);
376 else if (obj->type == E_ZONE_TYPE)
377 zone = ((E_Zone *)obj);
379 zone = e_util_zone_current_get(e_manager_current_get());
381 if (!zone) zone = e_util_zone_current_get(e_manager_current_get());
382 if ((zone) && (params))
383 e_configure_registry_call(params, zone->container, params);
385 e_configure_show(zone->container, params);
388 /* menu item callback(s) */
390 _e_mod_conf_cb(void *data __UNUSED__, E_Menu *m, E_Menu_Item *mi __UNUSED__)
392 e_configure_show(m->zone->container, NULL);
396 _e_mod_mode_presentation_toggle(void *data __UNUSED__, E_Menu *m __UNUSED__, E_Menu_Item *mi)
398 e_config->mode.presentation = !e_config->mode.presentation;
399 e_menu_item_toggle_set(mi, e_config->mode.presentation);
400 e_config_mode_changed();
401 e_config_save_queue();
405 _e_mod_mode_offline_toggle(void *data __UNUSED__, E_Menu *m __UNUSED__, E_Menu_Item *mi)
407 e_config->mode.offline = !e_config->mode.offline;
408 e_menu_item_toggle_set(mi, e_config->mode.offline);
409 e_config_mode_changed();
410 e_config_save_queue();
414 _e_mod_submenu_modes_fill(void *data __UNUSED__, E_Menu *m)
418 mi = e_menu_item_new(m);
419 e_menu_item_check_set(mi, 1);
420 e_menu_item_toggle_set(mi, e_config->mode.presentation);
421 e_menu_item_label_set(mi, _("Presentation"));
422 e_util_menu_item_theme_icon_set(mi, "preferences-modes-presentation");
423 e_menu_item_callback_set(mi, _e_mod_mode_presentation_toggle, NULL);
425 mi = e_menu_item_new(m);
426 e_menu_item_check_set(mi, 1);
427 e_menu_item_toggle_set(mi, e_config->mode.offline);
428 e_menu_item_label_set(mi, _("Offline"));
429 e_util_menu_item_theme_icon_set(mi, "preferences-modes-offline");
430 e_menu_item_callback_set(mi, _e_mod_mode_offline_toggle, NULL);
432 e_menu_pre_activate_callback_set(m, NULL, NULL);
436 _e_mod_submenu_modes_get(void)
440 if (!(m = e_menu_new())) return NULL;
441 e_menu_pre_activate_callback_set(m, _e_mod_submenu_modes_fill, NULL);
445 /* menu item add hook */
447 _e_mod_menu_add(void *data __UNUSED__, E_Menu *m)
451 mi = e_menu_item_new(m);
452 e_menu_item_label_set(mi, _("Settings Panel"));
453 e_util_menu_item_theme_icon_set(mi, "preferences-system");
454 e_menu_item_callback_set(mi, _e_mod_conf_cb, NULL);
456 mi = e_menu_item_new(m);
457 e_menu_item_label_set(mi, _("Modes"));
458 e_util_menu_item_theme_icon_set(mi, "preferences-modes");
459 e_menu_item_submenu_set(mi, _e_mod_submenu_modes_get());
460 e_object_unref(E_OBJECT(mi->submenu));
466 conf = E_NEW(Config, 1);
467 conf->version = (MOD_CONFIG_FILE_EPOCH << 16);
469 #define IFMODCFG(v) if ((conf->version & 0xffff) < v) {
470 #define IFMODCFGEND }
473 conf->menu_augmentation = 1;
476 conf->version = MOD_CONFIG_FILE_VERSION;
477 e_config_save_queue();