NumLock x ALT-TAB (fvwm95+RH42)

Pavel Kankovsky peak na kerberos.troja.mff.cuni.cz
Čtvrtek Únor 19 11:07:17 CET 1998


On Thu, 19 Feb 1998, Michal Fadljevic wrote:

> mam drobny problem. V X-win mi prestane fungovat ALT-TAB, kdyz zapnu
> NumLock. Nevite prosim co s tim ? RH4.2 + fvwm95

To je takovy evergreen, ze uz to bude asi potreba opravit :)

problemova cast je v events.c

unsigned int mods_used = (ShiftMask | ControlMask | Mod1Mask |
                          Mod2Mask| Mod3Mask| Mod4Mask| Mod5Mask);
...
  modifier = (Event.xkey.state & mods_used);
...
          ((key->Modifier == (modifier&(~LockMask)))||
           (key->Modifier == AnyModifier)) &&

[a jeste jednou posledni dva kusy kodu pro mysoidni udalosti]

to, ze zahadnych duvodu de facto zdvojeno odstraneni CapsLocku
(jednou pred mods_used a jednou explicitne) ponechme stranou

NumLock je umisten na nektery z modifikatoru Mod2-5 (Mod1 je
typicky Meta/Alt, viz xmodmap -pm) a jeho zapnutim dojde k tomu,
ze vsechny "bindings", co nemaji AnyModifier (a nemaji prislusny
modifikator explicitne uvedeny) prestanou fungovat

navic tohle

  if((Tmp_win)&&(Tmp_win->flags & ClickToFocus)&&(Tmp_win != Scr.Ungrabbed)&&
     ((Event.xbutton.state&
       (ControlMask|Mod1Mask|Mod2Mask|Mod3Mask|Mod4Mask|Mod5Mask)) == 0))

zpusobi, ze se ztrati schopnost prepinat fokus kliknutim

nejjednodussi (paneboze, to slovo ma opravdu zdvojene dve hlasky!) reseni
je omezit mnozinu modifikatoru branych v uvahu

pokud nevadi, ze to nelze konfigurovat (jinak nez prekompilovanim), tak
lze pouzit prilozeny patch (pouze na vlastni nebezpeci, samozrejme)

--Pavel Kankovsky aka Peak   [ Boycott Microsoft -- http://www.vcnet.com/bms ]


--patch--

--- fvwm/events.c.orig  Sat Jul  6 18:09:21 1996
+++ fvwm/events.c       Thu Feb 19 10:28:21 1998
@@ -65,8 +65,7 @@
 #endif /* SHAPE */
 #include "module.h"
 
-unsigned int mods_used = (ShiftMask | ControlMask | Mod1Mask |
-                         Mod2Mask| Mod3Mask| Mod4Mask| Mod5Mask);
+unsigned int mods_used = (ShiftMask | ControlMask | Mod1Mask);
 extern int menuFromFrameOrWindowOrTitlebar;
 
 
@@ -421,7 +420,7 @@
   for (key = Scr.AllBindings; key != NULL; key = key->NextBinding)
     {
       if ((key->Button_Key == Event.xkey.keycode) &&
-         ((key->Modifier == (modifier&(~LockMask)))||
+         ((key->Modifier == modifier)||
           (key->Modifier == AnyModifier)) &&
          (key->Context & Context)&&
          (key->IsMouse == 0))
@@ -995,8 +994,7 @@
   
   /* click to focus stuff goes here */
   if((Tmp_win)&&(Tmp_win->flags & ClickToFocus)&&(Tmp_win != Scr.Ungrabbed)&&
-     ((Event.xbutton.state&
-       (ControlMask|Mod1Mask|Mod2Mask|Mod3Mask|Mod4Mask|Mod5Mask)) == 0))
+     ((Event.xbutton.state&mods_used) == 0))
     {
       if(Tmp_win)
        {
@@ -1055,7 +1053,7 @@
          (MouseEntry->Button_Key == 0))&&
         (MouseEntry->Context & Context)&&
         ((MouseEntry->Modifier == AnyModifier)||
-         (MouseEntry->Modifier == (modifier& (~LockMask))))&&
+         (MouseEntry->Modifier == modifier))&&
         (MouseEntry->IsMouse == 1))
        {
          /* got a match, now process it */





Další informace o konferenci Linux