diff --git a/src/libclient/messagelistmodel.cpp b/src/libclient/messagelistmodel.cpp index 614153bcbaf1ca573b767b1dda8ea6ff3822a3e1..b1a2c2528c44a431bffa8cb30dde5a9f26df41a1 100644 --- a/src/libclient/messagelistmodel.cpp +++ b/src/libclient/messagelistmodel.cpp @@ -297,12 +297,8 @@ MessageListModel::moveMessage(const QString& msgId, const QString& parentId) if (currentIndex == newIndex || newIndex == -1) return; - moveMessage(currentIndex, newIndex); - - // move a child message - if (!childMessageIdToMove.isEmpty()) { - moveMessage(childMessageIdToMove, msgId); - } + // Pretty every messages is moved + moveMessages(currentIndex, interactions_.size() - 1, newIndex); } void @@ -351,11 +347,23 @@ MessageListModel::removeMessage(int index, iterator it) } void -MessageListModel::moveMessage(int from, int to) +MessageListModel::moveMessages(int from, int last, int to) { - Q_EMIT beginMoveRows(QModelIndex(), from, from, QModelIndex(), to); - interactions_.move(from, to); - Q_EMIT endMoveRows(); + auto resetModel = (from <= 2 && last == interactions_.size() - 1); + if (last < from) + return; + if (resetModel) { + Q_EMIT beginResetModel(); + } else { + Q_EMIT beginMoveRows(QModelIndex(), from, last, QModelIndex(), to); + } + for (int i = 0; i < (last - from); ++i) + interactions_.move(last, to); + if (resetModel) { + Q_EMIT endResetModel(); + } else { + Q_EMIT endMoveRows(); + } } bool diff --git a/src/libclient/messagelistmodel.h b/src/libclient/messagelistmodel.h index a32a756cb4d3f2a5138a17e62ec0b9b6c675de25..b79b2eefa94247b041627a4f2be5ccc196e8369f 100644 --- a/src/libclient/messagelistmodel.h +++ b/src/libclient/messagelistmodel.h @@ -171,7 +171,7 @@ private: void insertMessage(int index, item_t& message); iterator insertMessage(iterator it, item_t& message); void removeMessage(int index, iterator it); - void moveMessage(int from, int to); + void moveMessages(int from, int last, int to); QTimer* timestampTimer_ {nullptr}; };