_model(model),
_singleBufferScene(false),
_selectingItem(0),
- _lastItem(0),
_selectionStart(-1),
_isSelecting(false),
_fetchingBacklog(false)
_lines[i]->setRow(i);
}
+ // update selection
+ if(_selectionStart >= 0) {
+ int offset = end - start + 1;
+ if(_selectionStart >= start) _selectionStart += offset;
+ if(_selectionEnd >= start) _selectionEnd += offset;
+ if(_firstSelectionRow >= start) _firstSelectionRow += offset;
+ if(_lastSelectionRow >= start) _lastSelectionRow += offset;
+ }
+
if(h > 0) {
_height += h;
for(int i = end+1; i < _lines.count(); i++) {
_lines[l]->setSelected(true, minColumn);
}
}
-
int newstart = qMin(curRow, _firstSelectionRow);
int newend = qMax(curRow, _firstSelectionRow);
-
if(newstart < _selectionStart) {
for(int l = newstart; l < _selectionStart; l++)
_lines[l]->setSelected(true, minColumn);
if(newstart == newend && minColumn == ChatLineModel::ContentsColumn) {
_lines[curRow]->setSelected(false);
_isSelecting = false;
+ Q_ASSERT(_selectingItem); // this seems to not always be true, but I have no idea why
+ // adding this assert to make sure the occasional segfault is caused by this
_selectingItem->continueSelecting(_selectingItem->mapFromScene(pos));
}
}
void ChatScene::mouseReleaseEvent(QGraphicsSceneMouseEvent *event) {
if(_isSelecting && !event->buttons() & Qt::LeftButton) {
-# ifdef Q_WS_X11
- QApplication::clipboard()->setText(selectionToString(), QClipboard::Selection);
-# endif
-//# else
- QApplication::clipboard()->setText(selectionToString());
-//# endif
+ putToClipboard(selectionToString());
_isSelecting = false;
event->accept();
} else {
}
}
+void ChatScene::putToClipboard(const QString &selection) {
+ // TODO Configure clipboards
+# ifdef Q_WS_X11
+ QApplication::clipboard()->setText(selection, QClipboard::Selection);
+# endif
+//# else
+ QApplication::clipboard()->setText(selection);
+//# endif
+}
+
//!\brief Convert current selection to human-readable string.
QString ChatScene::selectionToString() const {
//TODO Make selection format configurable!