X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2Fkbsequence.C;h=0d701cdb28ea982ad740bf828fecd98f9f4d7287;hb=65ca7003ba47b7348610393a9a0d2d309b4e9702;hp=4292a9b90b0e5b13dd64dc1bf09cc51c396a302a;hpb=97ef9131ba95f605a48d09595bd2ace0f993a55b;p=lyx.git diff --git a/src/kbsequence.C b/src/kbsequence.C index 4292a9b90b..0d701cdb28 100644 --- a/src/kbsequence.C +++ b/src/kbsequence.C @@ -1,62 +1,51 @@ -/* This file is part of - * ====================================================== +/** + * \file kbsequence.C + * This file is part of LyX, the document processor. + * Licence details can be found in the file COPYING. * - * LyX, The Document Processor + * \author Lars Gullik Bjønnes + * \author Jean-Marc Lasgouttes + * \author John Levon * - * Copyright 1995 Matthias Ettrich - * Copyright 1995-2001 The LyX Team. - * - * ====================================================== */ + * Full author contact details are available in file CREDITS. + */ #include -//#include -#include - -#include "gettext.h" -#ifdef __GNUG__ -#pragma implementation -#endif - -#include "frontends/mouse_state.h" #include "kbsequence.h" + +#include "gettext.h" #include "kbmap.h" -#include "commandtags.h" -#include "debug.h" +#include "lfuns.h" +#include "frontends/LyXKeySym.h" +#include "frontends/LyXKeySymFactory.h" using std::make_pair; -using std::vector; -using std::endl; -using std::hex; -using std::dec; - - -// The only modifiers that we handle. We want to throw away things -// like NumLock. -enum { ModsMask = ShiftMask | ControlMask | Mod1Mask }; +using std::string; -int kb_sequence::addkey(unsigned int key, key_modifier::state mod, key_modifier::state nmod) +FuncRequest const & +kb_sequence::addkey(LyXKeySymPtr key, + key_modifier::state mod, key_modifier::state nmod) { // adding a key to a deleted sequence // starts a new sequence if (deleted_) { deleted_ = false; - length_ = 0; sequence.clear(); modifiers.clear(); } modifiers.push_back(make_pair(mod, nmod)); sequence.push_back(key); - ++length_; if (curmap) { return curmap->lookup(key, mod, this); } - return LFUN_UNKNOWN_ACTION; + static FuncRequest unknown(LFUN_UNKNOWN_ACTION); + return unknown; } @@ -67,6 +56,7 @@ string::size_type kb_sequence::parse(string const & s) string::size_type i = 0; key_modifier::state mod = key_modifier::none; key_modifier::state nmod = key_modifier::none; + while (i < s.length()) { if (s[i] == ' ') ++i; @@ -114,13 +104,13 @@ string::size_type kb_sequence::parse(string const & s) for (; j < s.length() && s[j] != ' '; ++j) tbuf += s[j]; // (!!!check bounds :-) - KeySym key = XStringToKeysym(tbuf.c_str()); - if (key == NoSymbol) { - lyxerr[Debug::KBMAP] - << "kbmap.C: No such keysym: " - << tbuf << endl; + LyXKeySymPtr key(LyXKeySymFactory::create()); + key->init(tbuf); + + if ( ! key->isOK() ) { return j; } + i = j; addkey(key, mod, nmod); @@ -129,7 +119,7 @@ string::size_type kb_sequence::parse(string const & s) } // empty sequence? - if (!length_) + if (sequence.size() == 0) return 0; // everything is fine @@ -144,11 +134,13 @@ string const kb_sequence::print() const //if (deleted_) // return buf; - for (vector::size_type i = 0; i < length_; ++i) { - buf += kb_keymap::printKeysym(sequence[i], modifiers[i].first); + KeySequence::size_type i, length = sequence.size(); + + for (i = 0; i < length; ++i) { + buf += sequence[i]->print(modifiers[i].first); // append a blank - if (i + 1 < length_) { + if (i + 1 < length) { buf += ' '; } } @@ -177,26 +169,6 @@ void kb_sequence::mark_deleted() } -unsigned int kb_sequence::getsym() const -{ - if (length_ == 0) return NoSymbol; - return sequence[length_ - 1]; -} - - -char kb_sequence::getiso() const -{ - unsigned int const c = getsym(); - - lyxerr[Debug::KBMAP] << "Raw keysym: " - << hex << c << dec << endl; - lyxerr[Debug::KBMAP] << "byte 3: " - << hex << (c & 0xff00) << dec - << endl; - return kb_keymap::getiso(c); -} - - void kb_sequence::reset() { mark_deleted(); @@ -205,6 +177,6 @@ void kb_sequence::reset() void kb_sequence::clear() { - length_ = 0; + sequence.clear(); reset(); }