• Martin Flöser's avatar
    Remove not-wanted modifiers prior to evaluating global shortcuts · 42358716
    Martin Flöser authored
    Summary:
    When triggering global shortcuts we are more interested in the hold
    keys than the currently active modifiers. E.g. capslock should not
    be seen as "shift is hold". Similar we need to remove consumed
    modifiers. Shift+5 is % and not Shift+% - the shift modifier is
    consumed and needs to be removed from shortcut evaluation.
    
    To support this we need to have the actual state directly from
    xkbcommon. Thus a new method is added which exposes the modifiers
    relevant for global shortcut matching. In addition on every key press
    all consumed modifiers are calculated and kept so that they can be
    used for shortcut matching.
    
    In addition a workaround is added for Backtab. Similar workaround
    exists in kglobalaccel for X11. The problem is that our shortcuts are
    stored incorrectly: Shift+Tab instead of Backtab. Thus a mapping back
    is required. To make everything worse KWin registers the wrong key
    sequence "Alt+Shift+Backtab" which doesn't make any sense and is
    broken on X11 at least.
    
    The workaround supports both special cases. The one for Backtab should
    be turned into Shift+Tab and also KWin's special case of adding shift
    to backtab.
    
    CCBUG: 368581
    
    Reviewers: #kwin, #plasma_on_wayland, bshah
    
    Subscribers: plasma-devel, kwin
    
    Tags: #plasma_on_wayland, #kwin
    
    Differential Revision: https://phabricator.kde.org/D2768
    42358716
globalshortcuts_test.cpp 3.33 KB