ecore-x: only modify _ecore_key_grabs when key is toggled

A New entry is added to _ecore_key_grabs even when no key was grabbed.

Summary:  The key grab and ungrab functions should return which keycode was used. Proposed by pascal@ordissimo.com

Reviewers: zmike

Reviewed By: zmike

Subscribers: zmike, cedric, #reviewers, #committers

Tags: #efl

Differential Revision: https://phab.enlightenment.org/D7923
This commit is contained in:
Thierry 2019-02-13 11:28:01 -05:00 committed by Mike Blumenkrantz
parent 87cf5188b4
commit 56f06d21c1
1 changed files with 11 additions and 7 deletions

View File

@ -1921,7 +1921,7 @@ struct _Keygrab
}; };
Keygrab *_ecore_key_grabs = NULL; Keygrab *_ecore_key_grabs = NULL;
static void static KeyCode
_ecore_x_window_key_grab_internal(Ecore_X_Window win, _ecore_x_window_key_grab_internal(Ecore_X_Window win,
const char *key, const char *key,
int mod, int mod,
@ -1940,13 +1940,13 @@ _ecore_x_window_key_grab_internal(Ecore_X_Window win,
{ {
keysym = XStringToKeysym(key); keysym = XStringToKeysym(key);
if (keysym == NoSymbol) if (keysym == NoSymbol)
return; return 0;
keycode = XKeysymToKeycode(_ecore_x_disp, keysym); keycode = XKeysymToKeycode(_ecore_x_disp, keysym);
} }
if (keycode == 0) if (keycode == 0)
return; return 0;
m = _ecore_x_event_modifier(mod); m = _ecore_x_event_modifier(mod);
if (any_mod) if (any_mod)
@ -1966,6 +1966,7 @@ _ecore_x_window_key_grab_internal(Ecore_X_Window win,
win, False, GrabModeAsync, GrabModeAsync); win, False, GrabModeAsync, GrabModeAsync);
if (_ecore_xlib_sync) ecore_x_sync(); if (_ecore_xlib_sync) ecore_x_sync();
} }
return keycode;
} }
EAPI void EAPI void
@ -1975,9 +1976,11 @@ ecore_x_window_key_grab(Ecore_X_Window win,
int any_mod) int any_mod)
{ {
Keygrab *t; Keygrab *t;
KeyCode keycode;
EINA_SAFETY_ON_NULL_RETURN(_ecore_x_disp); EINA_SAFETY_ON_NULL_RETURN(_ecore_x_disp);
_ecore_x_window_key_grab_internal(win, key, mod, any_mod); if (!(keycode = _ecore_x_window_key_grab_internal(win, key, mod, any_mod)))
return;
_ecore_key_grabs_num++; _ecore_key_grabs_num++;
t = realloc(_ecore_key_grabs, t = realloc(_ecore_key_grabs,
_ecore_key_grabs_num * sizeof(Keygrab)); _ecore_key_grabs_num * sizeof(Keygrab));
@ -2034,7 +2037,7 @@ _ecore_x_key_grab_remove(Ecore_X_Window win,
return shuffle; return shuffle;
} }
static void static KeyCode
_ecore_x_window_key_ungrab_internal(Ecore_X_Window win, _ecore_x_window_key_ungrab_internal(Ecore_X_Window win,
const char *key, const char *key,
int mod, int mod,
@ -2053,13 +2056,13 @@ _ecore_x_window_key_ungrab_internal(Ecore_X_Window win,
{ {
keysym = XStringToKeysym(key); keysym = XStringToKeysym(key);
if (keysym == NoSymbol) if (keysym == NoSymbol)
return; return 0;
keycode = XKeysymToKeycode(_ecore_x_disp, keysym); keycode = XKeysymToKeycode(_ecore_x_disp, keysym);
} }
if (keycode == 0) if (keycode == 0)
return; return 0;
m = _ecore_x_event_modifier(mod); m = _ecore_x_event_modifier(mod);
if (any_mod) if (any_mod)
@ -2075,6 +2078,7 @@ _ecore_x_window_key_ungrab_internal(Ecore_X_Window win,
locks[7] = ECORE_X_LOCK_CAPS | 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++) for (i = 0; i < 8; i++)
XUngrabKey(_ecore_x_disp, keycode, m | locks[i], win); XUngrabKey(_ecore_x_disp, keycode, m | locks[i], win);
return keycode;
} }
EAPI void EAPI void