For Mac OS: Additional check for Control and Meta modifier swap state.

Starting with Qt 5 the modifiers aren't reported correctly for disabled swap.
Until this is fixed it is corrected by reverting the modifier mask to check for.
This commit is contained in:
Stephan Witt 2015-10-24 21:03:01 +02:00
parent 39cd8302cb
commit 2a3b54d57b

View File

@ -11,6 +11,7 @@
#include <config.h>
#include "KeySymbol.h"
#include "GuiApplication.h"
#include "qt_helpers.h"
@ -744,14 +745,24 @@ bool KeySymbol::operator==(KeySymbol const & ks) const
KeyModifier q_key_state(Qt::KeyboardModifiers state)
{
KeyModifier k = NoModifier;
if (state & Qt::ControlModifier)
#if defined(Q_OS_MAC) && QT_VERSION > 0x050000
/// Additional check for Control and Meta modifier swap state.
/// Starting with Qt 5 the modifiers aren't reported correctly.
/// Until this is fixed a correction is required.
const bool dontSwapCtrlAndMeta =
frontend::theGuiApp()->testAttribute(Qt::AA_MacDontSwapCtrlAndMeta);
#else
const bool dontSwapCtrlAndMeta = false;
#endif
if (state & (dontSwapCtrlAndMeta ? Qt::MetaModifier : Qt::ControlModifier))
k |= ControlModifier;
if (state & Qt::ShiftModifier)
k |= ShiftModifier;
if (state & Qt::AltModifier)
k |= AltModifier;
#if defined(USE_MACOSX_PACKAGING) || defined(USE_META_KEYBINDING)
if (state & Qt::MetaModifier)
if (state & (dontSwapCtrlAndMeta ? Qt::ControlModifier : Qt::MetaModifier))
k |= MetaModifier;
#else
if (state & Qt::MetaModifier)