]> git.lyx.org Git - lyx.git/blobdiff - src/frontends/qt4/GuiKeySymbol.cpp
QDialogButtonBox for the remaining dialogs.
[lyx.git] / src / frontends / qt4 / GuiKeySymbol.cpp
index 54a45166743f5afe59db0efb4e488fa3a358ec83..a01682cae2ed36d1f191cf0a3b52fc574558eb4c 100644 (file)
@@ -11,6 +11,7 @@
 #include <config.h>
 
 #include "KeySymbol.h"
+#include "GuiApplication.h"
 
 #include "qt_helpers.h"
 
@@ -611,7 +612,7 @@ static char encode(string const & encoding, QString const & str)
 #endif
 
 
-void setKeySymbol(KeySymbol * sym, QKeyEvent * ev)
+void setKeySymbol(KeySymbol * sym, QKeyEvent const * ev)
 {
        sym->setKey(ev->key());
        if (ev->text().isNull()) {
@@ -622,7 +623,7 @@ void setKeySymbol(KeySymbol * sym, QKeyEvent * ev)
        LYXERR(Debug::KEY, "Getting key " << ev->key() << ", with text '"
                << ev->text() << "'");
        // This is unsafe because ev->text() is the unicode representation of the
-       // key, not the name of the key. For example, Ctrl-x and Alt-x produce 
+       // key, not the name of the key. For example, Ctrl-x and Alt-x produce
        // different texts.
        sym->setText(qstring_to_ucs4(ev->text()));
        LYXERR(Debug::KEY, "Setting key to " << sym->key() << ", "
@@ -713,7 +714,7 @@ docstring const KeySymbol::print(KeyModifier mod, bool forgui) const
                str.replace(QChar(0x2325), qt_("Option-"));
                str.replace(QChar(0x2318), qt_("Command-"));
 #else
-               str = seq.toString(QKeySequence::PortableText); 
+               str = seq.toString(QKeySequence::PortableText);
 #endif
        }
 
@@ -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)