X-Git-Url: https://git.quassel-irc.org/?p=quassel.git;a=blobdiff_plain;f=src%2Fqtui%2Finputwidget.cpp;h=c2ef731e21e5fa092f63305ac56ed699cdfe6c4d;hp=5f3167000b0308441a884486b878782ae2a899e5;hb=c19a8e707391d74a80e9e7d4ef46f496284d9f49;hpb=bcfd213c6c381e6d2344ceba4a82ed3f87a9fd3e diff --git a/src/qtui/inputwidget.cpp b/src/qtui/inputwidget.cpp index 5f316700..c2ef731e 100644 --- a/src/qtui/inputwidget.cpp +++ b/src/qtui/inputwidget.cpp @@ -22,6 +22,7 @@ #include "client.h" #include "networkmodel.h" +#include "jumpkeyhandler.h" InputWidget::InputWidget(QWidget *parent) : QWidget(parent), @@ -34,13 +35,20 @@ InputWidget::InputWidget(QWidget *parent) connect(ui.ownNick, SIGNAL(activated(QString)), this, SLOT(changeNick(QString))); connect(this, SIGNAL(userInput(BufferInfo, QString)), Client::instance(), SIGNAL(sendInput(BufferInfo, QString))); setFocusProxy(ui.inputEdit); + + ui.inputEdit->installEventFilter(new JumpKeyHandler(this)); } InputWidget::~InputWidget() { } void InputWidget::setModel(BufferModel *bufferModel) { + if(_bufferModel) { + disconnect(_bufferModel, 0, this, 0); + } _bufferModel = bufferModel; + connect(bufferModel, SIGNAL(dataChanged(QModelIndex, QModelIndex)), + this, SLOT(dataChanged(QModelIndex, QModelIndex))); } void InputWidget::setSelectionModel(QItemSelectionModel *selectionModel) { @@ -71,6 +79,15 @@ void InputWidget::currentChanged(const QModelIndex ¤t, const QModelIndex & ui.inputEdit->setEnabled(current.data(NetworkModel::ItemActiveRole).value()); } +void InputWidget::dataChanged(const QModelIndex &topLeft, const QModelIndex &bottomRight) { + QItemSelectionRange changedArea(topLeft, bottomRight); + QModelIndex currentIndex = Client::bufferModel()->currentIndex(); + if(changedArea.contains(currentIndex)) { + ui.inputEdit->setEnabled(currentIndex.data(NetworkModel::ItemActiveRole).value()); + } +}; + + const Network *InputWidget::currentNetwork() const { if(!validBuffer) return 0; @@ -79,7 +96,7 @@ const Network *InputWidget::currentNetwork() const { } void InputWidget::setNetwork(const Network *network) { - if(_networkId == network->networkId()) + if(!network || _networkId == network->networkId()) return; const Network *previousNet = Client::network(_networkId);