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



commit f5c03d66d0b36398e28568820e7c70c368abdd17
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 bf743db781..93c1568cc1 100644
--- a/js/ui/appDisplay.js
+++ b/js/ui/appDisplay.js
@@ -1631,6 +1631,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);
@@ -1691,6 +1718,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]