X-Git-Url: https://git.quassel-irc.org/?p=quassel.git;a=blobdiff_plain;f=src%2Fuisupport%2Finputline.cpp;h=355845db34f04d5398c7ea83b49f97e4546cad1b;hp=b74e10eccab787e6d1db352f26f4f50c66b5d5ab;hb=b7adadd990f9647f94b92f42d3b0a6d7d6223ebd;hpb=b2c1179d290dc97f2c8497db9ed0c8adcc679ed7 diff --git a/src/uisupport/inputline.cpp b/src/uisupport/inputline.cpp index b74e10ec..355845db 100644 --- a/src/uisupport/inputline.cpp +++ b/src/uisupport/inputline.cpp @@ -18,6 +18,8 @@ * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * ***************************************************************************/ +#include "bufferview.h" + #include "inputline.h" #include "tabcompleter.h" @@ -33,6 +35,27 @@ 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 && !(keyEvent->modifiers() & (Qt::ControlModifier ^ Qt::AltModifier)) ) { // 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: @@ -102,15 +125,15 @@ 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; } } @@ -118,14 +141,39 @@ void InputLine::on_textChanged(QString newText) { if(lineSep.isEmpty()) return; - if(newText.contains(lineSep)) { + QStringList lines = newText.split(lineSep); + clear(); + + if(lines.count() > 4) { + QString msg = tr("Do you really want to paste %1 lines?").arg(lines.count()); + msg += "

"; + for(int i = 0; i < 3; i++) { + msg += lines[i].left(40); + if(lines[i].count() > 40) + msg += "..."; + msg += "
"; + } + msg += "...

"; + QMessageBox question(QMessageBox::NoIcon, tr("Paste Protection"), msg, QMessageBox::Yes|QMessageBox::No); + question.setDefaultButton(QMessageBox::No); + question.setWindowFlags(question.windowFlags() | Qt::Sheet); + if(question.exec() == QMessageBox::No) + return; + } + + foreach(QString line, lines) { clear(); - QString line = newText.section(lineSep, 0, 0); - QString remainder = newText.section(lineSep, 1); insert(line); emit returnPressed(); - insert(remainder); } +// if(newText.contains(lineSep)) { +// clear(); +// QString line = newText.section(lineSep, 0, 0); +// QString remainder = newText.section(lineSep, 1); +// insert(line); +// emit returnPressed(); +// insert(remainder); +// } } void InputLine::resetLine() {