From e7075c718511b29622ca22127575a95b905d2118 Mon Sep 17 00:00:00 2001 From: Sebastian Goth Date: Sat, 19 Sep 2009 16:42:24 +0200 Subject: [PATCH] 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. --- src/qtui/chatview.cpp | 26 +++++++++++++++++++++++--- src/qtui/chatview.h | 2 ++ 2 files changed, 25 insertions(+), 3 deletions(-) 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; }; -- 2.20.1