From: John Levon Date: Thu, 12 Dec 2002 13:46:06 +0000 (+0000) Subject: key4.diff X-Git-Tag: 1.6.10~17815 X-Git-Url: https://git.lyx.org/gitweb/?a=commitdiff_plain;h=15dae27d9e00e0261a36d9f4e505e4e1ff28e8a7;p=features.git key4.diff git-svn-id: svn://svn.lyx.org/lyx/lyx-devel/trunk@5808 a592a061-630c-0410-9148-cb99ea01b6c8 --- diff --git a/src/ChangeLog b/src/ChangeLog index 40a7dd1c44..e1bbdc43b8 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,3 +1,9 @@ +2002-12-12 John Levon + + * lyxfunc.C: use LyXKeySym->isText() as last-ditch + insert. Only remove shift modifier under strict + circumstances. + 2002-12-09 Lars Gullik Bjønnes * MenuBackend.C (expandToc): fix crash. diff --git a/src/frontends/ChangeLog b/src/frontends/ChangeLog index 6f7b75f445..425adc7e7d 100644 --- a/src/frontends/ChangeLog +++ b/src/frontends/ChangeLog @@ -1,3 +1,7 @@ +2002-12-12 John Levon + + * LyXKeySym.h: add isText() + 2002-12-03 Lars Gullik Bjønnes * screen.C (fitCursor): remove usleep thingie diff --git a/src/frontends/LyXKeySym.h b/src/frontends/LyXKeySym.h index 84b9a869f9..8765b685a0 100644 --- a/src/frontends/LyXKeySym.h +++ b/src/frontends/LyXKeySym.h @@ -36,6 +36,9 @@ public: /// Is this a modifier key only? virtual bool isModifier() const = 0; + /// Is this normal insertable text ? (last ditch attempt only) + virtual bool isText() const { return false; } + /// What is the symbolic name of this key? F.ex. "Return" or "c" virtual string getSymbolName() const = 0; diff --git a/src/frontends/qt2/ChangeLog b/src/frontends/qt2/ChangeLog index d6dc81d23f..fa60d96359 100644 --- a/src/frontends/qt2/ChangeLog +++ b/src/frontends/qt2/ChangeLog @@ -1,3 +1,10 @@ +2002-12-12 John Levon + + * QLyxKeySym.h: + * QLyXKeySym.C: + * qlkey.h: implement isText() to allow us to insert + unrecognised text + 2002-12-11 John Levon * qfont_loader.h: diff --git a/src/frontends/qt2/QLyXKeySym.C b/src/frontends/qt2/QLyXKeySym.C index 6d787d5044..7e7b160ba9 100644 --- a/src/frontends/qt2/QLyXKeySym.C +++ b/src/frontends/qt2/QLyXKeySym.C @@ -34,6 +34,7 @@ void QLyXKeySym::set(QKeyEvent * ev) { key_ = ev->key(); text_ = ev->text(); + lyxerr[Debug::KEY] << "Setting key to " << key_ << ", " << text_.latin1() << endl; } @@ -41,19 +42,23 @@ void QLyXKeySym::init(string const & symbolname) { key_ = string_to_qkey(symbolname); text_ = symbolname.c_str(); - lyxerr[Debug::KEY] << "Init key to " << key_ << ", " << text_ << endl; + lyxerr[Debug::KEY] << "Init key to " << key_ << ", " << text_.latin1() << endl; } bool QLyXKeySym::isOK() const { - return ! key_ == 0; + bool const ok(!(text_.isEmpty() && key_ == Qt::Key_unknown)); + lyxerr[Debug::KEY] << "isOK is " << ok << endl; + return ok; } - + bool QLyXKeySym::isModifier() const { - return q_is_modifier(key_); + bool const mod(q_is_modifier(key_)); + lyxerr[Debug::KEY] << "isMod is " << mod << endl; + return mod; } @@ -78,6 +83,20 @@ char QLyXKeySym::getISOEncoded() const } +bool QLyXKeySym::isText() const +{ + if (text_.isEmpty()) { + lyxerr[Debug::KEY] << "text_ empty, isText() == false" << endl; + return false; + } + + QChar const c(text_[0]); + lyxerr[Debug::KEY] << "isText for key " << key_ + << " isPrint is " << c.isPrint() << endl; + return c.isPrint(); +} + + bool operator==(LyXKeySym const & k1, LyXKeySym const & k2) { // note we ignore text_ here (non-strict ==), because diff --git a/src/frontends/qt2/QLyXKeySym.h b/src/frontends/qt2/QLyXKeySym.h index e104b262f9..5ee71c405d 100644 --- a/src/frontends/qt2/QLyXKeySym.h +++ b/src/frontends/qt2/QLyXKeySym.h @@ -50,6 +50,9 @@ public: /// return the LyX symbolic name virtual string getSymbolName() const; + /// Is this normal insertable text ? (last ditch attempt only) + virtual bool isText() const; + /** * Return the value of the keysym into the local ISO encoding. * This converts the LyXKeySym to a 8-bit encoded character. diff --git a/src/frontends/qt2/qlkey.h b/src/frontends/qt2/qlkey.h index ba62ad9542..c56909338a 100644 --- a/src/frontends/qt2/qlkey.h +++ b/src/frontends/qt2/qlkey.h @@ -34,10 +34,6 @@ bool q_is_modifier(int qkey) case Qt::Key_Meta: case Qt::Key_Alt: return true; - - // AltGr becomes Key_unknown on at least one keyboard - case Qt::Key_unknown: - return true; } return false; } diff --git a/src/lyxfunc.C b/src/lyxfunc.C index 179156e157..6491f8649e 100644 --- a/src/lyxfunc.C +++ b/src/lyxfunc.C @@ -171,6 +171,7 @@ void LyXFunc::processKeySym(LyXKeySymPtr keysym, } if (keysym->isModifier()) { + lyxerr[Debug::KEY] << "isModifier true" << endl; return; } @@ -214,16 +215,24 @@ void LyXFunc::processKeySym(LyXKeySymPtr keysym, owner->message(keyseq.print()); } - if (action == LFUN_UNKNOWN_ACTION) { - // It is unknown, but what if we remove all - // the modifiers? (Lgb) + + // Maybe user can only reach the key via holding down shift. + // Let's see. But only if shift is the only modifier + if (action == LFUN_UNKNOWN_ACTION && state == key_modifier::shift) { + lyxerr[Debug::KEY] << "Trying without shift" << endl; action = keyseq.addkey(keysym, key_modifier::none); - - lyxerr[Debug::KEY] << "Removing modifiers...\n" - << "Action now set to [" - << action << ']' << endl; - - if (action == LFUN_UNKNOWN_ACTION) { + lyxerr[Debug::KEY] << "Action now " << action << endl; + } + + if (action == LFUN_UNKNOWN_ACTION) { + // Hmm, we didn't match any of the keysequences. See + // if it's normal insertable text not already covered + // by a binding + if (keysym->isText() && keyseq.length() == 1) { + lyxerr[Debug::KEY] << "isText() is true, inserting." << endl; + action = LFUN_SELFINSERT; + } else { + lyxerr[Debug::KEY] << "Unknown, !isText() - giving up" << endl; owner->message(_("Unknown function.")); return; } @@ -233,6 +242,7 @@ void LyXFunc::processKeySym(LyXKeySymPtr keysym, char c = keysym->getISOEncoded(); string argument; + // FIXME: why ... if (c != 0) argument = c;