forked from enlightenment/efl
parent
b60fcc12ee
commit
517003f3c8
|
@ -1242,7 +1242,11 @@ EAPI void ecore_x_window_button_grab(Ecore_X_Window win, int button,
|
|||
int mod, int any_mod);
|
||||
EAPI void ecore_x_window_button_ungrab(Ecore_X_Window win, int button,
|
||||
int mod, int any_mod);
|
||||
|
||||
EAPI void ecore_x_window_key_grab(Ecore_X_Window win, char *key,
|
||||
int mod, int any_mod);
|
||||
EAPI void ecore_x_window_key_ungrab(Ecore_X_Window win, char *key,
|
||||
int mod, int any_mod);
|
||||
|
||||
EAPI void ecore_x_focus_reset(void);
|
||||
EAPI void ecore_x_events_allow_all(void);
|
||||
EAPI void ecore_x_pointer_last_xy_get(int *x, int *y);
|
||||
|
|
|
@ -1395,6 +1395,70 @@ ecore_x_window_button_ungrab(Ecore_X_Window win, int button,
|
|||
_ecore_window_grabs_num * sizeof(Window));
|
||||
}
|
||||
|
||||
int _ecore_key_grabs_num = 0;
|
||||
Window *_ecore_key_grabs = NULL;
|
||||
|
||||
void
|
||||
ecore_x_window_key_grab(Ecore_X_Window win, char *key,
|
||||
int mod, int any_mod)
|
||||
{
|
||||
KeyCode keycode;
|
||||
unsigned int m;
|
||||
unsigned int locks[8];
|
||||
int i;
|
||||
|
||||
keycode = XKeysymToKeycode(_ecore_x_disp, XStringToKeysym(key));
|
||||
m = mod;
|
||||
if (any_mod) m = AnyModifier;
|
||||
locks[0] = 0;
|
||||
locks[1] = ECORE_X_LOCK_CAPS;
|
||||
locks[2] = ECORE_X_LOCK_NUM;
|
||||
locks[3] = ECORE_X_LOCK_SCROLL;
|
||||
locks[4] = ECORE_X_LOCK_CAPS | ECORE_X_LOCK_NUM;
|
||||
locks[5] = ECORE_X_LOCK_CAPS | ECORE_X_LOCK_SCROLL;
|
||||
locks[6] = ECORE_X_LOCK_NUM | ECORE_X_LOCK_SCROLL;
|
||||
locks[7] = ECORE_X_LOCK_CAPS | ECORE_X_LOCK_NUM | ECORE_X_LOCK_SCROLL;
|
||||
for (i = 0; i < 8; i++)
|
||||
XGrabKey(_ecore_x_disp, keycode, m | locks[i],
|
||||
win, False, GrabModeSync, GrabModeAsync);
|
||||
_ecore_key_grabs_num++;
|
||||
_ecore_key_grabs = realloc(_ecore_key_grabs,
|
||||
_ecore_key_grabs_num * sizeof(Window));
|
||||
_ecore_key_grabs[_ecore_key_grabs_num - 1] = win;
|
||||
}
|
||||
|
||||
void
|
||||
ecore_x_window_key_ungrab(Ecore_X_Window win, char *key,
|
||||
int mod, int any_mod)
|
||||
{
|
||||
KeyCode keycode;
|
||||
unsigned int m;
|
||||
unsigned int locks[8];
|
||||
int i, shuffle = 0;
|
||||
|
||||
keycode = XKeysymToKeycode(_ecore_x_disp, XStringToKeysym(key));
|
||||
m = mod;
|
||||
if (any_mod) m = AnyModifier;
|
||||
locks[0] = 0;
|
||||
locks[1] = ECORE_X_LOCK_CAPS;
|
||||
locks[2] = ECORE_X_LOCK_NUM;
|
||||
locks[3] = ECORE_X_LOCK_SCROLL;
|
||||
locks[4] = ECORE_X_LOCK_CAPS | ECORE_X_LOCK_NUM;
|
||||
locks[5] = ECORE_X_LOCK_CAPS | ECORE_X_LOCK_SCROLL;
|
||||
locks[6] = ECORE_X_LOCK_NUM | ECORE_X_LOCK_SCROLL;
|
||||
locks[7] = ECORE_X_LOCK_CAPS | ECORE_X_LOCK_NUM | ECORE_X_LOCK_SCROLL;
|
||||
for (i = 0; i < 8; i++)
|
||||
XUngrabKey(_ecore_x_disp, keycode, m | locks[i], win);
|
||||
for (i = 0; i < _ecore_key_grabs_num - 1; i++)
|
||||
{
|
||||
if (_ecore_key_grabs[i] == win) shuffle = 1;
|
||||
if (shuffle) _ecore_key_grabs[i] = _ecore_key_grabs[i + 1];
|
||||
}
|
||||
_ecore_key_grabs_num--;
|
||||
_ecore_key_grabs = realloc(_ecore_key_grabs,
|
||||
_ecore_key_grabs_num * sizeof(Window));
|
||||
}
|
||||
|
||||
/**
|
||||
* Send client message with given type and format 32.
|
||||
*
|
||||
|
|
|
@ -37,7 +37,7 @@ ecore_x_window_new(Ecore_X_Window parent, int x, int y, int w, int h)
|
|||
attr.border_pixel = 0;
|
||||
attr.background_pixmap = None;
|
||||
attr.save_under = False;
|
||||
attr.do_not_propagate_mask = ~NoEventMask;
|
||||
attr.do_not_propagate_mask = NoEventMask;
|
||||
attr.event_mask = KeyPressMask |
|
||||
KeyReleaseMask |
|
||||
ButtonPressMask |
|
||||
|
@ -94,7 +94,7 @@ ecore_x_window_override_new(Ecore_X_Window parent, int x, int y, int w, int h)
|
|||
attr.border_pixel = 0;
|
||||
attr.background_pixmap = None;
|
||||
attr.save_under = False;
|
||||
attr.do_not_propagate_mask = ~NoEventMask;
|
||||
attr.do_not_propagate_mask = NoEventMask;
|
||||
attr.event_mask = KeyPressMask |
|
||||
KeyReleaseMask |
|
||||
ButtonPressMask |
|
||||
|
@ -146,7 +146,7 @@ ecore_x_window_input_new(Ecore_X_Window parent, int x, int y, int w, int h)
|
|||
|
||||
if (parent == 0) parent = DefaultRootWindow(_ecore_x_disp);
|
||||
attr.override_redirect = True;
|
||||
attr.do_not_propagate_mask = ~NoEventMask;
|
||||
attr.do_not_propagate_mask = NoEventMask;
|
||||
attr.event_mask = KeyPressMask |
|
||||
KeyReleaseMask |
|
||||
ButtonPressMask |
|
||||
|
|
Loading…
Reference in New Issue