Enlightenment CVS committal Author : raster Project : e17 Module : libs/ecore
Dir : e17/libs/ecore/src/lib/ecore_x Modified Files: ecore_x.c ecore_x_events.c Log Message: safe grab/ungrab =================================================================== RCS file: /cvsroot/enlightenment/e17/libs/ecore/src/lib/ecore_x/ecore_x.c,v retrieving revision 1.81 retrieving revision 1.82 diff -u -3 -r1.81 -r1.82 --- ecore_x.c 16 May 2005 15:42:50 -0000 1.81 +++ ecore_x.c 20 May 2005 09:22:10 -0000 1.82 @@ -1384,7 +1384,7 @@ unsigned int b; unsigned int m; unsigned int locks[8]; - int i, shuffle = 0; + int i, shuffle = 0, found = 0; b = button; if (b == 0) b = AnyButton; @@ -1400,14 +1400,21 @@ locks[7] = ECORE_X_LOCK_CAPS | ECORE_X_LOCK_NUM | ECORE_X_LOCK_SCROLL; for (i = 0; i < 8; i++) XUngrabButton(_ecore_x_disp, b, m | locks[i], win); - for (i = 0; i < _ecore_window_grabs_num - 1; i++) + if (_ecore_window_grabs_num > 0) { - if (_ecore_window_grabs[i] == win) shuffle = 1; - if (shuffle) _ecore_window_grabs[i] = _ecore_window_grabs[i + 1]; + for (i = 0; i < (_ecore_window_grabs_num - 1); i++) + { + if (shuffle) _ecore_window_grabs[i] = _ecore_window_grabs[i + 1]; + if ((!shuffle) && (_ecore_window_grabs[i] == win)) + shuffle = 1; + } + if (shuffle) + { + _ecore_window_grabs_num--; + _ecore_window_grabs = realloc(_ecore_window_grabs, + _ecore_window_grabs_num * sizeof(Window)); + } } - _ecore_window_grabs_num--; - _ecore_window_grabs = realloc(_ecore_window_grabs, - _ecore_window_grabs_num * sizeof(Window)); } int _ecore_key_grabs_num = 0; @@ -1484,14 +1491,21 @@ 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_num > 0) { - if (_ecore_key_grabs[i] == win) shuffle = 1; - if (shuffle) _ecore_key_grabs[i] = _ecore_key_grabs[i + 1]; + for (i = 0; i < (_ecore_key_grabs_num - 1); i++) + { + if (shuffle) _ecore_key_grabs[i] = _ecore_key_grabs[i + 1]; + if ((!shuffle) && (_ecore_key_grabs[i] == win)) + shuffle = 1; + } + if (shuffle) + { + _ecore_key_grabs_num--; + _ecore_key_grabs = realloc(_ecore_key_grabs, + _ecore_key_grabs_num * sizeof(Window)); + } } - _ecore_key_grabs_num--; - _ecore_key_grabs = realloc(_ecore_key_grabs, - _ecore_key_grabs_num * sizeof(Window)); } /** =================================================================== RCS file: /cvsroot/enlightenment/e17/libs/ecore/src/lib/ecore_x/ecore_x_events.c,v retrieving revision 1.58 retrieving revision 1.59 diff -u -3 -r1.58 -r1.59 --- ecore_x_events.c 17 May 2005 11:59:50 -0000 1.58 +++ ecore_x_events.c 20 May 2005 09:22:10 -0000 1.59 @@ -315,9 +315,9 @@ int replay = 0; if (_ecore_window_grab_replay_func) - replay = _ecore_window_grab_replay_func(_ecore_window_grab_replay_data, - ECORE_X_EVENT_MOUSE_WHEEL, - e); + replay = _ecore_window_grab_replay_func(_ecore_window_grab_replay_data, + ECORE_X_EVENT_MOUSE_WHEEL, + e); if (replay) XAllowEvents(xevent->xbutton.display, ReplayPointer, ------------------------------------------------------- This SF.Net email is sponsored by Oracle Space Sweepstakes Want to be the first software developer in space? Enter now for the Oracle Space Sweepstakes! http://ads.osdn.com/?ad_id=7412&alloc_id=16344&op=click _______________________________________________ enlightenment-cvs mailing list enlightenment-cvs@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/enlightenment-cvs