diff --git a/src/modules/Makefile.am b/src/modules/Makefile.am index c601a472f..8cb82e423 100644 --- a/src/modules/Makefile.am +++ b/src/modules/Makefile.am @@ -239,7 +239,7 @@ SUBDIRS += connman endif if USE_MODULE_ILLUME -SUBDIRS += illume illume2 illume-home illume-softkey illume-keyboard +SUBDIRS += illume illume2 illume-home illume-softkey illume-keyboard illume-indicator endif if USE_MODULE_SYSCON diff --git a/src/modules/illume-indicator/Makefile.am b/src/modules/illume-indicator/Makefile.am new file mode 100644 index 000000000..0c86431de --- /dev/null +++ b/src/modules/illume-indicator/Makefile.am @@ -0,0 +1,33 @@ +MAINTAINERCLEANFILES = Makefile.in +MODULE = illume-indicator + +# data files for the module +filesdir = $(libdir)/enlightenment/modules/$(MODULE) +files_DATA = \ +e-module-$(MODULE).edj module.desktop + +EXTRA_DIST = $(files_DATA) + +# the module .so file +INCLUDES = -I. \ + -I$(top_srcdir) \ + -I$(top_srcdir)/src/modules/$(MODULE) \ + -I$(top_srcdir)/src/bin \ + -I$(top_srcdir)/src/lib \ + -I$(top_srcdir)/src/modules \ + @e_cflags@ +pkgdir = $(libdir)/enlightenment/modules/$(MODULE)/$(MODULE_ARCH) +pkg_LTLIBRARIES = module.la +module_la_SOURCES = e_mod_main.c \ + e_mod_main.h \ + e_mod_config.c \ + e_mod_config.h \ + e_mod_win.c \ + e_mod_win.h + +module_la_LIBADD = @e_libs@ @dlopen_libs@ +module_la_LDFLAGS = -module -avoid-version +module_la_DEPENDENCIES = $(top_builddir)/config.h + +uninstall: + rm -rf $(DESTDIR)$(libdir)/enlightenment/modules/$(MODULE) diff --git a/src/modules/illume-indicator/e-module-illume-indicator.edj b/src/modules/illume-indicator/e-module-illume-indicator.edj new file mode 100644 index 000000000..b1d64ac17 Binary files /dev/null and b/src/modules/illume-indicator/e-module-illume-indicator.edj differ diff --git a/src/modules/illume-indicator/e_mod_config.c b/src/modules/illume-indicator/e_mod_config.c new file mode 100644 index 000000000..e1bca1e56 --- /dev/null +++ b/src/modules/illume-indicator/e_mod_config.c @@ -0,0 +1,60 @@ +#include "e.h" +#include "e_mod_main.h" +#include "e_mod_config.h" + +/* local variables */ +EAPI Il_Ind_Config *il_ind_cfg = NULL; +static E_Config_DD *conf_edd = NULL; + +EAPI int +il_ind_config_init(E_Module *m) +{ + conf_edd = E_CONFIG_DD_NEW("Illume-Ind_Cfg", Il_Ind_Config); + #undef T + #undef D + #define T Il_Ind_Config + #define D conf_edd + E_CONFIG_VAL(D, T, version, INT); + + il_ind_cfg = e_config_domain_load("module.illume-indicator", conf_edd); + if ((il_ind_cfg) && + ((il_ind_cfg->version >> 16) < IL_CONFIG_MAJ)) + { + E_FREE(il_ind_cfg); + il_ind_cfg = NULL; + } + if (!il_ind_cfg) + { + il_ind_cfg = E_NEW(Il_Ind_Config, 1); + il_ind_cfg->version = 0; + } + if (il_ind_cfg) + { + /* Add new config variables here */ + /* if ((il_ind_cfg->version & 0xffff) < 1) */ + il_ind_cfg->version = (IL_CONFIG_MAJ << 16) | IL_CONFIG_MIN; + } + + il_ind_cfg->mod_dir = eina_stringshare_add(m->dir); + return 1; +} + +EAPI int +il_ind_config_shutdown(void) +{ + if (il_ind_cfg->mod_dir) eina_stringshare_del(il_ind_cfg->mod_dir); + il_ind_cfg->mod_dir = NULL; + + E_FREE(il_ind_cfg); + il_ind_cfg = NULL; + + E_CONFIG_DD_FREE(conf_edd); + return 1; +} + +EAPI int +il_ind_config_save(void) +{ + return 1; +} + diff --git a/src/modules/illume-indicator/e_mod_config.h b/src/modules/illume-indicator/e_mod_config.h new file mode 100644 index 000000000..ab8e63aaa --- /dev/null +++ b/src/modules/illume-indicator/e_mod_config.h @@ -0,0 +1,23 @@ +#ifndef E_MOD_CONFIG_H +#define E_MOD_CONFIG_H + +#define IL_CONFIG_MIN 0 +#define IL_CONFIG_MAJ 0 + +typedef struct _Il_Ind_Config Il_Ind_Config; + +struct _Il_Ind_Config +{ + int version; + + // Placeholders + const char *mod_dir; +}; + +EAPI int il_ind_config_init(E_Module *m); +EAPI int il_ind_config_shutdown(void); +EAPI int il_ind_config_save(void); + +extern EAPI Il_Ind_Config *il_ind_cfg; + +#endif diff --git a/src/modules/illume-indicator/e_mod_main.c b/src/modules/illume-indicator/e_mod_main.c new file mode 100644 index 000000000..5360831aa --- /dev/null +++ b/src/modules/illume-indicator/e_mod_main.c @@ -0,0 +1,36 @@ +#include "e.h" +#include "e_mod_main.h" +#include "e_mod_config.h" +#include "e_mod_win.h" + +/* local variables */ +static Il_Ind_Win *iwin = NULL; + +EAPI E_Module_Api e_modapi = { E_MODULE_API_VERSION, "Illume-Indicator" }; + +EAPI void * +e_modapi_init(E_Module *m) +{ + if (!il_ind_config_init(m)) return NULL; + e_mod_win_init(); + iwin = e_mod_win_new(); + return m; +} + +EAPI int +e_modapi_shutdown(E_Module *m) +{ + e_object_del(E_OBJECT(iwin)); + iwin = NULL; + + e_mod_win_shutdown(); + il_ind_config_shutdown(); + return 1; +} + +EAPI int +e_modapi_save(E_Module *m) +{ + return il_ind_config_save(); +} + diff --git a/src/modules/illume-indicator/e_mod_main.h b/src/modules/illume-indicator/e_mod_main.h new file mode 100644 index 000000000..439fcdddd --- /dev/null +++ b/src/modules/illume-indicator/e_mod_main.h @@ -0,0 +1,24 @@ +#ifndef E_MOD_MAIN_H +#define E_MOD_MAIN_H + +#define IL_IND_WIN_TYPE 0xE1b0786 + +typedef struct _Il_Ind_Win Il_Ind_Win; + +struct _Il_Ind_Win +{ + E_Object e_obj_inherit; + + E_Win *win; + E_Menu *menu; + E_Gadcon *gadcon; + Evas_Object *o_base, *o_event; +}; + +EAPI extern E_Module_Api e_modapi; + +EAPI void *e_modapi_init(E_Module *m); +EAPI int e_modapi_shutdown(E_Module *m); +EAPI int e_modapi_save(E_Module *m); + +#endif diff --git a/src/modules/illume-indicator/e_mod_win.c b/src/modules/illume-indicator/e_mod_win.c new file mode 100644 index 000000000..a1683307d --- /dev/null +++ b/src/modules/illume-indicator/e_mod_win.c @@ -0,0 +1,281 @@ +#include "e.h" +#include "e_mod_main.h" +#include "e_mod_win.h" +#include "e_mod_config.h" + +/* local function prototypes */ +static void _il_ind_win_cb_free(Il_Ind_Win *iwin); +static void _il_ind_win_cb_resize(E_Win *ewin); +static void _il_ind_win_cb_mouse_down(void *data, Evas *evas, Evas_Object *obj, void *event); +static int _il_ind_win_gadcon_client_add(void *data, const E_Gadcon_Client_Class *cc); +static void _il_ind_win_gadcon_client_del(void *data, E_Gadcon_Client *gcc); +static void _il_ind_win_gadcon_min_size_request(void *data, E_Gadcon *gc, Evas_Coord w, Evas_Coord h); +static void _il_ind_win_gadcon_size_request(void *data, E_Gadcon *gc, Evas_Coord w, Evas_Coord h); +static Evas_Object *_il_ind_win_gadcon_frame_request(void *data, E_Gadcon_Client *gcc, const char *style); +static void _il_ind_win_cb_menu_post(void *data, E_Menu *m); +static void _il_ind_win_menu_append(Il_Ind_Win *iwin, E_Menu *mn); +static void _il_ind_win_cb_menu_pre(void *data, E_Menu *mn); +static void _il_ind_win_cb_menu_items_append(void *data, E_Gadcon_Client *gcc, E_Menu *mn); +static void _il_ind_win_cb_menu_edit(void *data, E_Menu *mn, E_Menu_Item *mi); +static void _il_ind_win_cb_menu_contents(void *data, E_Menu *mn, E_Menu_Item *mi); + +EAPI int +e_mod_win_init(void) +{ + return 1; +} + +EAPI int +e_mod_win_shutdown(void) +{ + return 1; +} + +EAPI Il_Ind_Win * +e_mod_win_new(void) +{ + Il_Ind_Win *iwin; + E_Zone *zone; + Evas *evas; + Eina_List *l; + E_Config_Gadcon *cg; + Ecore_X_Window_State states[2]; + char buff[PATH_MAX]; + + iwin = E_OBJECT_ALLOC(Il_Ind_Win, IL_IND_WIN_TYPE, _il_ind_win_cb_free); + if (!iwin) return NULL; + + snprintf(buff, sizeof(buff), "%s/e-module-illume-indicator.edj", + il_ind_cfg->mod_dir); + + iwin->win = e_win_new(e_util_container_number_get(0)); + states[0] = ECORE_X_WINDOW_STATE_SKIP_TASKBAR; + states[1] = ECORE_X_WINDOW_STATE_SKIP_PAGER; + ecore_x_netwm_window_state_set(iwin->win->evas_win, states, 2); + ecore_x_icccm_hints_set(iwin->win->evas_win, 0, 0, 0, 0, 0, 0, 0); + ecore_x_netwm_window_type_set(iwin->win->evas_win, ECORE_X_WINDOW_TYPE_DOCK); + + e_win_no_remember_set(iwin->win, 1); + e_win_resize_callback_set(iwin->win, _il_ind_win_cb_resize); + e_win_borderless_set(iwin->win, 1); + iwin->win->data = iwin; + e_win_title_set(iwin->win, _("Illume Indicator")); + e_win_name_class_set(iwin->win, "E", "Illume-Indicator"); + + evas = e_win_evas_get(iwin->win); + + zone = e_util_container_zone_number_get(0, 0); + + iwin->o_event = evas_object_rectangle_add(evas); + evas_object_color_set(iwin->o_event, 0, 0, 0, 0); + evas_object_move(iwin->o_event, 0, 0); + evas_object_resize(iwin->o_event, zone->w, 32); + evas_object_event_callback_add(iwin->o_event, EVAS_CALLBACK_MOUSE_DOWN, + _il_ind_win_cb_mouse_down, iwin); + evas_object_show(iwin->o_event); + evas_object_layer_set(iwin->o_event, 200); + + iwin->o_base = edje_object_add(evas); + evas_object_resize(iwin->o_base, zone->w, 32); + if (!e_theme_edje_object_set(iwin->o_base, + "base/theme/modules/illume-indicator", + "modules/illume-indicator/shelf")) + edje_object_file_set(iwin->o_base, buff, "modules/illume-indicator/shelf"); + evas_object_move(iwin->o_base, 0, 0); + evas_object_resize(iwin->o_base, zone->w, 32); + evas_object_layer_set(iwin->o_base, 200); + evas_object_show(iwin->o_base); + + iwin->gadcon = e_gadcon_swallowed_new("illume-indicator", 1, iwin->o_base, + "e.swallow.content"); + iwin->gadcon->instant_edit = 1; + edje_extern_object_min_size_set(iwin->gadcon->o_container, zone->w, 32); + edje_object_part_swallow(iwin->o_base, "e.swallow.content", + iwin->gadcon->o_container); + e_gadcon_min_size_request_callback_set(iwin->gadcon, + _il_ind_win_gadcon_min_size_request, + iwin); + e_gadcon_size_request_callback_set(iwin->gadcon, + _il_ind_win_gadcon_size_request, iwin); + e_gadcon_frame_request_callback_set(iwin->gadcon, + _il_ind_win_gadcon_frame_request, iwin); + e_gadcon_orient(iwin->gadcon, E_GADCON_ORIENT_TOP); + e_gadcon_zone_set(iwin->gadcon, zone); + e_gadcon_ecore_evas_set(iwin->gadcon, iwin->win->ecore_evas); + e_gadcon_util_menu_attach_func_set(iwin->gadcon, + _il_ind_win_cb_menu_items_append, iwin); + + e_gadcon_populate(iwin->gadcon); + + e_win_size_min_set(iwin->win, zone->w, 32); + e_win_show(iwin->win); + e_win_move_resize(iwin->win, 0, 0, zone->w, 32); + + return iwin; +} + +/* local function prototypes */ +static void +_il_ind_win_cb_free(Il_Ind_Win *iwin) +{ + e_object_del(E_OBJECT(iwin->gadcon)); + iwin->gadcon = NULL; + + if (iwin->menu) + { + e_menu_post_deactivate_callback_set(iwin->menu, NULL, NULL); + e_object_del(E_OBJECT(iwin->menu)); + iwin->menu = NULL; + } + + e_object_del(E_OBJECT(iwin->win)); + E_FREE(iwin); +} + +static void +_il_ind_win_cb_resize(E_Win *ewin) +{ + Il_Ind_Win *iwin; + + if (!(iwin = ewin->data)) return; + evas_object_resize(iwin->o_event, iwin->win->w, iwin->win->h); + evas_object_resize(iwin->o_base, iwin->win->w, iwin->win->h); +} + +static void +_il_ind_win_cb_mouse_down(void *data, Evas *evas, Evas_Object *obj, void *event) +{ + Il_Ind_Win *iwin; + Evas_Event_Mouse_Down *ev; + + if (!(iwin = data)) return; + ev = event; + if (ev->button == 3) + { + E_Menu *mn; + E_Zone *zone; + int x, y, w, h; + + mn = e_menu_new(); + e_menu_post_deactivate_callback_set(mn, _il_ind_win_cb_menu_post, iwin); + iwin->menu = mn; + + _il_ind_win_menu_append(iwin, mn); + + zone = e_util_container_zone_number_get(0, 0); + e_gadcon_canvas_zone_geometry_get(iwin->gadcon, &x, &y, NULL, NULL); + e_menu_activate_mouse(mn, zone, x + ev->output.x, y + ev->output.y, + 1, 1, E_MENU_POP_DIRECTION_AUTO, ev->timestamp); + } +} + +static void +_il_ind_win_cb_menu_post(void *data, E_Menu *m) +{ + Il_Ind_Win *iwin; + + if (!(iwin = data)) return; + if (!iwin->menu) return; + e_object_del(E_OBJECT(iwin->menu)); + iwin->menu = NULL; +} + +static void +_il_ind_win_cb_menu_items_append(void *data, E_Gadcon_Client *gcc, E_Menu *mn) +{ + Il_Ind_Win *iwin; + + if (!(iwin = data)) return; + _il_ind_win_menu_append(iwin, mn); +} + +static void +_il_ind_win_menu_append(Il_Ind_Win *iwin, E_Menu *mn) +{ + E_Menu *sm; + E_Menu_Item *mi; + + sm = e_menu_new(); + mi = e_menu_item_new(mn); + e_menu_item_label_set(mi, _("Illume Indicator")); + e_util_menu_item_theme_icon_set(mi, "preferences-desktop-shelf"); + e_menu_pre_activate_callback_set(sm, _il_ind_win_cb_menu_pre, iwin); + e_object_data_set(E_OBJECT(mi), iwin); + e_menu_item_submenu_set(mi, sm); +} + +static void +_il_ind_win_cb_menu_pre(void *data, E_Menu *mn) +{ + Il_Ind_Win *iwin; + E_Menu_Item *mi; + + if (!(iwin = data)) return; + e_menu_pre_activate_callback_set(mn, NULL, NULL); + + mi = e_menu_item_new(mn); + if (iwin->gadcon->editing) + e_menu_item_label_set(mi, _("Stop Moving/Resizing Items")); + else + e_menu_item_label_set(mi, _("Begin Moving/Resizing Items")); + e_util_menu_item_theme_icon_set(mi, "transform-scale"); + e_menu_item_callback_set(mi, _il_ind_win_cb_menu_edit, iwin); + + mi = e_menu_item_new(mn); + e_menu_item_separator_set(mi, 1); + + mi = e_menu_item_new(mn); + e_menu_item_label_set(mi, _("Set Contents")); + e_util_menu_item_theme_icon_set(mi, "preferences-desktop-shelf"); + e_menu_item_callback_set(mi, _il_ind_win_cb_menu_contents, iwin); +} + +static void +_il_ind_win_gadcon_min_size_request(void *data, E_Gadcon *gc, Evas_Coord w, Evas_Coord h) +{ + Il_Ind_Win *iwin; + + if (!(iwin = data)) return; + if (gc == iwin->gadcon) + { + if (h < 32) h = 32; + edje_extern_object_min_size_set(iwin->gadcon->o_container, w, h); + edje_object_part_swallow(iwin->o_base, "e.swallow.content", + iwin->gadcon->o_container); + } + evas_object_resize(iwin->o_base, iwin->win->w, iwin->win->h); +} + +static void +_il_ind_win_gadcon_size_request(void *data, E_Gadcon *gc, Evas_Coord w, Evas_Coord h) +{ + return; +} + +static Evas_Object * +_il_ind_win_gadcon_frame_request(void *data, E_Gadcon_Client *gcc, const char *style) +{ + return NULL; +} + +static void +_il_ind_win_cb_menu_edit(void *data, E_Menu *mn, E_Menu_Item *mi) +{ + Il_Ind_Win *iwin; + + if (!(iwin = data)) return; + if (iwin->gadcon->editing) + e_gadcon_edit_end(iwin->gadcon); + else + e_gadcon_edit_begin(iwin->gadcon); +} + +static void +_il_ind_win_cb_menu_contents(void *data, E_Menu *mn, E_Menu_Item *mi) +{ + Il_Ind_Win *iwin; + + if (!(iwin = data)) return; + if (!iwin->gadcon->config_dialog) + e_int_gadcon_config_shelf(iwin->gadcon); +} diff --git a/src/modules/illume-indicator/e_mod_win.h b/src/modules/illume-indicator/e_mod_win.h new file mode 100644 index 000000000..14e61c651 --- /dev/null +++ b/src/modules/illume-indicator/e_mod_win.h @@ -0,0 +1,8 @@ +#ifndef E_MOD_WIN_H +#define E_MOD_WIN_H + +EAPI int e_mod_win_init(void); +EAPI int e_mod_win_shutdown(void); +EAPI Il_Ind_Win *e_mod_win_new(void); + +#endif diff --git a/src/modules/illume-indicator/module.desktop.in b/src/modules/illume-indicator/module.desktop.in new file mode 100644 index 000000000..249dbf46a --- /dev/null +++ b/src/modules/illume-indicator/module.desktop.in @@ -0,0 +1,6 @@ +[Desktop Entry] +Type=Link +Name=Illume-Indicator +Icon=e-module-illume-indicator +X-Enlightenment-ModuleType=system +Comment=Illume Indicator for Embedded diff --git a/src/modules/illume-softkey/e_mod_main.c b/src/modules/illume-softkey/e_mod_main.c index bb69062bd..d4f8aaeab 100644 --- a/src/modules/illume-softkey/e_mod_main.c +++ b/src/modules/illume-softkey/e_mod_main.c @@ -3,7 +3,7 @@ #include "e_mod_config.h" #include "e_mod_win.h" -static Il_Sk_Win *win = NULL; +static Il_Sk_Win *swin = NULL; EAPI E_Module_Api e_modapi = { E_MODULE_API_VERSION, "Illume-Softkey" }; @@ -14,7 +14,8 @@ e_modapi_init(E_Module *m) if (!il_sk_config_init(m)) return NULL; e_mod_win_init(); - win = e_mod_win_new(); + + swin = e_mod_win_new(); return m; } @@ -22,8 +23,8 @@ e_modapi_init(E_Module *m) EAPI int e_modapi_shutdown(E_Module *m) { - e_object_del(E_OBJECT(win)); - win = NULL; + e_object_del(E_OBJECT(swin)); + swin = NULL; e_mod_win_shutdown(); il_sk_config_shutdown(); diff --git a/src/modules/illume-softkey/e_mod_win.c b/src/modules/illume-softkey/e_mod_win.c index d4809d4c7..8afa1c089 100644 --- a/src/modules/illume-softkey/e_mod_win.c +++ b/src/modules/illume-softkey/e_mod_win.c @@ -40,8 +40,8 @@ e_mod_win_new(void) states[0] = ECORE_X_WINDOW_STATE_SKIP_TASKBAR; states[1] = ECORE_X_WINDOW_STATE_SKIP_PAGER; ecore_x_netwm_window_state_set(swin->win->evas_win, states, 2); - ecore_x_icccm_hints_set(swin->win->evas_win, 0, 0, 0, 0, 0, 0, 0); +// ecore_x_netwm_window_type_set(swin->win->evas_win, ECORE_X_WINDOW_TYPE_DOCK); zone = e_util_container_zone_number_get(0, 0); e_win_no_remember_set(swin->win, 1); @@ -73,10 +73,10 @@ e_mod_win_new(void) e_widget_list_object_append(swin->o_box, swin->b_close, 1, 0, 0.5); e_win_size_min_set(swin->win, zone->w, 48); + e_win_layer_set(swin->win, 200); e_win_show(swin->win); e_win_move_resize(swin->win, 0, (zone->h - 48), zone->w, 48); - ecore_x_netwm_window_type_set(swin->win->evas_win, ECORE_X_WINDOW_TYPE_DOCK); return swin; } diff --git a/src/modules/illume-softkey/module.desktop.in b/src/modules/illume-softkey/module.desktop.in index 354d2a0dd..1ae0e2f08 100644 --- a/src/modules/illume-softkey/module.desktop.in +++ b/src/modules/illume-softkey/module.desktop.in @@ -3,4 +3,4 @@ Type=Link Name=Illume-Softkey Icon=e-module-illume-softkey X-Enlightenment-ModuleType=system -Comment=Illume Home for Embedded +Comment=Illume Softkey for Embedded diff --git a/src/modules/illume2/e_kbd.c b/src/modules/illume2/e_kbd.c index 20d865966..fcf8f1c86 100644 --- a/src/modules/illume2/e_kbd.c +++ b/src/modules/illume2/e_kbd.c @@ -718,9 +718,9 @@ _e_kbd_dbus_keyboard_eval(void) if (have_real != _e_kbd_dbus_have_real_keyboard) { _e_kbd_dbus_have_real_keyboard = have_real; - if (_e_kbd_dbus_have_real_keyboard) - _e_kbd_all_disable(); - else +// if (_e_kbd_dbus_have_real_keyboard) +// _e_kbd_all_disable(); +// else _e_kbd_all_enable(); } }