Enlightenment CVS committal Author : kwo Project : e16 Module : e
Dir : e16/e/src Modified Files: E.h aclass.c grabs.c grabs.h setup.c Log Message: Move modifier mask stuff around. Avoid redundant key/button grab/ungrabs. =================================================================== RCS file: /cvs/e/e16/e/src/E.h,v retrieving revision 1.576 retrieving revision 1.577 diff -u -3 -r1.576 -r1.577 --- E.h 28 Jan 2007 04:59:45 -0000 1.576 +++ E.h 1 Feb 2007 01:23:40 -0000 1.577 @@ -475,8 +475,7 @@ } locale; struct { - unsigned int numlock; - unsigned int scrollock; + unsigned int mod_key_mask; unsigned int mod_combos[8]; } masks; struct =================================================================== RCS file: /cvs/e/e16/e/src/aclass.c,v retrieving revision 1.39 retrieving revision 1.40 diff -u -3 -r1.39 -r1.40 --- aclass.c 17 Jan 2007 01:10:42 -0000 1.39 +++ aclass.c 1 Feb 2007 01:23:40 -0000 1.40 @@ -1010,9 +1010,7 @@ key = type = button = modifiers = mouse = 0; - mask = - (ShiftMask | ControlMask | Mod1Mask | Mod2Mask | Mod3Mask | Mod4Mask | - Mod5Mask) & (~(Mode.masks.numlock | Mode.masks.scrollock | LockMask)); + mask = Mode.masks.mod_key_mask; switch (ev->type) { @@ -1484,35 +1482,11 @@ && (aa->event != EVENT_MOUSE_UP))) continue; - mod = 0; - button = 0; - - if (aa->anymodifier) - mod = AnyModifier; - else - mod = aa->modifiers; - - if (aa->anybutton) - button = AnyButton; - else - button = aa->button; - + mod = (aa->anymodifier) ? AnyModifier : aa->modifiers; + button = (aa->anybutton) ? AnyButton : aa->button; mask = ButtonPressMask | ButtonReleaseMask; - if (mod == AnyModifier) - { - GrabButtonSet(button, mod, EoGetWin(ewin), mask, ECSR_PGRAB, 1); - } - else - { - int i; - - for (i = 0; i < 8; i++) - { - GrabButtonSet(button, mod | Mode.masks.mod_combos[i], - EoGetWin(ewin), mask, ECSR_PGRAB, 1); - } - } + GrabButtonSet(button, mod, EoGetWin(ewin), mask, ECSR_PGRAB, 1); } } @@ -1536,33 +1510,10 @@ && (aa->event != EVENT_MOUSE_UP))) continue; - mod = 0; - button = 0; - - if (aa->anymodifier) - mod = AnyModifier; - else - mod = aa->modifiers; - - if (aa->anybutton) - button = AnyButton; - else - button = aa->button; + mod = (aa->anymodifier) ? AnyModifier : aa->modifiers; + button = (aa->anybutton) ? AnyButton : aa->button; - if (mod == AnyModifier) - { - GrabButtonRelease(button, mod, EoGetWin(ewin)); - } - else - { - int i; - - for (i = 0; i < 8; i++) - { - GrabButtonRelease(button, mod | Mode.masks.mod_combos[i], - EoGetWin(ewin)); - } - } + GrabButtonRelease(button, mod, EoGetWin(ewin)); } } @@ -1574,22 +1525,9 @@ if (!aa->key) return; - mod = aa->modifiers; - if (aa->anymodifier) - { - mod = AnyModifier; - XGrabKey(disp, aa->key, mod, VRoot.xwin, False, GrabModeAsync, - GrabModeSync); - } - else - { - int i; + mod = (aa->anymodifier) ? AnyModifier : aa->modifiers; - /* grab the key even if locks are on or not */ - for (i = 0; i < 8; i++) - XGrabKey(disp, aa->key, mod | Mode.masks.mod_combos[i], VRoot.xwin, - False, GrabModeAsync, GrabModeSync); - } + GrabKeySet(aa->key, mod, VRoot.win); } static void @@ -1600,19 +1538,7 @@ if (!aa->key) return; - mod = aa->modifiers; - if (aa->anymodifier) - { - mod = AnyModifier; - XUngrabKey(disp, aa->key, mod, VRoot.xwin); - } - else - { - int i; + mod = (aa->anymodifier) ? AnyModifier : aa->modifiers; - /* ungrab the key even if locks are on or not */ - for (i = 0; i < 8; i++) - XUngrabKey(disp, aa->key, mod | Mode.masks.mod_combos[i], - VRoot.xwin); - } + GrabKeyRelease(aa->key, mod, VRoot.win); } =================================================================== RCS file: /cvs/e/e16/e/src/grabs.c,v retrieving revision 1.30 retrieving revision 1.31 diff -u -3 -r1.30 -r1.31 --- grabs.c 13 Jan 2007 19:14:27 -0000 1.30 +++ grabs.c 1 Feb 2007 01:23:40 -0000 1.31 @@ -95,14 +95,86 @@ int pointer_mode = GrabModeSync; int keyboard_mode = GrabModeAsync; Window confine_to = (confine) ? WinGetXwin(win) : None; + int i; - XGrabButton(disp, button, modifiers, WinGetXwin(win), owner_events, - event_mask, pointer_mode, keyboard_mode, confine_to, - ECsrGet(csr)); + if (modifiers == AnyModifier) + { + XGrabButton(disp, button, modifiers, + WinGetXwin(win), owner_events, event_mask, pointer_mode, + keyboard_mode, confine_to, ECsrGet(csr)); + return; + } + + for (i = 0; i < 8; i++) + { + if (i && !Mode.masks.mod_combos[i]) + continue; + XGrabButton(disp, button, modifiers | Mode.masks.mod_combos[i], + WinGetXwin(win), owner_events, event_mask, pointer_mode, + keyboard_mode, confine_to, ECsrGet(csr)); + } } void GrabButtonRelease(unsigned int button, unsigned int modifiers, Win win) { - XUngrabButton(disp, button, modifiers, WinGetXwin(win)); + int i; + + if (modifiers == AnyModifier) + { + XUngrabButton(disp, button, modifiers, WinGetXwin(win)); + return; + } + + for (i = 0; i < 8; i++) + { + if (i && !Mode.masks.mod_combos[i]) + continue; + XUngrabButton(disp, button, modifiers | Mode.masks.mod_combos[i], + WinGetXwin(win)); + } +} + +void +GrabKeySet(unsigned int key, unsigned int modifiers, Win win) +{ + Bool owner_events = False; + int pointer_mode = GrabModeAsync; + int keyboard_mode = GrabModeSync; + int i; + + if (modifiers == AnyModifier) + { + XGrabKey(disp, key, modifiers, WinGetXwin(win), owner_events, + pointer_mode, keyboard_mode); + return; + } + + for (i = 0; i < 8; i++) + { + if (i && !Mode.masks.mod_combos[i]) + continue; + XGrabKey(disp, key, modifiers | Mode.masks.mod_combos[i], + WinGetXwin(win), owner_events, pointer_mode, keyboard_mode); + } +} + +void +GrabKeyRelease(unsigned int key, unsigned int modifiers, Win win) +{ + int i; + + if (modifiers == AnyModifier) + { + XUngrabKey(disp, key, modifiers, WinGetXwin(win)); + return; + } + + for (i = 0; i < 8; i++) + { + if (i && !Mode.masks.mod_combos[i]) + continue; + XUngrabKey(disp, key, modifiers | Mode.masks.mod_combos[i], + WinGetXwin(win)); + } } =================================================================== RCS file: /cvs/e/e16/e/src/grabs.h,v retrieving revision 1.2 retrieving revision 1.3 diff -u -3 -r1.2 -r1.3 --- grabs.h 13 Jan 2007 19:14:27 -0000 1.2 +++ grabs.h 1 Feb 2007 01:23:40 -0000 1.3 @@ -35,5 +35,9 @@ unsigned int csr, int confine); void GrabButtonRelease(unsigned int button, unsigned int modifiers, Win win); +void GrabKeySet(unsigned int key, unsigned int modifiers, + Win win); +void GrabKeyRelease(unsigned int key, unsigned int modifiers, + Win win); #endif /* _GRABS_H_ */ =================================================================== RCS file: /cvs/e/e16/e/src/setup.c,v retrieving revision 1.182 retrieving revision 1.183 diff -u -3 -r1.182 -r1.183 --- setup.c 17 Jan 2007 01:10:43 -0000 1.182 +++ setup.c 1 Feb 2007 01:23:40 -0000 1.183 @@ -264,12 +264,14 @@ { XModifierKeymap *mod; KeyCode nl, sl; + unsigned int numlock, scrollock; int i; int masks[8] = { ShiftMask, LockMask, ControlMask, Mod1Mask, Mod2Mask, Mod3Mask, Mod4Mask, Mod5Mask }; + numlock = scrollock = 0; mod = XGetModifierMapping(disp); nl = XKeysymToKeycode(disp, XK_Num_Lock); sl = XKeysymToKeycode(disp, XK_Scroll_Lock); @@ -278,20 +280,32 @@ for (i = 0; i < (8 * mod->max_keypermod); i++) { if ((nl) && (mod->modifiermap[i] == nl)) - Mode.masks.numlock = masks[i / mod->max_keypermod]; + numlock = masks[i / mod->max_keypermod]; else if ((sl) && (mod->modifiermap[i] == sl)) - Mode.masks.scrollock = masks[i / mod->max_keypermod]; + scrollock = masks[i / mod->max_keypermod]; } } Mode.masks.mod_combos[0] = 0; Mode.masks.mod_combos[1] = LockMask; - Mode.masks.mod_combos[2] = Mode.masks.numlock; - Mode.masks.mod_combos[3] = Mode.masks.scrollock; - Mode.masks.mod_combos[4] = Mode.masks.numlock | Mode.masks.scrollock; - Mode.masks.mod_combos[5] = LockMask | Mode.masks.numlock; - Mode.masks.mod_combos[6] = LockMask | Mode.masks.scrollock; - Mode.masks.mod_combos[7] = LockMask | - Mode.masks.numlock | Mode.masks.scrollock; + if (numlock) + { + Mode.masks.mod_combos[2] = numlock; + Mode.masks.mod_combos[5] = LockMask | numlock; + } + if (scrollock) + { + Mode.masks.mod_combos[3] = scrollock; + Mode.masks.mod_combos[6] = LockMask | scrollock; + } + if (numlock && scrollock) + { + Mode.masks.mod_combos[4] = numlock | scrollock; + Mode.masks.mod_combos[7] = LockMask | numlock | scrollock; + } + + Mode.masks.mod_key_mask = + (ShiftMask | ControlMask | Mod1Mask | Mod2Mask | Mod3Mask | Mod4Mask | + Mod5Mask) & (~(numlock | scrollock | LockMask)); if (mod) XFreeModifiermap(mod); ------------------------------------------------------------------------- Using Tomcat but need to do more? Need to support web services, security? Get stuff done quickly with pre-integrated technology to make your job easier. Download IBM WebSphere Application Server v.1.0.1 based on Apache Geronimo http://sel.as-us.falkag.net/sel?cmd=lnk&kid=120709&bid=263057&dat=121642 _______________________________________________ enlightenment-cvs mailing list enlightenment-cvs@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/enlightenment-cvs