From: Jean-Marc Lasgouttes Date: Wed, 13 Dec 2006 14:13:01 +0000 (+0000) Subject: Convert shortcut strings to unicode (required by Qt/Mac); restore X-Git-Tag: 1.6.10~11565 X-Git-Url: https://git.lyx.org/gitweb/?a=commitdiff_plain;h=6b55f26eb828a98ab71596b0ca83d9cdb9aa7607;p=features.git Convert shortcut strings to unicode (required by Qt/Mac); restore shortcuts in menus on the Mac. * src/frontends/qt4/QLPopupMenu.C (addBinding): remove special OS X code (and hopefully restore shortcuts for LyX/Mac). * src/lyxfunc.C (processKeySym, dispatch, sendDispatchMessage, viewStatusMessage): adapt to changes below. * src/MenuBackend.C (binding): adapt to changes below. * src/kbmap.C (printKey, print, printbindings): return a docstring; adapt to kbsequence changes. * src/kbsequence.C (print, printOptions): return a docstring. * src/frontends/LyXKeySym.h (print): return a docstring. * src/frontends/qt4/QLyXKeySym.C (print): return a docstring. (qprint): remove. git-svn-id: svn://svn.lyx.org/lyx/lyx-devel/trunk@16265 a592a061-630c-0410-9148-cb99ea01b6c8 --- diff --git a/src/MenuBackend.C b/src/MenuBackend.C index c2e107f224..6313b7842b 100644 --- a/src/MenuBackend.C +++ b/src/MenuBackend.C @@ -144,7 +144,7 @@ docstring const MenuItem::binding() const kb_keymap::Bindings bindings = theTopLevelKeymap().findbindings(func_); if (bindings.size()) { - return from_utf8(bindings.begin()->print()); + return bindings.begin()->print(); } else { lyxerr[Debug::KBMAP] << "No binding for " diff --git a/src/frontends/LyXKeySym.h b/src/frontends/LyXKeySym.h index 4e1eb406d8..b5b536b8d9 100644 --- a/src/frontends/LyXKeySym.h +++ b/src/frontends/LyXKeySym.h @@ -16,6 +16,8 @@ #include "key_state.h" +#include "support/docstring.h" + #include @@ -58,7 +60,7 @@ public: * Return a string describing the KeySym with modifier mod. * This should use the native UI format when applicable */ - virtual std::string const print(key_modifier::state mod) const = 0; + virtual docstring const print(key_modifier::state mod) const = 0; }; diff --git a/src/frontends/qt4/QLPopupMenu.C b/src/frontends/qt4/QLPopupMenu.C index 03c221ff50..3acc391ee0 100644 --- a/src/frontends/qt4/QLPopupMenu.C +++ b/src/frontends/qt4/QLPopupMenu.C @@ -27,11 +27,6 @@ #include "debug.h" -#ifdef Q_WS_MACX -#include "kbmap.h" -#include "QLyXKeySym.h" -#endif - using std::make_pair; using std::string; using std::pair; @@ -146,31 +141,10 @@ docstring const QLPopupMenu::getLabel(MenuItem const & mi) /// \todo Mac specific binding handling. void QLPopupMenu::addBinding(docstring & label, MenuItem const & mi) { -#ifndef Q_WS_MACX - - docstring const binding(mi.binding()); - if (!binding.empty()) { - label += char_type('\t') + binding; - } - -#else - /* There are two constraints on Qt/Mac: (1) - the bindings require a unicode string to be - represented meaningfully and std::string - does not work (2) only 1-key bindings can - be represented in menus. - - This is why the unpleasant hack bellow is - needed (JMarc) - */ -/* pair - binding = toplevel_keymap->find1keybinding(mi.func()); - if (binding.first) { - QLyXKeySym const *key = static_cast(binding.first); - label += '\t' + key->qprint(binding.second); - } -*/ -#endif + docstring const binding(mi.binding()); + if (!binding.empty()) { + label += '\t' + binding; + } } /// \todo Fix Mac specific menu hack diff --git a/src/frontends/qt4/QLyXKeySym.C b/src/frontends/qt4/QLyXKeySym.C index 7580dc2e11..a6450ed1aa 100644 --- a/src/frontends/qt4/QLyXKeySym.C +++ b/src/frontends/qt4/QLyXKeySym.C @@ -211,7 +211,7 @@ size_t QLyXKeySym::getUCSEncoded() const } -QString const QLyXKeySym::qprint(key_modifier::state mod) const +docstring const QLyXKeySym::print(key_modifier::state mod) const { int tmpkey = key_; @@ -222,13 +222,7 @@ QString const QLyXKeySym::qprint(key_modifier::state mod) const if (mod & key_modifier::alt) tmpkey += Qt::ALT; - return QKeySequence(tmpkey).toString(); -} - - -string const QLyXKeySym::print(key_modifier::state mod) const -{ - return fromqstr(qprint(mod)); + return qstring_to_ucs4(QKeySequence(tmpkey).toString()); } diff --git a/src/frontends/qt4/QLyXKeySym.h b/src/frontends/qt4/QLyXKeySym.h index d2427e57d6..6060189b2c 100644 --- a/src/frontends/qt4/QLyXKeySym.h +++ b/src/frontends/qt4/QLyXKeySym.h @@ -59,10 +59,7 @@ public: virtual size_t getUCSEncoded() const; /// Return a human-readable version of a key+modifier pair. - virtual std::string const print(key_modifier::state mod) const; - - /// - QString const qprint(key_modifier::state mod) const; + virtual docstring const print(key_modifier::state mod) const; /// int key() const { diff --git a/src/kbmap.C b/src/kbmap.C index b744f9d88f..fd55a7c5ff 100644 --- a/src/kbmap.C +++ b/src/kbmap.C @@ -55,7 +55,7 @@ string const kb_keymap::printKeySym(LyXKeySym const & key, } -string const kb_keymap::printKey(kb_key const & key) const +docstring const kb_keymap::printKey(kb_key const & key) const { return key.code->print(key.mod.first); } @@ -220,9 +220,9 @@ kb_keymap::lookup(LyXKeySymPtr key, } -string const kb_keymap::print() const +docstring const kb_keymap::print() const { - string buf; + docstring buf; Table::const_iterator end = table.end(); for (Table::const_iterator cit = table.begin(); cit != end; ++cit) { buf += printKey((*cit)); @@ -252,7 +252,7 @@ void kb_keymap::defkey(kb_sequence * seq, if (r + 1 == seq->length()) { lyxerr[Debug::KBMAP] << "Warning: New binding for '" - << seq->print() + << to_utf8(seq->print()) << "' is overriding old binding..." << endl; if (it->table.get()) { @@ -262,7 +262,8 @@ void kb_keymap::defkey(kb_sequence * seq, it->func.origin = FuncRequest::KEYBOARD; return; } else if (!it->table.get()) { - lyxerr << "Error: New binding for '" << seq->print() + lyxerr << "Error: New binding for '" + << to_utf8(seq->print()) << "' is overriding old binding..." << endl; return; @@ -289,9 +290,9 @@ void kb_keymap::defkey(kb_sequence * seq, } -string const kb_keymap::printbindings(FuncRequest const & func) const +docstring const kb_keymap::printbindings(FuncRequest const & func) const { - std::ostringstream res; + odocstringstream res; Bindings bindings = findbindings(func); for (Bindings::const_iterator cit = bindings.begin(); cit != bindings.end() ; ++cit) diff --git a/src/kbmap.h b/src/kbmap.h index edadfaa9c6..029a4e1b4e 100644 --- a/src/kbmap.h +++ b/src/kbmap.h @@ -19,6 +19,8 @@ #include "frontends/key_state.h" #include "frontends/LyXKeySym.h" +#include "support/docstream.h" + #include #include @@ -44,7 +46,7 @@ public: bool read(std::string const & bind_file); /// print all available keysyms - std::string const print() const; + docstring const print() const; /** * Look up a key press in the keymap. @@ -64,7 +66,7 @@ public: Bindings findbindings(FuncRequest const & func) const; /// Given an action, print the keybindings. - std::string const printbindings(FuncRequest const & func) const; + docstring const printbindings(FuncRequest const & func) const; /** * Given an action, find the first 1-key binding (if it exists). @@ -109,7 +111,7 @@ private: unsigned int r = 0); /// Returns a string of the given key - std::string const printKey(kb_key const & key) const; + docstring const printKey(kb_key const & key) const; /** * Given an action, find all keybindings diff --git a/src/kbsequence.C b/src/kbsequence.C index dc1706dda6..f37afa9576 100644 --- a/src/kbsequence.C +++ b/src/kbsequence.C @@ -130,9 +130,9 @@ string::size_type kb_sequence::parse(string const & s) } -string const kb_sequence::print() const +docstring const kb_sequence::print() const { - string buf; + docstring buf; //if (deleted_) // return buf; @@ -151,16 +151,16 @@ string const kb_sequence::print() const } -string const kb_sequence::printOptions() const +docstring const kb_sequence::printOptions() const { - string buf; + docstring buf; buf += print(); if (!curmap) return buf; - buf += to_utf8(_(" options: ")); + buf += _(" options: "); buf += curmap->print(); return buf; } diff --git a/src/kbsequence.h b/src/kbsequence.h index 036cdcf43b..6fa089880c 100644 --- a/src/kbsequence.h +++ b/src/kbsequence.h @@ -65,13 +65,13 @@ public: * Return the current sequence as a string. * @see parse() */ - std::string const print() const; + docstring const print() const; /** * Return the current sequence and available options as * a string. No options are added if no curmap kb map exists. */ - std::string const printOptions() const; + docstring const printOptions() const; /// Mark the sequence as deleted. void mark_deleted(); diff --git a/src/lyxfunc.C b/src/lyxfunc.C index 1ece1addda..35edfe2e1b 100644 --- a/src/lyxfunc.C +++ b/src/lyxfunc.C @@ -293,7 +293,7 @@ void LyXFunc::processKeySym(LyXKeySymPtr keysym, key_modifier::state state) lyxerr << BOOST_CURRENT_FUNCTION << " Key [action=" << func.action << "][" - << keyseq->print() << ']' + << to_utf8(keyseq->print()) << ']' << endl; } @@ -302,7 +302,7 @@ void LyXFunc::processKeySym(LyXKeySymPtr keysym, key_modifier::state state) // num_bytes == 0? (Lgb) if (keyseq->length() > 1) { - lyx_view_->message(from_utf8(keyseq->print())); + lyx_view_->message(keyseq->print()); } @@ -786,7 +786,7 @@ void LyXFunc::dispatch(FuncRequest const & cmd) case LFUN_COMMAND_PREFIX: BOOST_ASSERT(lyx_view_); - lyx_view_->message(from_utf8(keyseq->printOptions())); + lyx_view_->message(keyseq->printOptions()); break; case LFUN_COMMAND_EXECUTE: @@ -807,7 +807,7 @@ void LyXFunc::dispatch(FuncRequest const & cmd) case LFUN_META_PREFIX: meta_fake_bit = key_modifier::alt; - setMessage(from_utf8(keyseq->print())); + setMessage(keyseq->print()); break; case LFUN_BUFFER_TOGGLE_READ_ONLY: @@ -1167,7 +1167,7 @@ void LyXFunc::dispatch(FuncRequest const & cmd) break; case LFUN_SERVER_NOTIFY: - dispatch_buffer = from_utf8(keyseq->print()); + dispatch_buffer = keyseq->print(); theLyXServer().notifyClient(to_utf8(dispatch_buffer)); break; @@ -1763,7 +1763,7 @@ void LyXFunc::sendDispatchMessage(docstring const & msg, FuncRequest const & cmd } } - string const shortcuts = theTopLevelKeymap().printbindings(cmd); + string const shortcuts = to_utf8(theTopLevelKeymap().printbindings(cmd)); if (!shortcuts.empty()) comname += ": " + shortcuts; @@ -2028,12 +2028,12 @@ string const LyXFunc::viewStatusMessage() { // When meta-fake key is pressed, show the key sequence so far + "M-". if (wasMetaKey()) - return keyseq->print() + "M-"; + return to_utf8(keyseq->print() + "M-"); // Else, when a non-complete key sequence is pressed, // show the available options. if (keyseq->length() > 0 && !keyseq->deleted()) - return keyseq->printOptions(); + return to_utf8(keyseq->printOptions()); if (!view()->buffer()) return to_utf8(_("Welcome to LyX!"));