commit 9e57f906c28433dfa4150ef53b83dcb424fd2c7e
Author: Juergen Spitzmueller <[email protected]>
Date:   Sat May 16 17:14:51 2015 +0200

    Refine fix for #5575 and comment it out for windows
    
    See #5575 for details why it does not work on windows.

diff --git a/src/frontends/qt4/GuiApplication.cpp 
b/src/frontends/qt4/GuiApplication.cpp
index eaf33c4..2fa6a71 100644
--- a/src/frontends/qt4/GuiApplication.cpp
+++ b/src/frontends/qt4/GuiApplication.cpp
@@ -2128,29 +2128,37 @@ void GuiApplication::processKeySym(KeySymbol const & 
keysym, KeyModifier state)
        }
 
        if (func.action() == LFUN_UNKNOWN_ACTION) {
-               if (state & AltModifier) {
-                       current_view_->message(_("Unknown function."));
-                       current_view_->restartCursor();
-                       return;
-               }
-               // Hmm, we didn't match any of the keysequences. See
-               // if it's normal insertable text not already covered
-               // by a binding
+               // We didn't match any of the key sequences.
+               // See if it's normal insertable text not already
+               // covered by a binding
                if (keysym.isText() && d->keyseq.length() == 1) {
                        // Non-printable characters (such as ASCII control 
characters)
                        // must not be inserted (#5704)
                        if (!isPrintable(encoded_last_key)) {
                                LYXERR(Debug::KEY, "Non-printable character! 
Omitting.");
+                               current_view_->restartCursor();
                                return;
                        }
-                       // FIXME: Is this really needed? If not, we could  
simply go with
-                       // with the else part for LFUN_UNKNOWN_ACTION
-                       // (see discussion at #5575)
+                       // If a non-Shift Modifier is used we have a non-bound 
key sequence
+                       // (such as Alt+j = j). This should be omitted (#5575).
+                       // FIXME: On Windows, the AltModifier and ShiftModifer 
is also
+                       // set when AltGr is pressed. Therefore, the check 
below does not work
+                       // (see #5575 for details).
+#if !defined(_WIN32)
+                       if ((state & AltModifier || state & ControlModifier || 
state & MetaModifier)) {
+                               current_view_->message(_("Unknown function."));
+                               current_view_->restartCursor();
+                               return;
+                       }
+#endif
+                       // Since all checks above were passed, we now really 
have text that
+                       // is to be inserted (e.g., AltGr-bound symbols). Thus 
change the
+                       // func to LFUN_SELF_INSERT and thus cause the text to 
be inserted
+                       // below.
                        LYXERR(Debug::KEY, "isText() is true, inserting.");
-                       func = FuncRequest(LFUN_SELF_INSERT,
-                                          FuncRequest::KEYBOARD);
+                       func = FuncRequest(LFUN_SELF_INSERT, 
FuncRequest::KEYBOARD);
                } else {
-                       LYXERR(Debug::KEY, "Unknown, !isText() - giving up");
+                       LYXERR(Debug::KEY, "Unknown Action and not isText() -- 
giving up");
                        if (current_view_) {
                                current_view_->message(_("Unknown function."));
                                current_view_->restartCursor();

Reply via email to