X-Git-Url: https://git.quassel-irc.org/?a=blobdiff_plain;f=src%2Fqtui%2Fchatscene.cpp;h=89d4422a6f366d018f8efaf8c08614a96babd5eb;hb=2ab3040da0e42f4afdd282e34f0d8b089020a73d;hp=d778df2346c7324bca2e720a9f8580e6a1d784a9;hpb=8c171717381424c896b9f720db203ddb815c76e1;p=quassel.git diff --git a/src/qtui/chatscene.cpp b/src/qtui/chatscene.cpp index d778df23..89d4422a 100644 --- a/src/qtui/chatscene.cpp +++ b/src/qtui/chatscene.cpp @@ -22,6 +22,7 @@ #include #include #include +#include #include "chatitem.h" #include "chatline.h" @@ -38,9 +39,9 @@ const qreal minContentsWidth = 200; -class ClearWebPreviewEvent : public QEvent { +class ChatScene::ClearWebPreviewEvent : public QEvent { public: - inline ClearWebPreviewEvent() : QEvent(QEvent::User) {} + inline ClearWebPreviewEvent() : QEvent((QEvent::Type)ChatScene::ClearWebPreviewEventType) {} }; ChatScene::ChatScene(QAbstractItemModel *model, const QString &idString, qreal width, QObject *parent) @@ -93,6 +94,9 @@ ChatScene::ChatScene(QAbstractItemModel *model, const QString &idString, qreal w webPreview.delayTimer.setSingleShot(true); connect(&webPreview.delayTimer, SIGNAL(timeout()), this, SLOT(showWebPreview())); + + // installEventFilter(this); + setItemIndexMethod(QGraphicsScene::NoIndex); } ChatScene::~ChatScene() { @@ -188,6 +192,10 @@ void ChatScene::rowsInserted(const QModelIndex &index, int start, int end) { } } + // check if all went right + Q_ASSERT(start == 0 || _lines.at(start - 1)->pos().y() + _lines.at(start - 1)->height() == _lines.at(start)->pos().y()); + Q_ASSERT(end + 1 == _lines.count() || _lines.at(end)->pos().y() + _lines.at(end)->height() == _lines.at(end + 1)->pos().y()); + if(!atBottom) { if(start < _firstLineRow) { int prevFirstLineRow = _firstLineRow + (end - start + 1); @@ -199,10 +207,9 @@ void ChatScene::rowsInserted(const QModelIndex &index, int start, int end) { _firstLineRow = -1; } updateSceneRect(); - if(atBottom) { - emit lastLineChanged(_lines.last()); + if(atBottom || (!atTop && !moveTop)) { + emit lastLineChanged(_lines.last(), h); } - } void ChatScene::rowsAboutToBeRemoved(const QModelIndex &parent, int start, int end) { @@ -557,14 +564,17 @@ void ChatScene::updateSceneRect(qreal width) { void ChatScene::updateSceneRect(const QRectF &rect) { _sceneRect = rect; setSceneRect(rect); + update(); } void ChatScene::customEvent(QEvent *event) { - if(event->type() != QEvent::User) + switch(event->type()) { + case ClearWebPreviewEventType: + clearWebPreviewEvent((ClearWebPreviewEvent *)event); + break; + default: return; - - event->accept(); - clearWebPreviewEvent(); + } } void ChatScene::loadWebPreview(ChatItem *parentItem, const QString &url, const QRectF &urlRect) { @@ -620,13 +630,13 @@ void ChatScene::showWebPreview() { #endif } -void ChatScene::clearWebPreviewEvent() { +void ChatScene::clearWebPreviewEvent(ClearWebPreviewEvent *event) { #ifdef HAVE_WEBKIT + event->accept(); if(webPreview.previewItem) { - if(!webPreview.delayTimer.isActive()) + if(webPreview.previewItem->scene()) { removeItem(webPreview.previewItem); - else - webPreview.delayTimer.stop(); + } delete webPreview.previewItem; webPreview.previewItem = 0; } @@ -635,3 +645,9 @@ void ChatScene::clearWebPreviewEvent() { webPreview.urlRect = QRectF(); #endif } + +bool ChatScene::eventFilter(QObject *watched, QEvent *event) { + qDebug() << watched << event; + return false; +} +