aaaahmmm.. no.. this.. oops

SVN revision: 14343
This commit is contained in:
Carsten Haitzler 2005-04-25 08:40:58 +00:00
parent b60fcc12ee
commit 517003f3c8
3 changed files with 72 additions and 4 deletions

View File

@ -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);

View File

@ -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.
*

View File

@ -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 |