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
This commit is contained in:
Georges Basile Stavracas Neto 2020-06-24 15:37:42 -03:00 committed by Florian Müllner
parent 7afab2c28c
commit f06c257952

View File

@ -1624,6 +1624,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);
@ -1684,6 +1711,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);