[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Bug#263073: xlibs: Super still Super+Hyper



On Sun, Sep 12, 2004 at 07:57:56PM +0000, Tim Bagot wrote:
> Sorry, my steps to reproduce weren't exactly very detailed. I'll try
> again:
> 
> Sawfish: From Gnome, go to Desktop Preferences, Windows; Bindings tab.
> Set default modifier to super. (Should take effect immediately.) Try
> e.g. Win-TAB. Set to hyper, and try again.
> 
> Emacs: Type C-h c Win-<key>

That's funny, the code in sawfish comes from emacs, so it is broken the
same way and the fix is similar ;)
The problem here is that the direct_modifiers function in src/keys.c
contains:
    if (meta_mod != 0 && (mods & EV_MOD_META))
        mods = (mods & ~EV_MOD_META) | meta_mod;
    if (alt_mod != 0 && (mods & EV_MOD_ALT))
        mods = (mods & ~EV_MOD_ALT) | alt_mod;
    if (hyper_mod != 0 && (mods & EV_MOD_HYPER))
        mods = (mods & ~EV_MOD_HYPER) | hyper_mod;
    if (super_mod != 0 && (mods & EV_MOD_SUPER))
        mods = (mods & ~EV_MOD_SUPER) | super_mod;

With default settings, meta_mod==alt_mod and hyper_mod==super_mod,
so only Meta and Hyper modifiers are caught.  And indeed if modifier
is changed to Alt or Super, W-Tab is ignored.  As with Emacs, some
black magic is invoked to try to handle the Alt/Meta case, but it
does not seem to work here.

The attached patch ignores XKB fake keys, and those *_mod variables
become unique.  This patch has not been fully tested, I only checked
that *_mods variable become unique.

Sawfish maintainer, do you believe that this bug should be cloned and
reassigned to sawfish?

Denis
--- sawfish-1.3+cvs20040617/src/keys.c.orig	2004-09-13 00:47:19.000000000 +0200
+++ sawfish-1.3+cvs20040617/src/keys.c	2004-09-13 00:47:23.000000000 +0200
@@ -1515,6 +1515,9 @@
 		{
 		    int sym = syms[((code - min_code) * syms_per_code)
 				  + code_col];
+		    /* Is this a fake key? */
+		    if (code_col == 0 && sym == NoSymbol)
+			break;
 		    switch(sym)
 		    {
 		    case XK_Meta_L: case XK_Meta_R:

Reply to: