From: Sebastian Goth Date: Sat, 19 Sep 2009 14:42:24 +0000 (+0200) Subject: Invalidate messagefilter only for visible views X-Git-Tag: 0.5-rc2~27 X-Git-Url: https://git.quassel-irc.org/?p=quassel.git;a=commitdiff_plain;h=e7075c718511b29622ca22127575a95b905d2118 Invalidate messagefilter only for visible views After any changes to the ignore list, only invalidate filters for chatmonitor and the currently selected chatview. Other chatviews invalidate whenever they get shown. --- diff --git a/src/qtui/chatview.cpp b/src/qtui/chatview.cpp index 4c3994fc..f8fe6b8f 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); } @@ -77,7 +79,7 @@ void ChatView::init(MessageFilter *filter) { // only connect if client is synched with a core if(Client::isSynced()) - connect(Client::ignoreListManager(), SIGNAL(ignoreListChanged()), filter, SLOT(invalidateFilter())); + connect(Client::ignoreListManager(), SIGNAL(ignoreListChanged()), this, SLOT(invalidateFilter())); } bool ChatView::event(QEvent *event) { @@ -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; + } +} diff --git a/src/qtui/chatview.h b/src/qtui/chatview.h index 5969f728..d72328a9 100644 --- a/src/qtui/chatview.h +++ b/src/qtui/chatview.h @@ -68,6 +68,7 @@ private slots: void lastLineChanged(QGraphicsItem *chatLine, qreal offset); void mouseMoveWhileSelecting(const QPointF &scenePos); void scrollTimerTimeout(); + void invalidateFilter(); private: void init(MessageFilter *filter); @@ -78,6 +79,7 @@ private: qreal _currentScaleFactor; QTimer _scrollTimer; int _scrollOffset; + bool _invalidateFilter; };