X-Git-Url: https://git.quassel-irc.org/?a=blobdiff_plain;f=src%2Fqtui%2Fchatview.cpp;h=f8fe6b8fe253aa187cc55aa08066a62644b4a84b;hb=9e1638561c6279b522d16a5974a6c47454824f63;hp=c8d6699be2abaa11c7253e91e2f541a680cff2fa;hpb=a540a0285feef171e16fd6225b0e045fc5fc52e4;p=quassel.git diff --git a/src/qtui/chatview.cpp b/src/qtui/chatview.cpp index c8d6699b..f8fe6b8f 100644 --- a/src/qtui/chatview.cpp +++ b/src/qtui/chatview.cpp @@ -28,12 +28,16 @@ #include "chatview.h" #include "client.h" #include "messagefilter.h" +#include "qtui.h" +#include "qtuistyle.h" +#include "clientignorelistmanager.h" ChatView::ChatView(BufferId bufferId, QWidget *parent) : QGraphicsView(parent), AbstractChatView(), _bufferContainer(0), - _currentScaleFactor(1) + _currentScaleFactor(1), + _invalidateFilter(false) { QList filterList; filterList.append(bufferId); @@ -45,7 +49,8 @@ ChatView::ChatView(MessageFilter *filter, QWidget *parent) : QGraphicsView(parent), AbstractChatView(), _bufferContainer(0), - _currentScaleFactor(1) + _currentScaleFactor(1), + _invalidateFilter(false) { init(filter); } @@ -71,6 +76,10 @@ void ChatView::init(MessageFilter *filter) { setScene(_scene); 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()), this, SLOT(invalidateFilter())); } bool ChatView::event(QEvent *event) { @@ -97,6 +106,11 @@ bool ChatView::event(QEvent *event) { } } + if(event->type() == QEvent::Show) { + if(_invalidateFilter) + invalidateFilter(); + } + return QGraphicsView::event(event); } @@ -163,6 +177,10 @@ void ChatView::verticalScrollbarChanged(int newPos) { } } _lastScrollbarPos = newPos; + + // FIXME: Fugly workaround for the ChatView scrolling up 1px on buffer switch + if(vbar->maximum() - newPos <= 2) + vbar->setValue(vbar->maximum()); } MsgId ChatView::lastMsgId() const { @@ -202,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; + } +}