X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2Fkbsequence.C;h=6bce8f44e95ea2cd88fe06ea8351c1ba3ef8d4a9;hb=9833278ed8cd7f85dbabcfe0e2e8747c5db2db3d;hp=a56440dfdf14613d200f4cc0aeab8c0aa32cf8e8;hpb=7ea7dabed1b72cc25dcbdc482ac006f2b61dacfd;p=lyx.git diff --git a/src/kbsequence.C b/src/kbsequence.C index a56440dfdf..6bce8f44e9 100644 --- a/src/kbsequence.C +++ b/src/kbsequence.C @@ -1,16 +1,12 @@ -/* This file is part of - * ====================================================== +/** + * \file kbsequence.C + * Copyright 1995-2002 the LyX Team + * Read the file COPYING * - * LyX, The Document Processor - * - * Copyright 1995 Matthias Ettrich - * Copyright 1995-2001 The LyX Team. - * - * ====================================================== */ + * \author John Levon + */ #include -//#include -#include #include "gettext.h" @@ -18,42 +14,34 @@ #pragma implementation #endif +#include "frontends/mouse_state.h" +#include "frontends/LyXKeySymFactory.h" #include "kbsequence.h" #include "kbmap.h" #include "commandtags.h" #include "debug.h" - -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::make_pair; -int kb_sequence::addkey(unsigned int key, unsigned int mod, unsigned int nmod) +int 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(mod + (nmod << 16)); + modifiers.push_back(make_pair(mod, nmod)); sequence.push_back(key); - ++length_; if (curmap) { return curmap->lookup(key, mod, this); } - + return LFUN_UNKNOWN_ACTION; } @@ -63,26 +51,27 @@ string::size_type kb_sequence::parse(string const & s) if (s.empty()) return 1; string::size_type i = 0; - unsigned int mod = 0; - unsigned int nmod = 0; + key_modifier::state mod = key_modifier::none; + key_modifier::state nmod = key_modifier::none; + while (i < s.length()) { if (s[i] == ' ') ++i; if (i >= s.length()) break; - + if (i + 1 < s.length() && s[i + 1] == '-') { switch (s[i]) { case 's': case 'S': - mod |= ShiftMask; + mod |= key_modifier::shift; i += 2; continue; case 'c': case 'C': - mod |= ControlMask; + mod |= key_modifier::ctrl; i += 2; continue; case 'm': case 'M': - mod |= Mod1Mask; + mod |= key_modifier::alt; i += 2; continue; default: @@ -92,15 +81,15 @@ string::size_type kb_sequence::parse(string const & s) && s[i + 2] == '-') { switch (s[i + 1]) { case 's': case 'S': - nmod |= ShiftMask; + nmod |= key_modifier::shift; i += 3; continue; case 'c': case 'C': - nmod |= ControlMask; + nmod |= key_modifier::ctrl; i += 3; continue; case 'm': case 'M': - nmod |= Mod1Mask; + nmod |= key_modifier::alt; i += 3; continue; default: @@ -111,23 +100,23 @@ string::size_type kb_sequence::parse(string const & s) string::size_type j = i; for (; j < s.length() && s[j] != ' '; ++j) tbuf += s[j]; // (!!!check bounds :-) + + LyXKeySymPtr key(LyXKeySymFactory::create()); + key->init(tbuf); - KeySym key = XStringToKeysym(tbuf.c_str()); - if (key == NoSymbol) { - lyxerr[Debug::KBMAP] - << "kbmap.C: No such keysym: " - << tbuf << endl; + if ( ! key->isOK() ) { return j; } + i = j; - + addkey(key, mod, nmod); - mod = 0; + mod = key_modifier::none; } } - + // empty sequence? - if (!length_) + if (sequence.size() == 0) return 0; // everything is fine @@ -139,14 +128,16 @@ string const kb_sequence::print() const { string buf; - if (deleted_) - return buf; + //if (deleted_) + // return buf; + + KeySequence::size_type i, length = sequence.size(); - for (vector::size_type i = 0; i < length_; ++i) { - buf += kb_keymap::printKeysym(sequence[i], modifiers[i] & 0xffff); + for (i = 0; i < length; ++i) { + buf += kb_keymap::printKeysym(sequence[i], modifiers[i].first); // append a blank - if (i + 1 < length_) { + if (i + 1 < length) { buf += ' '; } } @@ -175,23 +166,17 @@ void kb_sequence::mark_deleted() } -unsigned int kb_sequence::getsym() const +LyXKeySymPtr kb_sequence::getsym() const { - if (length_ == 0) return NoSymbol; - return sequence[length_ - 1]; + if (sequence.size() == 0) + return LyXKeySymPtr(LyXKeySymFactory::create()); + return sequence.back(); } -char kb_sequence::getiso() const +char kb_sequence::getLastKeyEncoded() 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); + return getsym()->getISOEncoded(); } @@ -203,6 +188,6 @@ void kb_sequence::reset() void kb_sequence::clear() { - length_ = 0; + sequence.clear(); reset(); }