X-Git-Url: https://git.quassel-irc.org/?p=quassel.git;a=blobdiff_plain;f=src%2Fqtui%2Fchatscene.cpp;h=89d4422a6f366d018f8efaf8c08614a96babd5eb;hp=f68a81e2ea75143ad76440d6b8dc17fa0d692329;hb=8c785cc905a648fd48838c99387da21a97ff6819;hpb=0a3fcc38ea09618d41280e2fcb20e73fb10b8ceb diff --git a/src/qtui/chatscene.cpp b/src/qtui/chatscene.cpp index f68a81e2..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) { @@ -573,8 +583,6 @@ void ChatScene::loadWebPreview(ChatItem *parentItem, const QString &url, const Q Q_UNUSED(url) Q_UNUSED(urlRect) #else - qDebug() << "load call" << this << webPreview.previewItem; - if(webPreview.parentItem != parentItem) webPreview.parentItem = parentItem; @@ -607,7 +615,6 @@ void ChatScene::clearWebPreview(ChatItem *parentItem) { #ifndef HAVE_WEBKIT Q_UNUSED(parentItem) #else - qDebug() << "clear call" << this << webPreview.previewItem; if(parentItem == 0 || webPreview.parentItem == parentItem) { // posting an event ensures that the item will not be removed as // the result of another event. this could result in bad segfaults @@ -618,22 +625,19 @@ void ChatScene::clearWebPreview(ChatItem *parentItem) { void ChatScene::showWebPreview() { #ifdef HAVE_WEBKIT - qDebug() << "show event" << this << webPreview.previewItem; if(webPreview.previewItem) addItem(webPreview.previewItem); #endif } -void ChatScene::clearWebPreviewEvent() { +void ChatScene::clearWebPreviewEvent(ClearWebPreviewEvent *event) { #ifdef HAVE_WEBKIT - qDebug() << "clear event" << this << webPreview.previewItem; + event->accept(); if(webPreview.previewItem) { -// if(webPreview.previewItem->scene()) { -// removeItem(webPreview.previewItem); -// items(); -// } + if(webPreview.previewItem->scene()) { + removeItem(webPreview.previewItem); + } delete webPreview.previewItem; - items(); webPreview.previewItem = 0; } webPreview.parentItem = 0; @@ -641,3 +645,9 @@ void ChatScene::clearWebPreviewEvent() { webPreview.urlRect = QRectF(); #endif } + +bool ChatScene::eventFilter(QObject *watched, QEvent *event) { + qDebug() << watched << event; + return false; +} +