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"