projects
/
quassel.git
/ commitdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
| commitdiff |
tree
raw
|
patch
|
inline
| side by side (parent:
0a3fcc3
)
fixing auto scroll issues when chatlines are inserted (not appended) into the lower...
author
Marcus Eggenberger
<egs@quassel-irc.org>
Mon, 6 Oct 2008 12:59:41 +0000
(14:59 +0200)
committer
Marcus Eggenberger
<egs@quassel-irc.org>
Mon, 6 Oct 2008 12:59:41 +0000
(14:59 +0200)
src/client/messagemodel.cpp
patch
|
blob
|
history
src/qtui/chatscene.cpp
patch
|
blob
|
history
src/qtui/chatscene.h
patch
|
blob
|
history
src/qtui/chatview.cpp
patch
|
blob
|
history
src/qtui/chatview.h
patch
|
blob
|
history
diff --git
a/src/client/messagemodel.cpp
b/src/client/messagemodel.cpp
index
edc1117
..
28872dc
100644
(file)
--- a/
src/client/messagemodel.cpp
+++ b/
src/client/messagemodel.cpp
@@
-111,10
+111,13
@@
void MessageModel::insertMessageGroup(const QList<Message> &msglist) {
&& _messageList[prevIdx]->timeStamp() > msglist.value(0).timestamp()) {
beginRemoveRows(QModelIndex(), prevIdx, prevIdx);
MessageModelItem *oldItem = _messageList.takeAt(prevIdx);
&& _messageList[prevIdx]->timeStamp() > msglist.value(0).timestamp()) {
beginRemoveRows(QModelIndex(), prevIdx, prevIdx);
MessageModelItem *oldItem = _messageList.takeAt(prevIdx);
- if(msglist.last().timestamp() < oldItem->timeStamp())
- dayChangeItem = oldItem;
- else
- delete oldItem;
+ if(msglist.last().timestamp() < oldItem->timeStamp()) {
+ // we have to reinsert it (with changed msgId -> thus we need to recreate it)
+ Message dayChangeMsg = Message::ChangeOfDay(oldItem->timeStamp());
+ dayChangeMsg.setMsgId(msglist.last().msgId());
+ dayChangeItem = createMessageModelItem(dayChangeMsg);
+ }
+ delete oldItem;
endRemoveRows();
idx--;
}
endRemoveRows();
idx--;
}
diff --git
a/src/qtui/chatscene.cpp
b/src/qtui/chatscene.cpp
index
f68a81e
..
67415cc
100644
(file)
--- a/
src/qtui/chatscene.cpp
+++ b/
src/qtui/chatscene.cpp
@@
-199,8
+199,8
@@
void ChatScene::rowsInserted(const QModelIndex &index, int start, int end) {
_firstLineRow = -1;
}
updateSceneRect();
_firstLineRow = -1;
}
updateSceneRect();
- if(atBottom) {
- emit lastLineChanged(_lines.last());
+ if(atBottom
|| (!atTop && !moveTop)
) {
+ emit lastLineChanged(_lines.last()
, h
);
}
}
}
}
@@
-573,8
+573,6
@@
void ChatScene::loadWebPreview(ChatItem *parentItem, const QString &url, const Q
Q_UNUSED(url)
Q_UNUSED(urlRect)
#else
Q_UNUSED(url)
Q_UNUSED(urlRect)
#else
- qDebug() << "load call" << this << webPreview.previewItem;
-
if(webPreview.parentItem != parentItem)
webPreview.parentItem = parentItem;
if(webPreview.parentItem != parentItem)
webPreview.parentItem = parentItem;
@@
-607,7
+605,6
@@
void ChatScene::clearWebPreview(ChatItem *parentItem) {
#ifndef HAVE_WEBKIT
Q_UNUSED(parentItem)
#else
#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
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,7
+615,6
@@
void ChatScene::clearWebPreview(ChatItem *parentItem) {
void ChatScene::showWebPreview() {
#ifdef HAVE_WEBKIT
void ChatScene::showWebPreview() {
#ifdef HAVE_WEBKIT
- qDebug() << "show event" << this << webPreview.previewItem;
if(webPreview.previewItem)
addItem(webPreview.previewItem);
#endif
if(webPreview.previewItem)
addItem(webPreview.previewItem);
#endif
@@
-626,14
+622,11
@@
void ChatScene::showWebPreview() {
void ChatScene::clearWebPreviewEvent() {
#ifdef HAVE_WEBKIT
void ChatScene::clearWebPreviewEvent() {
#ifdef HAVE_WEBKIT
- qDebug() << "clear event" << this << webPreview.previewItem;
if(webPreview.previewItem) {
if(webPreview.previewItem) {
-// if(webPreview.previewItem->scene()) {
-// removeItem(webPreview.previewItem);
-// items();
-// }
+ if(webPreview.previewItem->scene()) {
+ removeItem(webPreview.previewItem);
+ }
delete webPreview.previewItem;
delete webPreview.previewItem;
- items();
webPreview.previewItem = 0;
}
webPreview.parentItem = 0;
webPreview.previewItem = 0;
}
webPreview.parentItem = 0;
diff --git
a/src/qtui/chatscene.h
b/src/qtui/chatscene.h
index
f3c3d6e
..
0418232
100644
(file)
--- a/
src/qtui/chatscene.h
+++ b/
src/qtui/chatscene.h
@@
-70,7
+70,7
@@
public slots:
void clearWebPreview(ChatItem *parentItem = 0);
signals:
void clearWebPreview(ChatItem *parentItem = 0);
signals:
- void lastLineChanged(QGraphicsItem *);
+ void lastLineChanged(QGraphicsItem *
item, qreal offset
);
protected:
virtual void mouseMoveEvent(QGraphicsSceneMouseEvent *mouseEvent);
protected:
virtual void mouseMoveEvent(QGraphicsSceneMouseEvent *mouseEvent);
diff --git
a/src/qtui/chatview.cpp
b/src/qtui/chatview.cpp
index
f0daee0
..
0c3d4bb
100644
(file)
--- a/
src/qtui/chatview.cpp
+++ b/
src/qtui/chatview.cpp
@@
-56,7
+56,7
@@
void ChatView::init(MessageFilter *filter) {
_scene = new ChatScene(filter, filter->idString(), viewport()->width() - 2, this); // see below: resizeEvent()
connect(_scene, SIGNAL(sceneRectChanged(const QRectF &)), this, SLOT(sceneRectChanged(const QRectF &)));
_scene = new ChatScene(filter, filter->idString(), viewport()->width() - 2, this); // see below: resizeEvent()
connect(_scene, SIGNAL(sceneRectChanged(const QRectF &)), this, SLOT(sceneRectChanged(const QRectF &)));
- connect(_scene, SIGNAL(lastLineChanged(QGraphicsItem *
)), this, SLOT(lastLineChanged(QGraphicsItem *
)));
+ connect(_scene, SIGNAL(lastLineChanged(QGraphicsItem *
, qreal)), this, SLOT(lastLineChanged(QGraphicsItem *, qreal
)));
setScene(_scene);
connect(verticalScrollBar(), SIGNAL(valueChanged(int)), this, SLOT(verticalScrollbarChanged(int)));
setScene(_scene);
connect(verticalScrollBar(), SIGNAL(valueChanged(int)), this, SLOT(verticalScrollbarChanged(int)));
@@
-76,10
+76,11
@@
void ChatView::resizeEvent(QResizeEvent *event) {
verticalScrollBar()->setValue(verticalScrollBar()->maximum());
}
verticalScrollBar()->setValue(verticalScrollBar()->maximum());
}
-void ChatView::lastLineChanged(QGraphicsItem *chatLine) {
+void ChatView::lastLineChanged(QGraphicsItem *chatLine, qreal offset) {
+ Q_UNUSED(chatLine)
QAbstractSlider *vbar = verticalScrollBar();
Q_ASSERT(vbar);
QAbstractSlider *vbar = verticalScrollBar();
Q_ASSERT(vbar);
- if(vbar->maximum() - vbar->value() <=
chatLine->boundingRect().height()
+ 5) { // 5px grace area
+ if(vbar->maximum() - vbar->value() <=
offset
+ 5) { // 5px grace area
vbar->setValue(vbar->maximum());
}
}
vbar->setValue(vbar->maximum());
}
}
diff --git
a/src/qtui/chatview.h
b/src/qtui/chatview.h
index
eab096b
..
293e97c
100644
(file)
--- a/
src/qtui/chatview.h
+++ b/
src/qtui/chatview.h
@@
-48,7
+48,7
@@
protected:
virtual void resizeEvent(QResizeEvent *event);
protected slots:
virtual void resizeEvent(QResizeEvent *event);
protected slots:
- void lastLineChanged(QGraphicsItem *chatLine);
+ void lastLineChanged(QGraphicsItem *chatLine
, qreal offset
);
virtual inline void sceneRectChanged(const QRectF &rect) { setSceneRect(rect); }
virtual void verticalScrollbarChanged(int);
virtual inline void sceneRectChanged(const QRectF &rect) { setSceneRect(rect); }
virtual void verticalScrollbarChanged(int);