X-Git-Url: https://git.quassel-irc.org/?p=quassel.git;a=blobdiff_plain;f=src%2Fuisupport%2Finputline.cpp;h=745a3e332ee57d0d30a6627c9f1eb0feacf9aab4;hp=b48c053d5e22bb695ef5c6b8959cd7c21e246137;hb=53c7a85fd154fa18eab6217bfd4b173307c47e5d;hpb=ee9eb6726ae65a85fbb5e98e65d038d410580146 diff --git a/src/uisupport/inputline.cpp b/src/uisupport/inputline.cpp index b48c053d..745a3e33 100644 --- a/src/uisupport/inputline.cpp +++ b/src/uisupport/inputline.cpp @@ -18,8 +18,8 @@ * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * ***************************************************************************/ +#include "bufferview.h" #include "inputline.h" - #include "tabcompleter.h" InputLine::InputLine(QWidget *parent) @@ -34,25 +34,46 @@ InputLine::InputLine(QWidget *parent) InputLine::~InputLine() { } +bool InputLine::eventFilter(QObject *watched, QEvent *event) { + if(event->type() != QEvent::KeyPress) + return false; + + // keys from BufferView should be sent to (and focus) the input line + BufferView *view = qobject_cast(watched); + if(view) { + QKeyEvent *keyEvent = static_cast(event); + if(keyEvent->text().length() == 1) { // normal key press + QChar c = keyEvent->text().at(0); + if(c.isLetterOrNumber() || c.isSpace() || c.isPunct() || c.isSymbol()) { + setFocus(); + keyPressEvent(keyEvent); + return true; + } else + return false; + } + } + return false; +} + void InputLine::keyPressEvent(QKeyEvent * event) { switch(event->key()) { case Qt::Key_Up: event->accept(); addToHistory(text(), true); - + if(idx > 0) { idx--; showHistoryEntry(); } break; - + case Qt::Key_Down: event->accept(); addToHistory(text(), true); - + if(idx < history.count()) { idx++; if(idx < history.count() || tempHistory.contains(idx)) // tempHistory might have an entry for idx == history.count() + 1 @@ -65,7 +86,7 @@ void InputLine::keyPressEvent(QKeyEvent * event) { } break; - + case Qt::Key_Select: // for Qtopia emit returnPressed(); @@ -79,7 +100,7 @@ bool InputLine::addToHistory(const QString &text, bool temporary) { return false; Q_ASSERT(0 <= idx && idx <= history.count()); - + if(history.isEmpty() || text != history[idx - (int)(idx == history.count())]) { // if an entry of the history is changed, we remember it and show it again at this // position until a line was actually sent @@ -103,22 +124,22 @@ void InputLine::on_returnPressed() { } void InputLine::on_textChanged(QString newText) { - QStringList lineSeperators; - lineSeperators << QString("\r\n") + QStringList lineSeparators; + lineSeparators << QString("\r\n") << QString('\n') << QString('\r'); - + QString lineSep; - foreach(QString seperator, lineSeperators) { - if(newText.contains(seperator)) { - lineSep = seperator; + foreach(QString separator, lineSeparators) { + if(newText.contains(separator)) { + lineSep = separator; break; } } if(lineSep.isEmpty()) return; - + if(newText.contains(lineSep)) { clear(); QString line = newText.section(lineSep, 0, 0);