[gnome-shell/gbsneto/custom-icon-positions: 27/27] appDisplay: Allow reordering folders



commit b77339adbb5762bc1c0783a505b6ec79103867c5
Author: Georges Basile Stavracas Neto <georges stavracas gmail com>
Date:   Wed Jun 24 15:37:42 2020 -0300

    appDisplay: Allow reordering folders
    
    Implement the methods to sort and query item positions
    using the index in the GSettings key, and store the
    updated positions when accepting the drop.
    
    https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/1284

 js/ui/appDisplay.js | 37 +++++++++++++++++++++++++++++++++++++
 1 file changed, 37 insertions(+)
---
diff --git a/js/ui/appDisplay.js b/js/ui/appDisplay.js
index 1585ba5c6c..e247005eb2 100644
--- a/js/ui/appDisplay.js
+++ b/js/ui/appDisplay.js
@@ -1603,6 +1603,33 @@ class FolderView extends BaseAppView {
         return appIds;
     }
 
+    _getItemPosition(item) {
+        const appIds = this._getFolderApps();
+        const appIndex = appIds.indexOf(item.id);
+
+        if (appIndex === -1)
+            return [-1, -1];
+
+        const { itemsPerPage } = this._grid;
+        return [Math.floor(appIndex / itemsPerPage), appIndex % itemsPerPage];
+    }
+
+    _compareItems(a, b) {
+        const appIds = this._getFolderApps();
+
+        const aPosition = appIds.indexOf(a.id);
+        const bPosition = appIds.indexOf(b.id);
+
+        if (aPosition === -1 && bPosition === -1)
+            return a.name.localeCompare(b.name);
+        else if (aPosition === -1)
+            return 1;
+        else if (bPosition === -1)
+            return -1;
+
+        return aPosition - bPosition;
+    }
+
     // Overridden from BaseAppView
     animate(animationDirection) {
         this._grid.animatePulse(animationDirection);
@@ -1663,6 +1690,16 @@ class FolderView extends BaseAppView {
         return apps;
     }
 
+    acceptDrop(source) {
+        if (!super.acceptDrop(source))
+            return false;
+
+        const folderApps = this._orderedItems.map(item => item.id);
+        this._folder.set_strv('apps', folderApps);
+
+        return true;
+    }
+
     addApp(app) {
         let folderApps = this._folder.get_strv('apps');
         folderApps.push(app.id);


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]