X-Git-Url: https://git.quassel-irc.org/?p=quassel.git;a=blobdiff_plain;f=src%2Fqtui%2Fchatview.cpp;h=e7386efc1fc2bca39f01905af0529145396867a4;hp=4c3994fc9a80eb882b3c548ac239a2253c8fbb28;hb=e472996a053e11d21ffef4a30f7d37461239cdab;hpb=27302bba72a29977e81b9a0b2d8cde3a62ebc818 diff --git a/src/qtui/chatview.cpp b/src/qtui/chatview.cpp index 4c3994fc..e7386efc 100644 --- a/src/qtui/chatview.cpp +++ b/src/qtui/chatview.cpp @@ -36,7 +36,8 @@ ChatView::ChatView(BufferId bufferId, QWidget *parent) : QGraphicsView(parent), AbstractChatView(), _bufferContainer(0), - _currentScaleFactor(1) + _currentScaleFactor(1), + _invalidateFilter(false) { QList filterList; filterList.append(bufferId); @@ -48,7 +49,8 @@ ChatView::ChatView(MessageFilter *filter, QWidget *parent) : QGraphicsView(parent), AbstractChatView(), _bufferContainer(0), - _currentScaleFactor(1) + _currentScaleFactor(1), + _invalidateFilter(false) { init(filter); } @@ -76,8 +78,8 @@ void ChatView::init(MessageFilter *filter) { connect(verticalScrollBar(), SIGNAL(valueChanged(int)), this, SLOT(verticalScrollbarChanged(int))); // only connect if client is synched with a core - if(Client::isSynced()) - connect(Client::ignoreListManager(), SIGNAL(ignoreListChanged()), filter, SLOT(invalidateFilter())); + if(Client::isConnected()) + connect(Client::ignoreListManager(), SIGNAL(ignoreListChanged()), this, SLOT(invalidateFilter())); } bool ChatView::event(QEvent *event) { @@ -89,8 +91,8 @@ bool ChatView::event(QEvent *event) { case Qt::Key_PageUp: case Qt::Key_PageDown: if(!verticalScrollBar()->isVisible()) { - scene()->requestBacklog(); - return true; + scene()->requestBacklog(); + return true; } default: break; @@ -104,6 +106,11 @@ bool ChatView::event(QEvent *event) { } } + if(event->type() == QEvent::Show) { + if(_invalidateFilter) + invalidateFilter(); + } + return QGraphicsView::event(event); } @@ -213,3 +220,16 @@ void ChatView::zoomOriginal() { _currentScaleFactor = 1; scene()->setWidth(viewport()->width() - 2); } + +void ChatView::invalidateFilter() { + // if this is the currently selected chatview + // invalidate immediately + if(isVisible()) { + _scene->filter()->invalidateFilter(); + _invalidateFilter = false; + } + // otherwise invalidate whenever the view is shown + else { + _invalidateFilter = true; + } +}