Am 20.02.2011 um 15:28 schrieb Pavel Sanda:

> Stephan Witt wrote:
>> I can circumvent this with many many #ifdef's but it would be easier
>> if Alt key makes AltModifier and Meta makes MetaModifier.
> 
> this strikes me as a correct solution. and all our 'M' chars in bind files
> should be 'A' then. however i'm doubtful about pushing this change to the tree
> at the current stage of development...

Then I'd like to go with the #ifdef variant.

Attached is a patch to make it possible on Mac to bind Meta- and Alt-Modifier 
separately.
Included is the change of the key bindings to preserve the standard navigation.

I'd like to put it in before RC because the result is IMHO the correct behavior.
Bennett, are you able to test this patch? If it works in principle we should 
review
carefully the key bindings in mac.bind and use it.

Stephan

Index: src/frontends/KeyModifier.h
===================================================================
--- src/frontends/KeyModifier.h (Revision 37748)
+++ src/frontends/KeyModifier.h (Arbeitskopie)
@@ -21,8 +21,9 @@
 enum KeyModifier {
        NoModifier       = 0, //< no modifiers held
        ControlModifier  = 1, //< control button held
-       AltModifier      = 2, //< alt/meta key held
-       ShiftModifier    = 4  //< shift key held
+       AltModifier      = 2, //< alt key held
+       ShiftModifier    = 4, //< shift key held
+       MetaModifier     = 8  //< meta key held
 };
 
 
Index: src/KeyMap.cpp
===================================================================
--- src/KeyMap.cpp      (Revision 37748)
+++ src/KeyMap.cpp      (Arbeitskopie)
@@ -45,8 +45,15 @@
 
        if (mod & ControlModifier)
                buf += "C-";
+#ifdef USE_MACOSX_PACKAGING
+       if (mod & MetaModifier)
+               buf += "M-";
        if (mod & AltModifier)
+               buf += "A-";
+#else
+       if (mod & AltModifier)
                buf += "M-";
+#endif
        if (mod & ShiftModifier)
                buf += "S-";
 
Index: src/KeySequence.cpp
===================================================================
--- src/KeySequence.cpp (Revision 37748)
+++ src/KeySequence.cpp (Arbeitskopie)
@@ -70,6 +70,12 @@
                                i += 2;
                                continue;
                        case 'm': case 'M':
+#ifdef USE_MACOSX_PACKAGING
+                               mod |= MetaModifier;
+                               i += 2;
+                               continue;
+#endif
+                       case 'a': case 'A':
                                mod |= AltModifier;
                                i += 2;
                                continue;
@@ -88,6 +94,12 @@
                                i += 3;
                                continue;
                        case 'm': case 'M':
+#ifdef USE_MACOSX_PACKAGING
+                               nmod |= MetaModifier;
+                               i += 3;
+                               continue;
+#endif
+                       case 'a': case 'A':
                                nmod |= AltModifier;
                                i += 3;
                                continue;
@@ -141,6 +153,10 @@
                        if (mod & ControlModifier)
                                buf += "C-";
                        if (mod & AltModifier)
+#ifdef USE_MACOSX_PACKAGING
+                               buf += "A-";
+                       if (mod & MetaModifier)
+#endif
                                buf += "M-";
                        if (mod & ShiftModifier)
                                buf += "S-";
Index: src/frontends/qt4/GuiKeySymbol.cpp
===================================================================
--- src/frontends/qt4/GuiKeySymbol.cpp  (Revision 37748)
+++ src/frontends/qt4/GuiKeySymbol.cpp  (Arbeitskopie)
@@ -693,6 +693,8 @@
                tmpkey += Qt::ControlModifier;
        if (mod & AltModifier)
                tmpkey += Qt::AltModifier;
+       if (mod & MetaModifier)
+               tmpkey += Qt::MetaModifier;
 
        QKeySequence seq(tmpkey);
        QString str;
@@ -744,8 +746,15 @@
                k |= ControlModifier;
        if (state & Qt::ShiftModifier)
                k |= ShiftModifier;
-       if (state & Qt::AltModifier || state & Qt::MetaModifier)
+       if (state & Qt::AltModifier)
                k |= AltModifier;
+#ifdef USE_MACOSX_PACKAGING
+       if (state & Qt::MetaModifier)
+               k |= MetaModifier;
+#else
+       if (state & Qt::MetaModifier)
+               k |= AltModifier;
+#endif
        return k;
 }
 
Index: lib/bind/mac.bind
===================================================================
--- lib/bind/mac.bind   (Revision 37748)
+++ lib/bind/mac.bind   (Arbeitskopie)
@@ -96,10 +96,10 @@
 \bind "C-g"                            "word-find"
 \bind "C-F4"                   "buffer-close"
 \bind "F5"                             "screen-recenter"
-\bind "C-M-Up"                 "scroll line up"
-\bind "C-M-Down"               "scroll line down"
-\bind "C-M-Prior"              "scroll page up"
-\bind "C-M-Next"               "scroll page down"
+\bind "C-A-Up"                 "scroll line up"
+\bind "C-A-Down"               "scroll line down"
+\bind "C-A-Prior"              "scroll page up"
+\bind "C-A-Next"               "scroll page down"
 \bind "F7"                             "dialog-show spellchecker"
 \bind "S-F7"                   "thesaurus-entry"
 
@@ -113,16 +113,16 @@
 # Motion group
 #
 
-\bind "M-Right"                        "word-right"
-\bind "M-Left"                 "word-left"
-\bind "M-Up"                   "paragraph-up"
-\bind "M-Down"                 "paragraph-down"
-\bind "C-Up"                   "buffer-begin"
-\bind "C-Down"                 "buffer-end"
-\bind "M-C-Up"                 "inset-begin" 
-\bind "M-C-Down"               "inset-end" 
-\bind "C-Right"                        "line-end"
-\bind "C-Left"                 "line-begin"
+\bind "A-Right"                        "word-right"
+\bind "A-Left"                 "word-left"
+\bind "A-Up"                   "paragraph-up"
+\bind "A-Down"                 "paragraph-down"
+\bind "M-Up"                   "buffer-begin"
+\bind "M-Down"                 "buffer-end"
+\bind "M-A-Up"                 "inset-begin" 
+\bind "M-A-Down"               "inset-end" 
+\bind "M-Right"                        "line-end"
+\bind "M-Left"                 "line-begin"
 
 \bind "C-~S-greater"   "label-goto"
 \bind "C-~S-less"              "bookmark-goto 0"
@@ -136,18 +136,18 @@
 \bind "S-Left"                 "char-left-select"
 \bind "S-Up"                   "up-select"
 \bind "S-Down"                 "down-select"
-\bind "S-M-Right"              "word-right-select"
-\bind "S-M-Left"               "word-left-select"
-\bind "S-M-Up"                 "paragraph-up-select"
-\bind "S-M-Down"               "paragraph-down-select"
-\bind "S-C-Left"               "line-begin-select"
-\bind "S-C-Right"              "line-end-select"
+\bind "S-A-Right"              "word-right-select"
+\bind "S-A-Left"               "word-left-select"
+\bind "S-A-Up"                 "paragraph-up-select"
+\bind "S-A-Down"               "paragraph-down-select"
+\bind "S-M-Left"               "line-begin-select"
+\bind "S-M-Right"              "line-end-select"
 \bind "S-Prior"                        "screen-up-select"
 \bind "S-Next"                 "screen-down-select"
-\bind "S-C-Up"                 "buffer-begin-select"
-\bind "S-C-Down"               "buffer-end-select"
-\bind "S-M-C-Up"               "inset-begin-select" 
-\bind "S-M-C-Down"             "inset-end-select" 
+\bind "S-M-Up"                 "buffer-begin-select"
+\bind "S-M-Down"               "buffer-end-select"
+\bind "S-M-A-Up"               "inset-begin-select" 
+\bind "S-M-A-Down"             "inset-end-select" 
 \bind "C-Insert"               "copy"
 \bind "S-Insert"               "paste"
 \bind "S-Delete"               "cut"

Reply via email to