forked from enlightenment/enlightenment
parent
2c6bced755
commit
6f33391c98
|
@ -2,10 +2,6 @@
|
||||||
#include "e_kbd.h"
|
#include "e_kbd.h"
|
||||||
#include "e_mod_layout.h"
|
#include "e_mod_layout.h"
|
||||||
|
|
||||||
#if 0
|
|
||||||
|
|
||||||
static void _e_kbd_layout_send(E_Kbd *kbd);
|
|
||||||
|
|
||||||
static Eina_List *handlers = NULL;
|
static Eina_List *handlers = NULL;
|
||||||
static Eina_List *kbds = NULL;
|
static Eina_List *kbds = NULL;
|
||||||
static Ecore_X_Atom atom_mb_im_invoker_command = 0;
|
static Ecore_X_Atom atom_mb_im_invoker_command = 0;
|
||||||
|
@ -14,14 +10,16 @@ static Eina_List *border_hooks = NULL;
|
||||||
static E_Border *focused_border = NULL;
|
static E_Border *focused_border = NULL;
|
||||||
static Ecore_X_Atom focused_vkbd_state = 0;
|
static Ecore_X_Atom focused_vkbd_state = 0;
|
||||||
static E_Module *mod = NULL;
|
static E_Module *mod = NULL;
|
||||||
|
|
||||||
//#define ICONIFY_TO_HIDE
|
|
||||||
|
|
||||||
static Ecore_Job *_e_kbd_apply_all_job = NULL;
|
static Ecore_Job *_e_kbd_apply_all_job = NULL;
|
||||||
|
|
||||||
|
#define ICONIFY_TO_HIDE 0
|
||||||
|
|
||||||
|
static void _e_kbd_layout_send(E_Kbd *kbd);
|
||||||
|
|
||||||
static void
|
static void
|
||||||
_e_kbd_cb_apply_all_job(void *data)
|
_e_kbd_cb_apply_all_job(void *data)
|
||||||
{
|
{
|
||||||
_e_mod_layout_apply_all();
|
// _e_mod_layout_apply_all();
|
||||||
_e_kbd_apply_all_job = NULL;
|
_e_kbd_apply_all_job = NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -68,7 +66,7 @@ _e_kbd_cb_animate(void *data)
|
||||||
{
|
{
|
||||||
E_Kbd *kbd;
|
E_Kbd *kbd;
|
||||||
double t, v;
|
double t, v;
|
||||||
|
|
||||||
kbd = data;
|
kbd = data;
|
||||||
t = ecore_loop_time_get() - kbd->start;
|
t = ecore_loop_time_get() - kbd->start;
|
||||||
if (t > kbd->len) t = kbd->len;
|
if (t > kbd->len) t = kbd->len;
|
||||||
|
@ -86,9 +84,7 @@ _e_kbd_cb_animate(void *data)
|
||||||
}
|
}
|
||||||
kbd->adjust = (kbd->adjust_end * v) + (kbd->adjust_start * (1.0 - v));
|
kbd->adjust = (kbd->adjust_end * v) + (kbd->adjust_start * (1.0 - v));
|
||||||
if (kbd->border)
|
if (kbd->border)
|
||||||
{
|
e_border_fx_offset(kbd->border, 0, kbd->border->h - kbd->adjust);
|
||||||
e_border_fx_offset(kbd->border, 0, kbd->border->h - kbd->adjust);
|
|
||||||
}
|
|
||||||
if (t == kbd->len)
|
if (t == kbd->len)
|
||||||
{
|
{
|
||||||
kbd->animator = NULL;
|
kbd->animator = NULL;
|
||||||
|
@ -115,7 +111,7 @@ _e_kbd_free(E_Kbd *kbd)
|
||||||
// FIXME: thought right - on shutdoiwn, this might point to freed data
|
// FIXME: thought right - on shutdoiwn, this might point to freed data
|
||||||
// if (kbd->border) kbd->border->stolen = 0;
|
// if (kbd->border) kbd->border->stolen = 0;
|
||||||
EINA_LIST_FREE(kbd->waiting_borders, bd)
|
EINA_LIST_FREE(kbd->waiting_borders, bd)
|
||||||
bd->stolen = 0;
|
bd->stolen = 0;
|
||||||
free(kbd);
|
free(kbd);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -133,7 +129,7 @@ _e_kbd_slide(E_Kbd *kbd, int visible, double len)
|
||||||
kbd->animator = ecore_animator_add(_e_kbd_cb_animate, kbd);
|
kbd->animator = ecore_animator_add(_e_kbd_cb_animate, kbd);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
_e_kbd_hide(E_Kbd *kbd)
|
_e_kbd_hide(E_Kbd *kbd)
|
||||||
{
|
{
|
||||||
if (kbd->visible) return;
|
if (kbd->visible) return;
|
||||||
|
@ -159,11 +155,8 @@ _e_kbd_border_is_keyboard(E_Border *bd)
|
||||||
(((bd->client.icccm.title) && (!strcmp(bd->client.icccm.title, "Keyboard"))) ||
|
(((bd->client.icccm.title) && (!strcmp(bd->client.icccm.title, "Keyboard"))) ||
|
||||||
((bd->client.icccm.name) && ((!strcmp(bd->client.icccm.name, "multitap-pad")))))
|
((bd->client.icccm.name) && ((!strcmp(bd->client.icccm.name, "multitap-pad")))))
|
||||||
&& (bd->client.netwm.state.skip_taskbar)
|
&& (bd->client.netwm.state.skip_taskbar)
|
||||||
&& (bd->client.netwm.state.skip_pager)
|
&& (bd->client.netwm.state.skip_pager)))
|
||||||
)
|
|
||||||
)
|
|
||||||
return 1;
|
return 1;
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -190,7 +183,7 @@ _e_kbd_by_border_get(E_Border *bd)
|
||||||
Eina_List *l, *l2;
|
Eina_List *l, *l2;
|
||||||
E_Border *over;
|
E_Border *over;
|
||||||
E_Kbd *kbd;
|
E_Kbd *kbd;
|
||||||
|
|
||||||
if (!bd->stolen) return NULL;
|
if (!bd->stolen) return NULL;
|
||||||
EINA_LIST_FOREACH(kbds, l, kbd)
|
EINA_LIST_FOREACH(kbds, l, kbd)
|
||||||
{
|
{
|
||||||
|
@ -205,7 +198,7 @@ static int
|
||||||
_e_kbd_cb_delayed_hide(void *data)
|
_e_kbd_cb_delayed_hide(void *data)
|
||||||
{
|
{
|
||||||
E_Kbd *kbd;
|
E_Kbd *kbd;
|
||||||
|
|
||||||
kbd = data;
|
kbd = data;
|
||||||
_e_kbd_hide(kbd);
|
_e_kbd_hide(kbd);
|
||||||
kbd->delay_hide = NULL;
|
kbd->delay_hide = NULL;
|
||||||
|
@ -216,74 +209,76 @@ static void
|
||||||
_e_kbd_all_enable(void)
|
_e_kbd_all_enable(void)
|
||||||
{
|
{
|
||||||
Eina_List *l;
|
Eina_List *l;
|
||||||
E_Kbd *kbd;
|
E_Kbd *kbd;
|
||||||
|
|
||||||
EINA_LIST_FOREACH(kbds, l, kbd)
|
EINA_LIST_FOREACH(kbds, l, kbd)
|
||||||
e_kbd_enable(kbd);
|
e_kbd_enable(kbd);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
_e_kbd_all_disable(void)
|
_e_kbd_all_disable(void)
|
||||||
{
|
{
|
||||||
Eina_List *l;
|
Eina_List *l;
|
||||||
E_Kbd *kbd;
|
E_Kbd *kbd;
|
||||||
|
|
||||||
EINA_LIST_FOREACH(kbds, l, kbd)
|
EINA_LIST_FOREACH(kbds, l, kbd)
|
||||||
e_kbd_disable(kbd);
|
e_kbd_disable(kbd);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
_e_kbd_all_show(void)
|
_e_kbd_all_show(void)
|
||||||
{
|
{
|
||||||
Eina_List *l;
|
Eina_List *l;
|
||||||
E_Kbd *kbd;
|
E_Kbd *kbd;
|
||||||
|
|
||||||
EINA_LIST_FOREACH(kbds, l, kbd)
|
EINA_LIST_FOREACH(kbds, l, kbd)
|
||||||
e_kbd_show(kbd);
|
e_kbd_show(kbd);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
_e_kbd_all_layout_set(E_Kbd_Layout layout)
|
_e_kbd_all_layout_set(E_Kbd_Layout layout)
|
||||||
{
|
{
|
||||||
Eina_List *l;
|
Eina_List *l;
|
||||||
E_Kbd *kbd;
|
E_Kbd *kbd;
|
||||||
|
|
||||||
EINA_LIST_FOREACH(kbds, l, kbd)
|
EINA_LIST_FOREACH(kbds, l, kbd)
|
||||||
e_kbd_layout_set(kbd, layout);
|
e_kbd_layout_set(kbd, layout);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
_e_kbd_all_hide(void)
|
_e_kbd_all_hide(void)
|
||||||
{
|
{
|
||||||
Eina_List *l;
|
Eina_List *l;
|
||||||
E_Kbd *kbd;
|
E_Kbd *kbd;
|
||||||
|
|
||||||
EINA_LIST_FOREACH(kbds, l, kbd)
|
EINA_LIST_FOREACH(kbds, l, kbd)
|
||||||
e_kbd_hide(kbd);
|
e_kbd_hide(kbd);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
_e_kbd_all_toggle(void)
|
_e_kbd_all_toggle(void)
|
||||||
{
|
{
|
||||||
Eina_List *l;
|
Eina_List *l;
|
||||||
E_Kbd *kbd;
|
E_Kbd *kbd;
|
||||||
|
|
||||||
EINA_LIST_FOREACH(kbds, l, kbd)
|
EINA_LIST_FOREACH(kbds, l, kbd)
|
||||||
if (kbd->visible) e_kbd_hide(kbd);
|
{
|
||||||
else e_kbd_show(kbd);
|
if (kbd->visible) e_kbd_hide(kbd);
|
||||||
|
else e_kbd_show(kbd);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static int
|
static int
|
||||||
_e_kbd_cb_client_message(void *data, int type, void *event)
|
_e_kbd_cb_client_message(void *data, int type, void *event)
|
||||||
{
|
{
|
||||||
Ecore_X_Event_Client_Message *ev;
|
Ecore_X_Event_Client_Message *ev;
|
||||||
|
|
||||||
ev = event;
|
ev = event;
|
||||||
if ((ev->win == ecore_x_window_root_first_get()) &&
|
if ((ev->win == ecore_x_window_root_first_get()) &&
|
||||||
((ev->message_type == atom_mb_im_invoker_command) ||
|
((ev->message_type == atom_mb_im_invoker_command) ||
|
||||||
(ev->message_type == atom_mtp_im_invoker_command)))
|
(ev->message_type == atom_mtp_im_invoker_command)))
|
||||||
{
|
{
|
||||||
if (ev->data.l[0] == 1) _e_kbd_all_show();
|
if (ev->data.l[0] == 1) _e_kbd_all_show();
|
||||||
else if (ev->data.l[0] == 2) _e_kbd_all_hide();
|
else if (ev->data.l[0] == 2) _e_kbd_all_hide();
|
||||||
else if (ev->data.l[0] == 3) _e_kbd_all_toggle();
|
else if (ev->data.l[0] == 3) _e_kbd_all_toggle();
|
||||||
}
|
}
|
||||||
|
@ -294,7 +289,7 @@ static int
|
||||||
_e_kbd_cb_border_add(void *data, int type, void *event)
|
_e_kbd_cb_border_add(void *data, int type, void *event)
|
||||||
{
|
{
|
||||||
E_Event_Border_Add *ev;
|
E_Event_Border_Add *ev;
|
||||||
|
|
||||||
ev = event;
|
ev = event;
|
||||||
// nothing - border hooks do this
|
// nothing - border hooks do this
|
||||||
return 1;
|
return 1;
|
||||||
|
@ -305,7 +300,7 @@ _e_kbd_cb_border_remove(void *data, int type, void *event)
|
||||||
{
|
{
|
||||||
E_Event_Border_Remove *ev;
|
E_Event_Border_Remove *ev;
|
||||||
E_Kbd *kbd;
|
E_Kbd *kbd;
|
||||||
|
|
||||||
ev = event;
|
ev = event;
|
||||||
if (ev->border == focused_border)
|
if (ev->border == focused_border)
|
||||||
{
|
{
|
||||||
|
@ -322,7 +317,7 @@ _e_kbd_cb_border_remove(void *data, int type, void *event)
|
||||||
if (kbd->waiting_borders)
|
if (kbd->waiting_borders)
|
||||||
{
|
{
|
||||||
E_Border *bd;
|
E_Border *bd;
|
||||||
|
|
||||||
bd = kbd->waiting_borders->data;
|
bd = kbd->waiting_borders->data;
|
||||||
kbd->waiting_borders = eina_list_remove_list(kbd->waiting_borders, kbd->waiting_borders);
|
kbd->waiting_borders = eina_list_remove_list(kbd->waiting_borders, kbd->waiting_borders);
|
||||||
_e_kbd_border_adopt(kbd, bd);
|
_e_kbd_border_adopt(kbd, bd);
|
||||||
|
@ -345,7 +340,7 @@ static int
|
||||||
_e_kbd_cb_border_focus_in(void *data, int type, void *event)
|
_e_kbd_cb_border_focus_in(void *data, int type, void *event)
|
||||||
{
|
{
|
||||||
E_Event_Border_Focus_In *ev;
|
E_Event_Border_Focus_In *ev;
|
||||||
|
|
||||||
ev = event;
|
ev = event;
|
||||||
if (_e_kbd_by_border_get(ev->border)) return 1;
|
if (_e_kbd_by_border_get(ev->border)) return 1;
|
||||||
// FIXME: if ev->border->client.vkbd.state == 0 then this app doesnt know
|
// FIXME: if ev->border->client.vkbd.state == 0 then this app doesnt know
|
||||||
|
@ -356,8 +351,7 @@ _e_kbd_cb_border_focus_in(void *data, int type, void *event)
|
||||||
else e_kbd_fullscreen_set(ev->border->zone, 0);
|
else e_kbd_fullscreen_set(ev->border->zone, 0);
|
||||||
focused_border = ev->border;
|
focused_border = ev->border;
|
||||||
focused_vkbd_state = ev->border->client.vkbd.state;
|
focused_vkbd_state = ev->border->client.vkbd.state;
|
||||||
if (ev->border->client.vkbd.state == 0)
|
if (ev->border->client.vkbd.state == 0) return 1;
|
||||||
return 1;
|
|
||||||
if (ev->border->client.vkbd.state == ECORE_X_VIRTUAL_KEYBOARD_STATE_OFF)
|
if (ev->border->client.vkbd.state == ECORE_X_VIRTUAL_KEYBOARD_STATE_OFF)
|
||||||
{
|
{
|
||||||
_e_kbd_all_layout_set(E_KBD_LAYOUT_NONE);
|
_e_kbd_all_layout_set(E_KBD_LAYOUT_NONE);
|
||||||
|
@ -405,7 +399,7 @@ static int
|
||||||
_e_kbd_cb_border_property(void *data, int type, void *event)
|
_e_kbd_cb_border_property(void *data, int type, void *event)
|
||||||
{
|
{
|
||||||
E_Event_Border_Property *ev;
|
E_Event_Border_Property *ev;
|
||||||
|
|
||||||
ev = event;
|
ev = event;
|
||||||
if (_e_kbd_by_border_get(ev->border)) return 1;
|
if (_e_kbd_by_border_get(ev->border)) return 1;
|
||||||
if (!ev->border->focused) return 1;
|
if (!ev->border->focused) return 1;
|
||||||
|
@ -448,16 +442,19 @@ _e_kbd_cb_border_property(void *data, int type, void *event)
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
_e_kbd_cb_border_hook_pre_post_fetch(void *data, E_Border *bd)
|
_e_kbd_cb_border_hook_pre_post_fetch(void *data, void *data2)
|
||||||
{
|
{
|
||||||
|
E_Border *bd;
|
||||||
|
|
||||||
|
if (!(bd = data2)) return;
|
||||||
// check if bd has special kbd properites - if so, store in created kbd
|
// check if bd has special kbd properites - if so, store in created kbd
|
||||||
if (!bd->new_client) return;
|
if (!bd->new_client) return;
|
||||||
if (_e_kbd_by_border_get(bd)) return;
|
if (_e_kbd_by_border_get(bd)) return;
|
||||||
if (_e_kbd_border_is_keyboard(bd))
|
if (_e_kbd_border_is_keyboard(bd))
|
||||||
{
|
{
|
||||||
Eina_List *l;
|
Eina_List *l;
|
||||||
E_Kbd *kbd;
|
E_Kbd *kbd;
|
||||||
|
|
||||||
EINA_LIST_FOREACH(kbds, l, kbd)
|
EINA_LIST_FOREACH(kbds, l, kbd)
|
||||||
{
|
{
|
||||||
if (!kbd->border)
|
if (!kbd->border)
|
||||||
|
@ -503,42 +500,47 @@ _e_kbd_cb_border_hook_pre_post_fetch(void *data, E_Border *bd)
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
_e_kbd_cb_border_hook_post_fetch(void *data, E_Border *bd)
|
_e_kbd_cb_border_hook_post_fetch(void *data, void *data2)
|
||||||
{
|
{
|
||||||
|
E_Border *bd;
|
||||||
|
|
||||||
|
if (!(bd = data2)) return;
|
||||||
// nothing - all done in _e_kbd_cb_border_hook_pre_post_fetch()
|
// nothing - all done in _e_kbd_cb_border_hook_pre_post_fetch()
|
||||||
if (!_e_kbd_by_border_get(bd)) return;
|
if (!_e_kbd_by_border_get(bd)) return;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
_e_kbd_cb_border_hook_post_border_assign(void *data, E_Border *bd)
|
_e_kbd_cb_border_hook_post_border_assign(void *data, void *data2)
|
||||||
{
|
{
|
||||||
|
E_Border *bd;
|
||||||
E_Kbd *kbd;
|
E_Kbd *kbd;
|
||||||
int pbx, pby, pbw, pbh;
|
int pbx, pby, pbw, pbh;
|
||||||
|
|
||||||
|
if (!(bd = data2)) return;
|
||||||
kbd = _e_kbd_by_border_get(bd);
|
kbd = _e_kbd_by_border_get(bd);
|
||||||
if (!kbd) return;
|
if (!kbd) return;
|
||||||
|
|
||||||
pbx = bd->x;
|
pbx = bd->x;
|
||||||
pby = bd->y;
|
pby = bd->y;
|
||||||
pbw = bd->w;
|
pbw = bd->w;
|
||||||
pbh = bd->h;
|
pbh = bd->h;
|
||||||
|
|
||||||
bd->lock_border = 1;
|
bd->lock_border = 1;
|
||||||
|
|
||||||
bd->lock_client_location = 1;
|
bd->lock_client_location = 1;
|
||||||
bd->lock_client_size = 1;
|
bd->lock_client_size = 1;
|
||||||
bd->lock_client_desk = 1;
|
bd->lock_client_desk = 1;
|
||||||
bd->lock_client_sticky = 1;
|
bd->lock_client_sticky = 1;
|
||||||
bd->lock_client_shade = 1;
|
bd->lock_client_shade = 1;
|
||||||
bd->lock_client_maximize = 1;
|
bd->lock_client_maximize = 1;
|
||||||
|
|
||||||
bd->lock_user_location = 1;
|
bd->lock_user_location = 1;
|
||||||
bd->lock_user_size = 1;
|
bd->lock_user_size = 1;
|
||||||
bd->lock_user_desk = 1;
|
bd->lock_user_desk = 1;
|
||||||
bd->lock_user_sticky = 1;
|
bd->lock_user_sticky = 1;
|
||||||
bd->lock_user_shade = 1;
|
bd->lock_user_shade = 1;
|
||||||
bd->lock_user_maximize = 1;
|
bd->lock_user_maximize = 1;
|
||||||
|
|
||||||
bd->client.icccm.accepts_focus = 0;
|
bd->client.icccm.accepts_focus = 0;
|
||||||
bd->client.icccm.take_focus = 0;
|
bd->client.icccm.take_focus = 0;
|
||||||
|
|
||||||
|
@ -546,10 +548,10 @@ _e_kbd_cb_border_hook_post_border_assign(void *data, E_Border *bd)
|
||||||
bd->h = bd->h;
|
bd->h = bd->h;
|
||||||
bd->x = bd->zone->x;
|
bd->x = bd->zone->x;
|
||||||
bd->y = bd->zone->y + bd->zone->h - bd->h;
|
bd->y = bd->zone->y + bd->zone->h - bd->h;
|
||||||
|
|
||||||
bd->client.w = bd->w - bd->client_inset.l - bd->client_inset.r;
|
bd->client.w = bd->w - bd->client_inset.l - bd->client_inset.r;
|
||||||
bd->client.h = bd->h - bd->client_inset.t - bd->client_inset.b;
|
bd->client.h = bd->h - bd->client_inset.t - bd->client_inset.b;
|
||||||
|
|
||||||
bd->changes.size = 1;
|
bd->changes.size = 1;
|
||||||
bd->placed = 1;
|
bd->placed = 1;
|
||||||
|
|
||||||
|
@ -591,10 +593,12 @@ _e_kbd_cb_border_hook_post_border_assign(void *data, E_Border *bd)
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
_e_kbd_cb_border_hook_end(void *data, E_Border *bd)
|
_e_kbd_cb_border_hook_end(void *data, void *data2)
|
||||||
{
|
{
|
||||||
|
E_Border *bd;
|
||||||
E_Kbd *kbd;
|
E_Kbd *kbd;
|
||||||
|
|
||||||
|
if (!(bd = data2)) return;
|
||||||
kbd = _e_kbd_by_border_get(bd);
|
kbd = _e_kbd_by_border_get(bd);
|
||||||
if (!kbd) return;
|
if (!kbd) return;
|
||||||
if (kbd->border == bd)
|
if (kbd->border == bd)
|
||||||
|
@ -614,15 +618,24 @@ _e_kbd_layout_send(E_Kbd *kbd)
|
||||||
if ((kbd->actually_visible) && (!kbd->disabled))
|
if ((kbd->actually_visible) && (!kbd->disabled))
|
||||||
{
|
{
|
||||||
type = ECORE_X_VIRTUAL_KEYBOARD_STATE_ON;
|
type = ECORE_X_VIRTUAL_KEYBOARD_STATE_ON;
|
||||||
if (kbd->layout == E_KBD_LAYOUT_DEFAULT) type = ECORE_X_VIRTUAL_KEYBOARD_STATE_ON;
|
if (kbd->layout == E_KBD_LAYOUT_DEFAULT)
|
||||||
else if (kbd->layout == E_KBD_LAYOUT_ALPHA) type = ECORE_X_VIRTUAL_KEYBOARD_STATE_ALPHA;
|
type = ECORE_X_VIRTUAL_KEYBOARD_STATE_ON;
|
||||||
else if (kbd->layout == E_KBD_LAYOUT_NUMERIC) type = ECORE_X_VIRTUAL_KEYBOARD_STATE_NUMERIC;
|
else if (kbd->layout == E_KBD_LAYOUT_ALPHA)
|
||||||
else if (kbd->layout == E_KBD_LAYOUT_PIN) type = ECORE_X_VIRTUAL_KEYBOARD_STATE_PIN;
|
type = ECORE_X_VIRTUAL_KEYBOARD_STATE_ALPHA;
|
||||||
else if (kbd->layout == E_KBD_LAYOUT_PHONE_NUMBER) type = ECORE_X_VIRTUAL_KEYBOARD_STATE_PHONE_NUMBER;
|
else if (kbd->layout == E_KBD_LAYOUT_NUMERIC)
|
||||||
else if (kbd->layout == E_KBD_LAYOUT_HEX) type = ECORE_X_VIRTUAL_KEYBOARD_STATE_HEX;
|
type = ECORE_X_VIRTUAL_KEYBOARD_STATE_NUMERIC;
|
||||||
else if (kbd->layout == E_KBD_LAYOUT_TERMINAL) type = ECORE_X_VIRTUAL_KEYBOARD_STATE_TERMINAL;
|
else if (kbd->layout == E_KBD_LAYOUT_PIN)
|
||||||
else if (kbd->layout == E_KBD_LAYOUT_PASSWORD) type = ECORE_X_VIRTUAL_KEYBOARD_STATE_PASSWORD;
|
type = ECORE_X_VIRTUAL_KEYBOARD_STATE_PIN;
|
||||||
else if (kbd->layout == E_KBD_LAYOUT_NONE) type = ECORE_X_VIRTUAL_KEYBOARD_STATE_OFF;
|
else if (kbd->layout == E_KBD_LAYOUT_PHONE_NUMBER)
|
||||||
|
type = ECORE_X_VIRTUAL_KEYBOARD_STATE_PHONE_NUMBER;
|
||||||
|
else if (kbd->layout == E_KBD_LAYOUT_HEX)
|
||||||
|
type = ECORE_X_VIRTUAL_KEYBOARD_STATE_HEX;
|
||||||
|
else if (kbd->layout == E_KBD_LAYOUT_TERMINAL)
|
||||||
|
type = ECORE_X_VIRTUAL_KEYBOARD_STATE_TERMINAL;
|
||||||
|
else if (kbd->layout == E_KBD_LAYOUT_PASSWORD)
|
||||||
|
type = ECORE_X_VIRTUAL_KEYBOARD_STATE_PASSWORD;
|
||||||
|
else if (kbd->layout == E_KBD_LAYOUT_NONE)
|
||||||
|
type = ECORE_X_VIRTUAL_KEYBOARD_STATE_OFF;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
type = ECORE_X_VIRTUAL_KEYBOARD_STATE_OFF;
|
type = ECORE_X_VIRTUAL_KEYBOARD_STATE_OFF;
|
||||||
|
@ -669,7 +682,7 @@ _e_kbd_dbus_keyboard_add(const char *udi)
|
||||||
{
|
{
|
||||||
const char *str;
|
const char *str;
|
||||||
Eina_List *l;
|
Eina_List *l;
|
||||||
|
|
||||||
EINA_LIST_FOREACH(_e_kbd_dbus_keyboards, l, str)
|
EINA_LIST_FOREACH(_e_kbd_dbus_keyboards, l, str)
|
||||||
if (!strcmp(str, udi)) return;
|
if (!strcmp(str, udi)) return;
|
||||||
|
|
||||||
|
@ -682,14 +695,14 @@ _e_kbd_dbus_keyboard_del(const char *udi)
|
||||||
{
|
{
|
||||||
Eina_List *l;
|
Eina_List *l;
|
||||||
char *str;
|
char *str;
|
||||||
|
|
||||||
EINA_LIST_FOREACH(_e_kbd_dbus_keyboards, l, str)
|
EINA_LIST_FOREACH(_e_kbd_dbus_keyboards, l, str)
|
||||||
if (!strcmp(str, udi))
|
if (!strcmp(str, udi))
|
||||||
{
|
{
|
||||||
eina_stringshare_del(str);
|
eina_stringshare_del(str);
|
||||||
_e_kbd_dbus_keyboards = eina_list_remove_list(_e_kbd_dbus_keyboards, l);
|
_e_kbd_dbus_keyboards = eina_list_remove_list(_e_kbd_dbus_keyboards, l);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
|
@ -698,15 +711,15 @@ _e_kbd_dbus_keyboard_eval(void)
|
||||||
int have_real = 0;
|
int have_real = 0;
|
||||||
Eina_List *l, *ll;
|
Eina_List *l, *ll;
|
||||||
const char *g, *gg;
|
const char *g, *gg;
|
||||||
|
|
||||||
have_real = eina_list_count(_e_kbd_dbus_keyboards);
|
have_real = eina_list_count(_e_kbd_dbus_keyboards);
|
||||||
EINA_LIST_FOREACH(_e_kbd_dbus_keyboards, l, g)
|
EINA_LIST_FOREACH(_e_kbd_dbus_keyboards, l, g)
|
||||||
EINA_LIST_FOREACH(_e_kbd_dbus_real_ignore, ll, gg)
|
EINA_LIST_FOREACH(_e_kbd_dbus_real_ignore, ll, gg)
|
||||||
if (e_util_glob_match(g, gg))
|
if (e_util_glob_match(g, gg))
|
||||||
{
|
{
|
||||||
have_real--;
|
have_real--;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (have_real != _e_kbd_dbus_have_real_keyboard)
|
if (have_real != _e_kbd_dbus_have_real_keyboard)
|
||||||
{
|
{
|
||||||
|
@ -724,15 +737,15 @@ _e_kbd_dbus_cb_dev_input_keyboard(void *user_data, void *reply_data, DBusError *
|
||||||
E_Hal_Manager_Find_Device_By_Capability_Return *ret = reply_data;
|
E_Hal_Manager_Find_Device_By_Capability_Return *ret = reply_data;
|
||||||
Eina_List *l;
|
Eina_List *l;
|
||||||
char *device;
|
char *device;
|
||||||
|
|
||||||
if (!ret || !ret->strings) return;
|
if ((!ret) || (!ret->strings)) return;
|
||||||
|
|
||||||
if (dbus_error_is_set(error))
|
if (dbus_error_is_set(error))
|
||||||
{
|
{
|
||||||
dbus_error_free(error);
|
dbus_error_free(error);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
EINA_LIST_FOREACH(ret->strings, l, device)
|
EINA_LIST_FOREACH(ret->strings, l, device)
|
||||||
{
|
{
|
||||||
_e_kbd_dbus_keyboard_add(device);
|
_e_kbd_dbus_keyboard_add(device);
|
||||||
|
@ -745,21 +758,19 @@ _e_kbd_dbus_cb_input_keyboard_is(void *user_data, void *reply_data, DBusError *e
|
||||||
{
|
{
|
||||||
char *udi = user_data;
|
char *udi = user_data;
|
||||||
E_Hal_Device_Query_Capability_Return *ret = reply_data;
|
E_Hal_Device_Query_Capability_Return *ret = reply_data;
|
||||||
|
|
||||||
if (dbus_error_is_set(error))
|
if (dbus_error_is_set(error))
|
||||||
{
|
{
|
||||||
dbus_error_free(error);
|
dbus_error_free(error);
|
||||||
goto error;
|
free(udi);
|
||||||
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (ret && ret->boolean)
|
if ((ret) && (ret->boolean))
|
||||||
{
|
{
|
||||||
_e_kbd_dbus_keyboard_add(udi);
|
_e_kbd_dbus_keyboard_add(udi);
|
||||||
_e_kbd_dbus_keyboard_eval();
|
_e_kbd_dbus_keyboard_eval();
|
||||||
}
|
}
|
||||||
|
|
||||||
error:
|
|
||||||
free(udi);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
|
@ -768,7 +779,7 @@ _e_kbd_dbus_cb_dev_add(void *data, DBusMessage *msg)
|
||||||
DBusError err;
|
DBusError err;
|
||||||
char *udi;
|
char *udi;
|
||||||
int ret;
|
int ret;
|
||||||
|
|
||||||
dbus_error_init(&err);
|
dbus_error_init(&err);
|
||||||
dbus_message_get_args(msg, &err, DBUS_TYPE_STRING, &udi, DBUS_TYPE_INVALID);
|
dbus_message_get_args(msg, &err, DBUS_TYPE_STRING, &udi, DBUS_TYPE_INVALID);
|
||||||
udi = strdup(udi);
|
udi = strdup(udi);
|
||||||
|
@ -782,7 +793,7 @@ _e_kbd_dbus_cb_dev_del(void *data, DBusMessage *msg)
|
||||||
{
|
{
|
||||||
DBusError err;
|
DBusError err;
|
||||||
char *udi;
|
char *udi;
|
||||||
|
|
||||||
dbus_error_init(&err);
|
dbus_error_init(&err);
|
||||||
dbus_message_get_args(msg, &err, DBUS_TYPE_STRING, &udi, DBUS_TYPE_INVALID);
|
dbus_message_get_args(msg, &err, DBUS_TYPE_STRING, &udi, DBUS_TYPE_INVALID);
|
||||||
_e_kbd_dbus_keyboard_del(udi);
|
_e_kbd_dbus_keyboard_del(udi);
|
||||||
|
@ -794,7 +805,7 @@ _e_kbd_dbus_cb_cap_add(void *data, DBusMessage *msg)
|
||||||
{
|
{
|
||||||
DBusError err;
|
DBusError err;
|
||||||
char *udi, *capability;
|
char *udi, *capability;
|
||||||
|
|
||||||
dbus_error_init(&err);
|
dbus_error_init(&err);
|
||||||
dbus_message_get_args(msg, &err, DBUS_TYPE_STRING, &udi, DBUS_TYPE_STRING,
|
dbus_message_get_args(msg, &err, DBUS_TYPE_STRING, &udi, DBUS_TYPE_STRING,
|
||||||
&capability, DBUS_TYPE_INVALID);
|
&capability, DBUS_TYPE_INVALID);
|
||||||
|
@ -810,14 +821,13 @@ _e_kbd_dbus_ignore_keyboards_file_load(const char *file)
|
||||||
{
|
{
|
||||||
char buf[4096];
|
char buf[4096];
|
||||||
FILE *f;
|
FILE *f;
|
||||||
|
|
||||||
f = fopen(file, "r");
|
if (!(f = fopen(file, "r"))) return;
|
||||||
if (!f) return;
|
|
||||||
while (fgets(buf, sizeof(buf), f))
|
while (fgets(buf, sizeof(buf), f))
|
||||||
{
|
{
|
||||||
char *p;
|
char *p;
|
||||||
int len;
|
int len;
|
||||||
|
|
||||||
if (buf[0] == '#') continue;
|
if (buf[0] == '#') continue;
|
||||||
len = strlen(buf);
|
len = strlen(buf);
|
||||||
if (len > 0)
|
if (len > 0)
|
||||||
|
@ -837,9 +847,11 @@ static void
|
||||||
_e_kbd_dbus_ignore_keyboards_load(void)
|
_e_kbd_dbus_ignore_keyboards_load(void)
|
||||||
{
|
{
|
||||||
char buf[PATH_MAX];
|
char buf[PATH_MAX];
|
||||||
|
|
||||||
e_user_dir_concat_static(buf, "keyboards/ignore_built_in_keyboards");
|
e_user_dir_concat_static(buf, "keyboards/ignore_built_in_keyboards");
|
||||||
_e_kbd_dbus_ignore_keyboards_file_load(buf);
|
_e_kbd_dbus_ignore_keyboards_file_load(buf);
|
||||||
snprintf(buf, sizeof(buf), "%s/keyboards/ignore_built_in_keyboards", e_module_dir_get(mod));
|
snprintf(buf, sizeof(buf), "%s/keyboards/ignore_built_in_keyboards",
|
||||||
|
e_module_dir_get(mod));
|
||||||
_e_kbd_dbus_ignore_keyboards_file_load(buf);
|
_e_kbd_dbus_ignore_keyboards_file_load(buf);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -847,13 +859,12 @@ static void
|
||||||
_e_kbd_dbus_real_kbd_init(void)
|
_e_kbd_dbus_real_kbd_init(void)
|
||||||
{
|
{
|
||||||
_e_kbd_dbus_have_real_keyboard = 0;
|
_e_kbd_dbus_have_real_keyboard = 0;
|
||||||
|
|
||||||
_e_kbd_dbus_ignore_keyboards_load();
|
_e_kbd_dbus_ignore_keyboards_load();
|
||||||
|
|
||||||
_e_kbd_dbus_conn = e_dbus_bus_get(DBUS_BUS_SYSTEM);
|
_e_kbd_dbus_conn = e_dbus_bus_get(DBUS_BUS_SYSTEM);
|
||||||
if (_e_kbd_dbus_conn)
|
if (_e_kbd_dbus_conn)
|
||||||
{
|
{
|
||||||
|
|
||||||
e_hal_manager_find_device_by_capability(_e_kbd_dbus_conn, "input.keyboard",
|
e_hal_manager_find_device_by_capability(_e_kbd_dbus_conn, "input.keyboard",
|
||||||
_e_kbd_dbus_cb_dev_input_keyboard, NULL);
|
_e_kbd_dbus_cb_dev_input_keyboard, NULL);
|
||||||
|
|
||||||
|
@ -949,7 +960,7 @@ e_kbd_init(E_Module *m)
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
EAPI int
|
EAPI int
|
||||||
e_kbd_shutdown(void)
|
e_kbd_shutdown(void)
|
||||||
{
|
{
|
||||||
E_Border_Hook *bh;
|
E_Border_Hook *bh;
|
||||||
|
@ -971,7 +982,7 @@ EAPI E_Kbd *
|
||||||
e_kbd_new(E_Zone *zone, const char *themedir, const char *syskbds, const char *sysdicts)
|
e_kbd_new(E_Zone *zone, const char *themedir, const char *syskbds, const char *sysdicts)
|
||||||
{
|
{
|
||||||
E_Kbd *kbd;
|
E_Kbd *kbd;
|
||||||
|
|
||||||
kbd = E_OBJECT_ALLOC(E_Kbd, E_KBD_TYPE, _e_kbd_free);
|
kbd = E_OBJECT_ALLOC(E_Kbd, E_KBD_TYPE, _e_kbd_free);
|
||||||
if (!kbd) return NULL;
|
if (!kbd) return NULL;
|
||||||
kbds = eina_list_append(kbds, kbd);
|
kbds = eina_list_append(kbds, kbd);
|
||||||
|
@ -1063,7 +1074,7 @@ e_kbd_safe_app_region_get(E_Zone *zone, int *x, int *y, int *w, int *h)
|
||||||
for (l = kbds; l; l = l->next)
|
for (l = kbds; l; l = l->next)
|
||||||
{
|
{
|
||||||
E_Kbd *kbd;
|
E_Kbd *kbd;
|
||||||
|
|
||||||
kbd = l->data;
|
kbd = l->data;
|
||||||
if ((kbd->border) && (kbd->border->zone == zone))
|
if ((kbd->border) && (kbd->border->zone == zone))
|
||||||
{
|
{
|
||||||
|
@ -1085,17 +1096,15 @@ EAPI void
|
||||||
e_kbd_fullscreen_set(E_Zone *zone, int fullscreen)
|
e_kbd_fullscreen_set(E_Zone *zone, int fullscreen)
|
||||||
{
|
{
|
||||||
Eina_List *l;
|
Eina_List *l;
|
||||||
E_Kbd *kbd;
|
E_Kbd *kbd;
|
||||||
|
|
||||||
EINA_LIST_FOREACH(kbds, l, kbd)
|
|
||||||
if ((!!fullscreen) != kbd->fullscreen)
|
|
||||||
{
|
|
||||||
kbd->fullscreen = fullscreen;
|
|
||||||
if (kbd->fullscreen)
|
|
||||||
e_border_layer_set(kbd->border, 250);
|
|
||||||
else
|
|
||||||
e_border_layer_set(kbd->border, 100);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
#endif
|
EINA_LIST_FOREACH(kbds, l, kbd)
|
||||||
|
if ((!!fullscreen) != kbd->fullscreen)
|
||||||
|
{
|
||||||
|
kbd->fullscreen = fullscreen;
|
||||||
|
if (kbd->fullscreen)
|
||||||
|
e_border_layer_set(kbd->border, 250);
|
||||||
|
else
|
||||||
|
e_border_layer_set(kbd->border, 100);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
|
@ -20,22 +20,21 @@ typedef enum _E_Kbd_Layout
|
||||||
|
|
||||||
struct _E_Kbd
|
struct _E_Kbd
|
||||||
{
|
{
|
||||||
E_Object e_obj_inherit;
|
E_Object e_obj_inherit;
|
||||||
E_Win *win;
|
E_Win *win;
|
||||||
E_Border *border;
|
E_Border *border;
|
||||||
Ecore_Timer *delay_hide;
|
Ecore_Timer *delay_hide;
|
||||||
Ecore_Animator *animator;
|
Ecore_Animator *animator;
|
||||||
Eina_List *waiting_borders;
|
Eina_List *waiting_borders;
|
||||||
E_Kbd_Layout layout;
|
E_Kbd_Layout layout;
|
||||||
double start, len;
|
double start, len;
|
||||||
|
|
||||||
int h;
|
int h, adjust_start, adjust, adjust_end;
|
||||||
int adjust_start, adjust, adjust_end;
|
|
||||||
|
unsigned char visible : 1;
|
||||||
unsigned char visible : 1;
|
unsigned char actually_visible : 1;
|
||||||
unsigned char actually_visible : 1;
|
unsigned char disabled : 1; // if we have a real kbd plugged in
|
||||||
unsigned char disabled : 1; // if we have a real kbd plugged in
|
unsigned char fullscreen : 1;
|
||||||
unsigned char fullscreen : 1;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
EAPI int e_kbd_init(E_Module *m);
|
EAPI int e_kbd_init(E_Module *m);
|
||||||
|
|
|
@ -181,7 +181,7 @@ Eina_Bool
|
||||||
illume_border_is_bottom_panel(E_Border *bd)
|
illume_border_is_bottom_panel(E_Border *bd)
|
||||||
{
|
{
|
||||||
if ((bd->client.netwm.type == ECORE_X_WINDOW_TYPE_DOCK) ||
|
if ((bd->client.netwm.type == ECORE_X_WINDOW_TYPE_DOCK) ||
|
||||||
(bd->client.qtopia.soft_menu))
|
(bd->client.qtopia.soft_menu))
|
||||||
return 1;
|
return 1;
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
|
@ -22,12 +22,12 @@ struct _Illume_Layout_Mode
|
||||||
// may need more things later, but name + label will do for now
|
// may need more things later, but name + label will do for now
|
||||||
struct {
|
struct {
|
||||||
// ---
|
// ---
|
||||||
void (*border_add) (E_Border *bd);
|
void (*border_add) (E_Border *bd);
|
||||||
void (*border_del) (E_Border *bd);
|
void (*border_del) (E_Border *bd);
|
||||||
void (*border_focus_in) (E_Border *bd);
|
void (*border_focus_in) (E_Border *bd);
|
||||||
void (*border_focus_out) (E_Border *bd);
|
void (*border_focus_out) (E_Border *bd);
|
||||||
// ---
|
// ---
|
||||||
void (*zone_layout) (E_Zone *zone);
|
void (*zone_layout) (E_Zone *zone);
|
||||||
void (*zone_move_resize) (E_Zone *zone);
|
void (*zone_move_resize) (E_Zone *zone);
|
||||||
// --- add more below (activate callback, and more)
|
// --- add more below (activate callback, and more)
|
||||||
} funcs;
|
} funcs;
|
||||||
|
@ -35,7 +35,7 @@ struct _Illume_Layout_Mode
|
||||||
|
|
||||||
void illume_layout_mode_register(const Illume_Layout_Mode *laymode);
|
void illume_layout_mode_register(const Illume_Layout_Mode *laymode);
|
||||||
void illume_layout_mode_unregister(const Illume_Layout_Mode *laymode);
|
void illume_layout_mode_unregister(const Illume_Layout_Mode *laymode);
|
||||||
|
|
||||||
void illume_border_activate(E_Border *bd);
|
void illume_border_activate(E_Border *bd);
|
||||||
void illume_border_show(E_Border *bd);
|
void illume_border_show(E_Border *bd);
|
||||||
void illume_border_deactivate(E_Border *bd);
|
void illume_border_deactivate(E_Border *bd);
|
||||||
|
|
|
@ -7,10 +7,7 @@
|
||||||
* the .desktop file) but more specifically the api version it was compiled
|
* the .desktop file) but more specifically the api version it was compiled
|
||||||
* for so E can skip modules that are compiled for an incorrect API version
|
* for so E can skip modules that are compiled for an incorrect API version
|
||||||
* safely) */
|
* safely) */
|
||||||
EAPI E_Module_Api e_modapi =
|
EAPI E_Module_Api e_modapi = { E_MODULE_API_VERSION, "Illume2" };
|
||||||
{
|
|
||||||
E_MODULE_API_VERSION, "Illume2"
|
|
||||||
};
|
|
||||||
|
|
||||||
/* called first thing when E inits the module */
|
/* called first thing when E inits the module */
|
||||||
EAPI void *
|
EAPI void *
|
||||||
|
|
Loading…
Reference in New Issue