Summary: | Plasma crashed in Positioner::sourceRowsAboutToBeRemoved() when moving files from Desktop to Pictures folder in Dolphin | ||
---|---|---|---|
Product: | [Plasma] plasmashell | Reporter: | Jaak Ristioja <jaak> |
Component: | Folder | Assignee: | Plasma Bugs List <plasma-bugs> |
Status: | RESOLVED FIXED | ||
Severity: | crash | CC: | hein, kde, nate, rion4ik |
Priority: | NOR | Keywords: | drkonqi |
Version: | 5.26.5 | ||
Target Milestone: | 1.0 | ||
Platform: | Compiled Sources | ||
OS: | Linux | ||
Latest Commit: | https://invent.kde.org/plasma/plasma-desktop/-/commit/e306c63ddbeaccea72a03fbb2c3dbd8245addef5 | Version Fixed In: | 6.0.1 |
Description
Jaak Ristioja
2023-02-24 08:37:17 UTC
A possibly relevant merge request was started @ https://invent.kde.org/plasma/plasma-desktop/-/merge_requests/2069 *** Bug 481850 has been marked as a duplicate of this bug. *** Git commit f0ede2d83731952012be0d43c77916d18617edb2 by Marco Martin. Committed on 28/02/2024 at 08:49. Pushed by mart into branch 'master'. FolderView Positioner: fix rows insert and remove The positioner "proxy" model had problems both in rows insertion and removal. when an icon is dropped in an empty desktop area as the new "last" position, the positioner model creates new empty items for the GridView until it reaches the cell of the drop position. This broke because of connection slot invocation order: the connection to QAbstractItemModel::rowsInserted in FolderModel constructor was executed before the connection in positioner. In turn that connection emitted move, which invoked move on Positioner, which at this point thinks its still in the first rows insertion transaction, because its slot has not been executed yet, and m_beginInsertRowsCalled is still true, so there won't be a "correct" new beginInsertRows called. Make it a Queued connection to push it back. In the same way, when dragging from a "last" position, the Positioner model will remove all the trailing empty items. But it modified m_proxyToSource (from which rowCount() depends) before calling beginRemoveRows, sending the model into an inconsitent state and causing an assert. Make sure that m_proxyToSource is touched only after beginRemoveRows. Related: bug 481254 M +18 -11 containments/desktop/plugins/folder/foldermodel.cpp M +11 -6 containments/desktop/plugins/folder/positioner.cpp https://invent.kde.org/plasma/plasma-desktop/-/commit/f0ede2d83731952012be0d43c77916d18617edb2 Git commit e306c63ddbeaccea72a03fbb2c3dbd8245addef5 by Marco Martin. Committed on 28/02/2024 at 08:50. Pushed by mart into branch 'Plasma/6.0'. FolderView Positioner: fix rows insert and remove The positioner "proxy" model had problems both in rows insertion and removal. when an icon is dropped in an empty desktop area as the new "last" position, the positioner model creates new empty items for the GridView until it reaches the cell of the drop position. This broke because of connection slot invocation order: the connection to QAbstractItemModel::rowsInserted in FolderModel constructor was executed before the connection in positioner. In turn that connection emitted move, which invoked move on Positioner, which at this point thinks its still in the first rows insertion transaction, because its slot has not been executed yet, and m_beginInsertRowsCalled is still true, so there won't be a "correct" new beginInsertRows called. Make it a Queued connection to push it back. In the same way, when dragging from a "last" position, the Positioner model will remove all the trailing empty items. But it modified m_proxyToSource (from which rowCount() depends) before calling beginRemoveRows, sending the model into an inconsitent state and causing an assert. Make sure that m_proxyToSource is touched only after beginRemoveRows. Related: bug 481254 M +18 -11 containments/desktop/plugins/folder/foldermodel.cpp M +11 -6 containments/desktop/plugins/folder/positioner.cpp https://invent.kde.org/plasma/plasma-desktop/-/commit/e306c63ddbeaccea72a03fbb2c3dbd8245addef5 |