89c2a92bb6601990fa0aa040f4d2270a2320279b
[framework/uifw/e17.git] / src / modules / syscon / e_mod_main.c
1 #include "e.h"
2 #include "e_mod_main.h"
3
4 /* actual module specifics */
5 static void  _e_mod_action_syscon_cb(E_Object *obj, const char *params);
6 static Eina_Bool   _e_mod_syscon_defer_cb(void *data);
7 static void  _e_mod_syscon_cb(void *data, E_Menu *m, E_Menu_Item *mi);
8 static void  _e_mod_menu_add(void *data, E_Menu *m);
9
10 static E_Module *conf_module = NULL;
11 static E_Action *act = NULL;
12 static E_Int_Menu_Augmentation *maug = NULL;
13
14 /* module setup */
15 EAPI E_Module_Api e_modapi =
16 {
17    E_MODULE_API_VERSION,
18      "Syscon"
19 };
20
21 EAPI void *
22 e_modapi_init(E_Module *m)
23 {
24    conf_module = m;
25    e_syscon_init();
26    /* add module supplied action */
27    act = e_action_add("syscon");
28    if (act)
29      {
30         act->func.go = _e_mod_action_syscon_cb;
31         e_action_predef_name_set(_("System"), _("System Control"), "syscon",
32                                  NULL, NULL, 0);
33      }
34    maug = e_int_menus_menu_augmentation_add_sorted
35      ("main/10", _("System"), _e_mod_menu_add, NULL, NULL, NULL);
36    e_module_delayed_set(m, 1);
37    return m;
38 }
39
40 EAPI int
41 e_modapi_shutdown(E_Module *m __UNUSED__)
42 {
43    /* remove module-supplied menu additions */
44    if (maug)
45      {
46         e_int_menus_menu_augmentation_del("main/10", maug);
47         maug = NULL;
48      }
49    /* remove module-supplied action */
50    if (act)
51      {
52         e_action_predef_name_del(_("System"), _("System Controls"));
53         e_action_del("syscon");
54         act = NULL;
55      }
56    e_syscon_shutdown();
57    conf_module = NULL;
58    return 1;
59 }
60
61 EAPI int
62 e_modapi_save(E_Module *m __UNUSED__)
63 {
64    return 1;
65 }
66
67 /* action callback */
68 static void
69 _e_mod_action_syscon_cb(E_Object *obj, const char *params)
70 {
71    E_Zone *zone = NULL;
72
73    // params = syscon action + now:
74    // desk_lock
75    // logout
76    // halt
77    // reboot
78    // suspend
79    // hibernate
80    if (obj)
81      {
82         if (obj->type == E_MANAGER_TYPE)
83           zone = e_util_zone_current_get((E_Manager *)obj);
84         else if (obj->type == E_CONTAINER_TYPE)
85           zone = e_util_zone_current_get(((E_Container *)obj)->manager);
86         else if (obj->type == E_ZONE_TYPE)
87           zone = e_util_zone_current_get(((E_Zone *)obj)->container->manager);
88         else
89           zone = e_util_zone_current_get(e_manager_current_get());
90      }
91    if (!zone) zone = e_util_zone_current_get(e_manager_current_get());
92    if (zone) e_syscon_show(zone, params);
93 }
94
95 /* menu item callback(s) */
96 static Eina_Bool
97 _e_mod_syscon_defer_cb(void *data)
98 {
99    E_Zone *zone;
100
101    zone = data;
102    if (zone) e_syscon_show(zone, NULL);
103    return ECORE_CALLBACK_CANCEL;
104 }
105
106 static void 
107 _e_mod_syscon_cb(void *data __UNUSED__, E_Menu *m, E_Menu_Item *mi __UNUSED__)
108 {
109    ecore_idle_enterer_add(_e_mod_syscon_defer_cb, m->zone);
110 }
111
112 /* menu item add hook */
113 static void
114 _e_mod_menu_add(void *data __UNUSED__, E_Menu *m)
115 {
116    E_Menu_Item *mi;
117
118    mi = e_menu_item_new(m);
119    e_menu_item_label_set(mi, _("System"));
120    e_util_menu_item_theme_icon_set(mi, "system");
121    e_menu_item_callback_set(mi, _e_mod_syscon_cb, NULL);
122 }