From 2c767bf9e41050e7771938d29dc2a9953607d767 Mon Sep 17 00:00:00 2001 From: Christopher Michael Date: Fri, 11 Dec 2009 09:34:35 +0000 Subject: [PATCH] Let layout policy handle kbd sticky. Add a gadget for containers that allows manual keyboard visibility setting. SVN revision: 44353 --- .../e-module-illume-keyboard.edj | Bin 31923 -> 35916 bytes src/modules/illume-keyboard/e_kbd_int.c | 1 - src/modules/illume-keyboard/e_mod_main.c | 171 ++++++++++++++++++ 3 files changed, 171 insertions(+), 1 deletion(-) diff --git a/src/modules/illume-keyboard/e-module-illume-keyboard.edj b/src/modules/illume-keyboard/e-module-illume-keyboard.edj index b2ef204a907d1f2d9abb6ba9aafdaf483517d053..b82f6ff63aec4d75c38cad7399221dd84c4e998c 100644 GIT binary patch delta 25018 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 delta 21047 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 )>46z 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 PyD#_g&-r};F50orB*G%n diff --git a/src/modules/illume-keyboard/e_kbd_int.c b/src/modules/illume-keyboard/e_kbd_int.c index 8f6a87e23..04e2b09c3 100644 --- a/src/modules/illume-keyboard/e_kbd_int.c +++ b/src/modules/illume-keyboard/e_kbd_int.c @@ -1795,7 +1795,6 @@ e_kbd_int_new(const char *themedir, const char *syskbds, const char *sysdicts) ki->client_message_handler = ecore_event_handler_add (ECORE_X_EVENT_CLIENT_MESSAGE, _e_kbd_int_cb_client_message, ki); - e_win_sticky_set(ki->win, 1); e_win_show(ki->win); e_win_move_resize(ki->win, 0, (zone->h - mh), zone->w, mh); return ki; diff --git a/src/modules/illume-keyboard/e_mod_main.c b/src/modules/illume-keyboard/e_mod_main.c index 9f53f1cfb..8bce01b74 100644 --- a/src/modules/illume-keyboard/e_mod_main.c +++ b/src/modules/illume-keyboard/e_mod_main.c @@ -3,15 +3,41 @@ #include "e_mod_config.h" #include "e_kbd_int.h" +typedef struct _Instance Instance; +struct _Instance +{ + E_Gadcon_Client *gcc; + Evas_Object *o_btn; + Eina_List *handlers; +}; + /* local function prototypes */ +static E_Gadcon_Client *_gc_init(E_Gadcon *gc, const char *name, const char *id, const char *style); +static void _gc_shutdown(E_Gadcon_Client *gcc); +static void _gc_orient(E_Gadcon_Client *gcc, E_Gadcon_Orient orient); +static char *_gc_label(E_Gadcon_Client_Class *cc); +static Evas_Object *_gc_icon(E_Gadcon_Client_Class *cc, Evas *evas); +static const char *_gc_id_new(E_Gadcon_Client_Class *cc); + static void _il_kbd_stop(void); static void _il_kbd_start(void); static int _il_kbd_cb_exit(void *data, int type, void *event); +static void _il_kbd_btn_cb_click(void *data, void *data2); +static int _il_kbd_cb_border_focus(void *data, int type, void *event); /* local variables */ static E_Kbd_Int *ki = NULL; static Ecore_Exe *_kbd_exe = NULL; static Ecore_Event_Handler *_kbd_exe_exit_handler = NULL; +static Eina_List *instances = NULL; + +static const E_Gadcon_Client_Class _gc_class = +{ + GADCON_CLIENT_CLASS_VERSION, "illume-keyboard", + { _gc_init, _gc_shutdown, _gc_orient, _gc_label, _gc_icon, _gc_id_new, NULL, + e_gadcon_site_is_not_toolbar + }, E_GADCON_CLIENT_STYLE_PLAIN +}; EAPI E_Module_Api e_modapi = { E_MODULE_API_VERSION, "Illume Keyboard" }; @@ -20,12 +46,14 @@ e_modapi_init(E_Module *m) { if (!il_kbd_config_init(m)) return NULL; _il_kbd_start(); + e_gadcon_provider_register(&_gc_class); return m; } EAPI int e_modapi_shutdown(E_Module *m) { + e_gadcon_provider_unregister(&_gc_class); _il_kbd_stop(); il_kbd_config_shutdown(); return 1; @@ -44,6 +72,86 @@ il_kbd_cfg_update(void) _il_kbd_start(); } +static E_Gadcon_Client * +_gc_init(E_Gadcon *gc, const char *name, const char *id, const char *style) +{ + Instance *inst; + Evas_Object *icon; + char buff[PATH_MAX]; + + snprintf(buff, sizeof(buff), "%s/e-module-illume-keyboard.edj", + il_kbd_cfg->mod_dir); + inst = E_NEW(Instance, 1); + inst->o_btn = e_widget_button_add(gc->evas, NULL, NULL, + _il_kbd_btn_cb_click, inst, NULL); + icon = e_icon_add(evas_object_evas_get(inst->o_btn)); + e_icon_file_edje_set(icon, buff, "icon"); + e_widget_button_icon_set(inst->o_btn, icon); + + inst->gcc = e_gadcon_client_new(gc, name, id, style, inst->o_btn); + inst->gcc->data = inst; + + inst->handlers = + eina_list_append(inst->handlers, + ecore_event_handler_add(E_EVENT_BORDER_FOCUS_IN, + _il_kbd_cb_border_focus, inst)); + + instances = eina_list_append(instances, inst); + return inst->gcc; +} + +static void +_gc_shutdown(E_Gadcon_Client *gcc) +{ + Instance *inst; + Ecore_Event_Handler *handler; + + if (!(inst = gcc->data)) return; + instances = eina_list_remove(instances, inst); + if (inst->o_btn) evas_object_del(inst->o_btn); + + EINA_LIST_FREE(inst->handlers, handler) + ecore_event_handler_del(handler); + + E_FREE(inst); +} + +static void +_gc_orient(E_Gadcon_Client *gcc, E_Gadcon_Orient orient) +{ + e_gadcon_client_aspect_set(gcc, 16, 16); + e_gadcon_client_min_size_set(gcc, 16, 16); +} + +static char * +_gc_label(E_Gadcon_Client_Class *cc) +{ + return _("Illume-Keyboard"); +} + +static Evas_Object * +_gc_icon(E_Gadcon_Client_Class *cc, Evas *evas) +{ + Evas_Object *o; + char buff[PATH_MAX]; + + snprintf(buff, sizeof(buff), "%s/e-module-illume-keyboard.edj", + il_kbd_cfg->mod_dir); + o = edje_object_add(evas); + edje_object_file_set(o, buff, "icon"); + return o; +} + +static const char * +_gc_id_new(E_Gadcon_Client_Class *cc) +{ + char buff[PATH_MAX]; + + snprintf(buff, sizeof(buff), "%s.%d", _gc_class.name, + eina_list_count(instances)); + return strdup(buff); +} + static void _il_kbd_stop(void) { @@ -115,3 +223,66 @@ _il_kbd_cb_exit(void *data, int type, void *event) if (ev->exe == _kbd_exe) _kbd_exe = NULL; return 1; } + +static void +_il_kbd_btn_cb_click(void *data, void *data2) +{ + Ecore_X_Virtual_Keyboard_State state; + Instance *inst; + E_Border *bd; + Evas_Object *icon; + char buff[PATH_MAX]; + + if (!(inst = data)) return; + if (!(bd = e_border_focused_get())) return; + + snprintf(buff, sizeof(buff), "%s/e-module-illume-keyboard.edj", + il_kbd_cfg->mod_dir); + + icon = e_icon_add(evas_object_evas_get(inst->o_btn)); + state = ecore_x_e_virtual_keyboard_state_get(bd->client.win); + if ((state == ECORE_X_VIRTUAL_KEYBOARD_STATE_OFF) || + (state == ECORE_X_VIRTUAL_KEYBOARD_STATE_UNKNOWN)) + { + ecore_x_e_virtual_keyboard_state_set(bd->client.win, + ECORE_X_VIRTUAL_KEYBOARD_STATE_ON); + e_icon_file_edje_set(icon, buff, "btn_icon"); + } + else + { + ecore_x_e_virtual_keyboard_state_set(bd->client.win, + ECORE_X_VIRTUAL_KEYBOARD_STATE_OFF); + e_icon_file_edje_set(icon, buff, "icon"); + } + e_widget_button_icon_set(inst->o_btn, icon); +} + +static int +_il_kbd_cb_border_focus(void *data, int type, void *event) +{ + Instance *inst; + E_Event_Border_Focus_In *ev; + E_Border *bd; + Evas_Object *icon; + Ecore_X_Virtual_Keyboard_State state; + char buff[PATH_MAX]; + + if (!(inst = data)) return 1; + ev = event; + if (ev->border->stolen) return 1; + if (!(bd = ev->border)) return 1; + + snprintf(buff, sizeof(buff), "%s/e-module-illume-keyboard.edj", + il_kbd_cfg->mod_dir); + + icon = e_icon_add(evas_object_evas_get(inst->o_btn)); + state = ecore_x_e_virtual_keyboard_state_get(bd->client.win); + if ((state == ECORE_X_VIRTUAL_KEYBOARD_STATE_OFF) || + (state == ECORE_X_VIRTUAL_KEYBOARD_STATE_UNKNOWN)) + e_icon_file_edje_set(icon, buff, "icon"); + else + e_icon_file_edje_set(icon, buff, "btn_icon"); + e_widget_button_icon_set(inst->o_btn, icon); + + return 1; +}