From 4c1fb15143fb203b763f3dcdeee55567bbad8b1f Mon Sep 17 00:00:00 2001 From: Jean-Marc Lasgouttes Date: Thu, 4 Jan 2007 17:10:24 +0000 Subject: [PATCH] Make the shortcuts work correctly with the mac. * src/frontends/LyXKeySym.h: * src/frontends/qt4/QLyXKeySym.h: * src/frontends/qt4/QLyXKeySym.C (print): add a forgui boolean that tells whether the string should used localized names and special characters. * src/MenuBackend.C (binding): * src/kbmap.C (print): * src/kbsequence.C (print, printOptions): add forgui parameter. * src/frontends/qt4/QLPopupMenu.C (addBinding): use a non-localaized binding for Qt/Mac (because it needs to be parsed back) and a localized one for the others (so that it looks good). * src/kbmap.C (defkey,printbindings): * src/lyxfunc.C (processKeySym,dispatch,viewStatusMessage): adapt to above changes. * src/kbmap.C (printKey): remove. git-svn-id: svn://svn.lyx.org/lyx/lyx-devel/trunk@16510 a592a061-630c-0410-9148-cb99ea01b6c8 --- src/MenuBackend.C | 4 ++-- src/MenuBackend.h | 7 +++++-- src/frontends/LyXKeySym.h | 4 ++-- src/frontends/qt4/QLPopupMenu.C | 6 +++++- src/frontends/qt4/QLyXKeySym.C | 7 +++++-- src/frontends/qt4/QLyXKeySym.h | 8 ++++++-- src/kbmap.C | 16 +++++----------- src/kbmap.h | 11 ++++++----- src/kbsequence.C | 17 +++++++---------- src/kbsequence.h | 8 ++++++-- src/lyxfunc.C | 14 +++++++------- 11 files changed, 56 insertions(+), 46 deletions(-) diff --git a/src/MenuBackend.C b/src/MenuBackend.C index d113efda01..81d6a5db90 100644 --- a/src/MenuBackend.C +++ b/src/MenuBackend.C @@ -134,7 +134,7 @@ docstring const MenuItem::shortcut() const } -docstring const MenuItem::binding() const +docstring const MenuItem::binding(bool forgui) const { if (kind_ != Command) return docstring(); @@ -144,7 +144,7 @@ docstring const MenuItem::binding() const kb_keymap::Bindings bindings = theTopLevelKeymap().findbindings(func_); if (bindings.size()) { - return bindings.begin()->print(); + return bindings.begin()->print(forgui); } else { lyxerr[Debug::KBMAP] << "No binding for " diff --git a/src/MenuBackend.h b/src/MenuBackend.h index 7d2fd84a35..903b130630 100644 --- a/src/MenuBackend.h +++ b/src/MenuBackend.h @@ -110,8 +110,11 @@ public: FuncStatus & status() { return status_; } /// returns the status of the lfun associated with this entry void status(FuncStatus const & status) { status_ = status; } - /// returns the binding associated to this action - docstring const binding() const; + /** + * returns the binding associated to this action. + * Use the native UI format when \c forgui is true. + */ + docstring const binding(bool forgui) const; /// the description of the submenu (if relevant) docstring const & submenuname() const { return submenuname_; } /// set the description of the submenu diff --git a/src/frontends/LyXKeySym.h b/src/frontends/LyXKeySym.h index b5b536b8d9..618082ee2c 100644 --- a/src/frontends/LyXKeySym.h +++ b/src/frontends/LyXKeySym.h @@ -58,9 +58,9 @@ public: /** * Return a string describing the KeySym with modifier mod. - * This should use the native UI format when applicable + * Use the native UI format when \c forgui is true. */ - virtual docstring const print(key_modifier::state mod) const = 0; + virtual docstring const print(key_modifier::state mod, bool forgui) const = 0; }; diff --git a/src/frontends/qt4/QLPopupMenu.C b/src/frontends/qt4/QLPopupMenu.C index 9410f60281..e92ddd4c2c 100644 --- a/src/frontends/qt4/QLPopupMenu.C +++ b/src/frontends/qt4/QLPopupMenu.C @@ -136,7 +136,11 @@ docstring const QLPopupMenu::getLabel(MenuItem const & mi) void QLPopupMenu::addBinding(docstring & label, MenuItem const & mi) { - docstring const binding(mi.binding()); +#ifdef Q_WS_MACX + docstring const binding(mi.binding(false)); +#else + docstring const binding(mi.binding(true)); +#endif if (!binding.empty()) { label += '\t' + binding; } diff --git a/src/frontends/qt4/QLyXKeySym.C b/src/frontends/qt4/QLyXKeySym.C index a6450ed1aa..c6ef16a2ad 100644 --- a/src/frontends/qt4/QLyXKeySym.C +++ b/src/frontends/qt4/QLyXKeySym.C @@ -211,7 +211,7 @@ size_t QLyXKeySym::getUCSEncoded() const } -docstring const QLyXKeySym::print(key_modifier::state mod) const +docstring const QLyXKeySym::print(key_modifier::state mod, bool forgui) const { int tmpkey = key_; @@ -221,8 +221,11 @@ docstring const QLyXKeySym::print(key_modifier::state mod) const tmpkey += Qt::CTRL; if (mod & key_modifier::alt) tmpkey += Qt::ALT; + + QKeySequence seq(tmpkey); - return qstring_to_ucs4(QKeySequence(tmpkey).toString()); + return qstring_to_ucs4(seq.toString(forgui ? QKeySequence::NativeText + : QKeySequence::PortableText)); } diff --git a/src/frontends/qt4/QLyXKeySym.h b/src/frontends/qt4/QLyXKeySym.h index 6060189b2c..9fc85fc3ee 100644 --- a/src/frontends/qt4/QLyXKeySym.h +++ b/src/frontends/qt4/QLyXKeySym.h @@ -58,8 +58,12 @@ public: */ virtual size_t getUCSEncoded() const; - /// Return a human-readable version of a key+modifier pair. - virtual docstring const print(key_modifier::state mod) const; + /** + * Return a human-readable version of a key+modifier pair. + * This will be the GUI version (translated and with special + * characters for Mac OS X) when \c forgui is true. + */ + virtual docstring const print(key_modifier::state mod, bool forgui) const; /// int key() const { diff --git a/src/kbmap.C b/src/kbmap.C index 5c197eb14a..b026b8630f 100644 --- a/src/kbmap.C +++ b/src/kbmap.C @@ -55,12 +55,6 @@ string const kb_keymap::printKeySym(LyXKeySym const & key, } -docstring const kb_keymap::printKey(kb_key const & key) const -{ - return key.code->print(key.mod.first); -} - - string::size_type kb_keymap::bind(string const & seq, FuncRequest const & func) { if (lyxerr.debugging(Debug::KBMAP)) { @@ -220,12 +214,12 @@ kb_keymap::lookup(LyXKeySymPtr key, } -docstring const kb_keymap::print() const +docstring const kb_keymap::print(bool forgui) const { docstring buf; Table::const_iterator end = table.end(); for (Table::const_iterator cit = table.begin(); cit != end; ++cit) { - buf += printKey((*cit)); + buf += cit->code->print(cit->mod.first, forgui); buf += ' '; } return buf; @@ -252,7 +246,7 @@ void kb_keymap::defkey(kb_sequence * seq, if (r + 1 == seq->length()) { lyxerr[Debug::KBMAP] << "Warning: New binding for '" - << to_utf8(seq->print()) + << to_utf8(seq->print(false)) << "' is overriding old binding..." << endl; if (it->table.get()) { @@ -263,7 +257,7 @@ void kb_keymap::defkey(kb_sequence * seq, return; } else if (!it->table.get()) { lyxerr << "Error: New binding for '" - << to_utf8(seq->print()) + << to_utf8(seq->print(false)) << "' is overriding old binding..." << endl; return; @@ -294,7 +288,7 @@ docstring const kb_keymap::printbindings(FuncRequest const & func) const Bindings bindings = findbindings(func); for (Bindings::const_iterator cit = bindings.begin(); cit != bindings.end() ; ++cit) - res << '[' << cit->print() << ']'; + res << '[' << cit->print(true) << ']'; return res.str(); } diff --git a/src/kbmap.h b/src/kbmap.h index 029a4e1b4e..2ffe6885f1 100644 --- a/src/kbmap.h +++ b/src/kbmap.h @@ -45,8 +45,12 @@ public: // Parse a bind file bool read(std::string const & bind_file); - /// print all available keysyms - docstring const print() const; + /** + * print all available keysyms + * @param forgui true if the string should use translations and + * special characters. + */ + docstring const print(bool forgui) const; /** * Look up a key press in the keymap. @@ -110,9 +114,6 @@ private: void defkey(kb_sequence * seq, FuncRequest const & func, unsigned int r = 0); - /// Returns a string of the given key - docstring const printKey(kb_key const & key) const; - /** * Given an action, find all keybindings * @param func the action diff --git a/src/kbsequence.C b/src/kbsequence.C index f37afa9576..9277793fcc 100644 --- a/src/kbsequence.C +++ b/src/kbsequence.C @@ -130,17 +130,14 @@ string::size_type kb_sequence::parse(string const & s) } -docstring const kb_sequence::print() const +docstring const kb_sequence::print(bool forgui) const { docstring buf; - //if (deleted_) - // return buf; + const KeySequence::size_type length = sequence.size(); - KeySequence::size_type i, length = sequence.size(); - - for (i = 0; i < length; ++i) { - buf += sequence[i]->print(modifiers[i].first); + for (KeySequence::size_type i = 0; i < length; ++i) { + buf += sequence[i]->print(modifiers[i].first, forgui); // append a blank if (i + 1 < length) { @@ -151,17 +148,17 @@ docstring const kb_sequence::print() const } -docstring const kb_sequence::printOptions() const +docstring const kb_sequence::printOptions(bool forgui) const { docstring buf; - buf += print(); + buf += print(forgui); if (!curmap) return buf; buf += _(" options: "); - buf += curmap->print(); + buf += curmap->print(forgui); return buf; } diff --git a/src/kbsequence.h b/src/kbsequence.h index 6fa089880c..6dc269a035 100644 --- a/src/kbsequence.h +++ b/src/kbsequence.h @@ -63,15 +63,19 @@ public: /** * Return the current sequence as a string. + * @param forgui true if the string should use translations and + * special characters. * @see parse() */ - docstring const print() const; + docstring const print(bool forgui) const; /** * Return the current sequence and available options as * a string. No options are added if no curmap kb map exists. + * @param forgui true if the string should use translations and + * special characters. */ - docstring const printOptions() const; + docstring const printOptions(bool forgui) const; /// Mark the sequence as deleted. void mark_deleted(); diff --git a/src/lyxfunc.C b/src/lyxfunc.C index 77de336417..a631c42d35 100644 --- a/src/lyxfunc.C +++ b/src/lyxfunc.C @@ -294,7 +294,7 @@ void LyXFunc::processKeySym(LyXKeySymPtr keysym, key_modifier::state state) lyxerr << BOOST_CURRENT_FUNCTION << " Key [action=" << func.action << "][" - << to_utf8(keyseq->print()) << ']' + << to_utf8(keyseq->print(false)) << ']' << endl; } @@ -303,7 +303,7 @@ void LyXFunc::processKeySym(LyXKeySymPtr keysym, key_modifier::state state) // num_bytes == 0? (Lgb) if (keyseq->length() > 1) { - lyx_view_->message(keyseq->print()); + lyx_view_->message(keyseq->print(true)); } @@ -788,7 +788,7 @@ void LyXFunc::dispatch(FuncRequest const & cmd) case LFUN_COMMAND_PREFIX: BOOST_ASSERT(lyx_view_); - lyx_view_->message(keyseq->printOptions()); + lyx_view_->message(keyseq->printOptions(true)); break; case LFUN_COMMAND_EXECUTE: @@ -809,7 +809,7 @@ void LyXFunc::dispatch(FuncRequest const & cmd) case LFUN_META_PREFIX: meta_fake_bit = key_modifier::alt; - setMessage(keyseq->print()); + setMessage(keyseq->print(true)); break; case LFUN_BUFFER_TOGGLE_READ_ONLY: @@ -1169,7 +1169,7 @@ void LyXFunc::dispatch(FuncRequest const & cmd) break; case LFUN_SERVER_NOTIFY: - dispatch_buffer = keyseq->print(); + dispatch_buffer = keyseq->print(false); theLyXServer().notifyClient(to_utf8(dispatch_buffer)); break; @@ -2035,12 +2035,12 @@ docstring const LyXFunc::viewStatusMessage() { // When meta-fake key is pressed, show the key sequence so far + "M-". if (wasMetaKey()) - return keyseq->print() + "M-"; + return keyseq->print(true) + "M-"; // Else, when a non-complete key sequence is pressed, // show the available options. if (keyseq->length() > 0 && !keyseq->deleted()) - return keyseq->printOptions(); + return keyseq->printOptions(true); if (!view()->buffer()) return _("Welcome to LyX!"); -- 2.39.2