From 717ec0f8a4667b024c8c8344cc4e905b8fb76a71 Mon Sep 17 00:00:00 2001 From: Georges Basile Stavracas Neto Date: Fri, 5 Jul 2019 11:05:29 -0300 Subject: [PATCH] folderView: Allow moving to specific position As of now, the only way to add an app icon to a folder is by dragging it to the folder icon itself. Even though we allow opening the folder popup when hovering the icon, dropping an app icon there wouldn't work. Make the folder view add the app icon to it's GSettings key (which will trigger _redisplay() and will show the new icon) when dropping to a specific position. https://gitlab.gnome.org/GNOME/gnome-shell/merge_requests/603 --- js/ui/appDisplay.js | 21 ++++++++++++++++++--- 1 file changed, 18 insertions(+), 3 deletions(-) diff --git a/js/ui/appDisplay.js b/js/ui/appDisplay.js index 79437e24a..7e9b558e5 100644 --- a/js/ui/appDisplay.js +++ b/js/ui/appDisplay.js @@ -1440,13 +1440,28 @@ var FolderView = class FolderView extends BaseAppView { acceptDrop(source, actor, x, y, time) { let [index, dragLocation] = this.canDropAt(x, y); - let sourceIndex = this._allItems.indexOf(source); let success = index != -1; source.undoScaleAndFade(); - if (success) - this.moveItem(source, index); + if (success) { + // If we're dragging from another folder, remove from the old folder + if (source.view != this && + (source instanceof AppIcon) && + (source.view instanceof FolderView)) { + source.view.removeApp(source.app); + } + + // If the new app icon is not in this folder yet, add it; otherwise, + // just move the icon to the new position + let folderApps = this._folder.get_strv('apps'); + if (!folderApps.includes(source.id)) { + folderApps.splice(index, 0, source.id); + this._folder.set_strv('apps', folderApps); + } else { + this.moveItem(source, index); + } + } this.removeNudges(); return success;