Summary: | Desktop files/folders dropped from one screen onto another one disappear until plasmashell is restarted or the other screen is disconnected/reconnected | ||
---|---|---|---|
Product: | [Plasma] plasmashell | Reporter: | groomyrocky |
Component: | Folder | Assignee: | Plasma Bugs List <plasma-bugs> |
Status: | RESOLVED FIXED | ||
Severity: | major | CC: | dashonwwIII, dougshaw77, hein, nate, nethaven, postix |
Priority: | HI | Keywords: | multiscreen, qt6 |
Version: | git-stable-Plasma/6.1 | ||
Target Milestone: | 1.0 | ||
Platform: | Arch Linux | ||
OS: | Linux | ||
Latest Commit: | https://invent.kde.org/plasma/plasma-desktop/-/commit/97794807a9a974ba32ee160665f0b69795888268 | Version Fixed In: | 6.1.1 |
Sentry Crash Report: |
Description
groomyrocky
2024-02-12 09:26:52 UTC
Can reproduce. Icons don't have to be there during upgrade to KDE6. You can add icons and move them and reproduce. Operating System: KDE neon Testing Edition KDE Plasma Version: 6.0.0 KDE Frameworks Version: 6.0.0 Qt Version: 6.6.1 Kernel Version: 6.5.0-18-generic (64-bit) Graphics Platform: Wayland Graphics Processor: AMD Radeon Pro WX 3200 Series Aaaaa can reproduce If I restart plasmashell, the file appears on the external screen in the position I dragged it to. If instead, I disconnect the screen that I dragged the file onto, it re-appears on the original screen, but in the top-left-most position, not where it was before. If I then re-connect the external screen, the file appears on its desktop in the top-left-most position. A possibly relevant merge request was started @ https://invent.kde.org/plasma/plasma-desktop/-/merge_requests/2069 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 466337 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 466337 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 I seem to be once again having this issue on plasma 6. I'm using arch's testing repositories, so that may be the issue. Can anyone confirm that there haven't been any regressions? Sorry, I didn't check the date. The solution was rather recent and most likely isn't in a current release yet. My apologies for reopening this. It is fixed in 6.0.1, although I do see it briefly appear on the previous monitor before jumping to the monitor that you dragged it to. I'll file a different report for that though. I'm beta testing plasma 6.1 on arch and currently this issue seems to have popped back up. If I add a file to the desktop and then drag it from one monitor to another. It once again enters the avoid only to be returned on reboot or possibly restarting plasmashell. I can file a separate report if needed, but I think this might be related. I am using Garuda KDE, X11 and Nvidia drivers/card (RTX 3060 12GB), AMD Ryzen 5. If I create a launcher in the Application Launcher, then add it to the desktop, then edit that desktop launcher's icon, the icon disappears. It reappears if I restart the machine (presumably the essential shell restart). (In reply to nethaven from comment #11) > I can file a separate report if needed, but I think this might be related. > I am using Garuda KDE, X11 and Nvidia drivers/card (RTX 3060 12GB), AMD > Ryzen 5. > If I create a launcher in the Application Launcher, then add it to the > desktop, then edit that desktop launcher's icon, the icon disappears. It > reappears if I restart the machine (presumably the essential shell restart). I believe that is a different bug that has already been fixed. I recall seeing it mentioned in ThiWeekInKDE article. Yup, a different bug, and already fixed in KIO IIRC A possibly relevant merge request was started @ https://invent.kde.org/plasma/plasma-desktop/-/merge_requests/2316 Git commit 4da2346e42302349422cf7c45e64e838fb4d630f by David Edmundson. Committed on 17/06/2024 at 12:44. Pushed by davidedmundson into branch 'master'. FolderView Positioner: fix dragging files across screens. f0ede2d83731952012be0d43c77916d18617edb2 fixed a bug in which items would disappear when dragging between screens. The rationale in the description was correct. The fix there was to queue the connection of rowsInserted so that we don't emit move signals before Positioner proxy model has processed any pending rowsInserted signals. This was incorrectly simplified in 99a3597285a92531efb09492421fac0a6a2e82dc . The important part isn't to process it after FolderModel gets a source model set, but to process it after Positioner gets the source model, which FolderView doesn't know about and the original bug introduced. Rather than a straight revert the code is adjusted to emit the move signal delayed. This is safer than delaying the processing of a signal with index arguments. Related: bug 466337 M +10 -4 containments/desktop/plugins/folder/foldermodel.cpp https://invent.kde.org/plasma/plasma-desktop/-/commit/4da2346e42302349422cf7c45e64e838fb4d630f (In reply to David Edmundson from comment #15) > Git commit 4da2346e42302349422cf7c45e64e838fb4d630f by David Edmundson. > Committed on 17/06/2024 at 12:44. > Pushed by davidedmundson into branch 'master'. > > FolderView Positioner: fix dragging files across screens. > > f0ede2d83731952012be0d43c77916d18617edb2 fixed a bug in which items > would disappear when dragging between screens. The rationale in the > description was correct. The fix there was to queue the connection of > rowsInserted so that we don't emit move signals before Positioner proxy > model has processed any pending rowsInserted signals. > > This was incorrectly simplified in > 99a3597285a92531efb09492421fac0a6a2e82dc . The important part isn't to > process it after FolderModel gets a source model set, but to process it > after Positioner gets the source model, which FolderView doesn't know > about and the original bug introduced. > > Rather than a straight revert the code is adjusted to emit the move > signal delayed. This is safer than delaying the processing of a signal > with index arguments. > Related: bug 466337 > > M +10 -4 containments/desktop/plugins/folder/foldermodel.cpp > > https://invent.kde.org/plasma/plasma-desktop/-/commit/ > 4da2346e42302349422cf7c45e64e838fb4d630f Thanks David Git commit 97794807a9a974ba32ee160665f0b69795888268 by David Edmundson, on behalf of David Edmundson. Committed on 17/06/2024 at 13:38. Pushed by davidedmundson into branch 'Plasma/6.1'. FolderView Positioner: fix dragging files across screens. f0ede2d83731952012be0d43c77916d18617edb2 fixed a bug in which items would disappear when dragging between screens. The rationale in the description was correct. The fix there was to queue the connection of rowsInserted so that we don't emit move signals before Positioner proxy model has processed any pending rowsInserted signals. This was incorrectly simplified in 99a3597285a92531efb09492421fac0a6a2e82dc . The important part isn't to process it after FolderModel gets a source model set, but to process it after Positioner gets the source model, which FolderView doesn't know about and the original bug introduced. Rather than a straight revert the code is adjusted to emit the move signal delayed. This is safer than delaying the processing of a signal with index arguments. Related: bug 466337 (cherry picked from commit 4da2346e42302349422cf7c45e64e838fb4d630f) Co-authored-by: David Edmundson <kde@davidedmundson.co.uk> M +10 -4 containments/desktop/plugins/folder/foldermodel.cpp https://invent.kde.org/plasma/plasma-desktop/-/commit/97794807a9a974ba32ee160665f0b69795888268 |