projects
/
quassel.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Fix chatline caching on resize
[quassel.git]
/
src
/
qtui
/
chatline.cpp
diff --git
a/src/qtui/chatline.cpp
b/src/qtui/chatline.cpp
index
6032cbe
..
99e0982
100644
(file)
--- a/
src/qtui/chatline.cpp
+++ b/
src/qtui/chatline.cpp
@@
-49,7
+49,8
@@
ChatLine::ChatLine(int row, QAbstractItemModel *model,
_width(width),
_height(_contentsItem.height()),
_selection(0),
_width(width),
_height(_contentsItem.height()),
_selection(0),
- _mouseGrabberItem(0)
+ _mouseGrabberItem(0),
+ _hoverItem(0)
{
Q_ASSERT(model);
QModelIndex index = model->index(row, ChatLineModel::ContentsColumn);
{
Q_ASSERT(model);
QModelIndex index = model->index(row, ChatLineModel::ContentsColumn);
@@
-58,6
+59,11
@@
ChatLine::ChatLine(int row, QAbstractItemModel *model,
setHighlighted(index.data(MessageModel::FlagsRole).toInt() & Message::Highlight);
}
setHighlighted(index.data(MessageModel::FlagsRole).toInt() & Message::Highlight);
}
+ChatLine::~ChatLine() {
+ if(chatView())
+ chatView()->setHasCache(this, false);
+}
+
ChatItem *ChatLine::item(ChatLineModel::ColumnType column) {
switch(column) {
case ChatLineModel::TimestampColumn:
ChatItem *ChatLine::item(ChatLineModel::ColumnType column) {
switch(column) {
case ChatLineModel::TimestampColumn:
@@
-81,6
+87,12
@@
ChatItem *ChatLine::itemAt(const QPointF &pos) {
return 0;
}
return 0;
}
+void ChatLine::clearCache() {
+ _timestampItem.clearCache();
+ _senderItem.clearCache();
+ _contentsItem.clearCache();
+}
+
void ChatLine::setMouseGrabberItem(ChatItem *item) {
_mouseGrabberItem = item;
}
void ChatLine::setMouseGrabberItem(ChatItem *item) {
_mouseGrabberItem = item;
}
@@
-205,8
+217,7
@@
void ChatLine::paint(QPainter *painter, const QStyleOptionGraphicsItem *option,
MsgId myMsgId = myIdx.data(MessageModel::MsgIdRole).value<MsgId>();
Message::Flags flags = (Message::Flags)myIdx.data(MessageModel::FlagsRole).toInt();
MsgId myMsgId = myIdx.data(MessageModel::MsgIdRole).value<MsgId>();
Message::Flags flags = (Message::Flags)myIdx.data(MessageModel::FlagsRole).toInt();
- // don't show the marker if we wrote that new line
- if(!(flags & Message::Self)) {
+ if(chatView()->isMarkerLineVisible()) {
BufferId bufferId = BufferId(chatScene()->idString().toInt());
MsgId lastSeenMsgId = Client::networkModel()->markerLineMsgId(bufferId);
if(lastSeenMsgId < myMsgId && lastSeenMsgId >= prevMsgId) {
BufferId bufferId = BufferId(chatScene()->idString().toInt());
MsgId lastSeenMsgId = Client::networkModel()->markerLineMsgId(bufferId);
if(lastSeenMsgId < myMsgId && lastSeenMsgId >= prevMsgId) {
@@
-247,14
+258,17
@@
void ChatLine::mouseReleaseEvent(QGraphicsSceneMouseEvent *event) {
void ChatLine::hoverEnterEvent(QGraphicsSceneHoverEvent *event) {
ChatItem *item = mouseEventTargetItem(event->pos());
void ChatLine::hoverEnterEvent(QGraphicsSceneHoverEvent *event) {
ChatItem *item = mouseEventTargetItem(event->pos());
- if(item)
+ if(item && !_hoverItem) {
+ _hoverItem = item;
item->hoverEnterEvent(event);
item->hoverEnterEvent(event);
+ }
}
void ChatLine::hoverLeaveEvent(QGraphicsSceneHoverEvent *event) {
}
void ChatLine::hoverLeaveEvent(QGraphicsSceneHoverEvent *event) {
- ChatItem *item = mouseEventTargetItem(event->pos());
- if(item)
- item->hoverLeaveEvent(event);
+ if(_hoverItem) {
+ _hoverItem->hoverLeaveEvent(event);
+ _hoverItem = 0;
+ }
}
void ChatLine::hoverMoveEvent(QGraphicsSceneHoverEvent *event) {
}
void ChatLine::hoverMoveEvent(QGraphicsSceneHoverEvent *event) {