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:
parent
7afab2c28c
commit
f06c257952
@ -1624,6 +1624,33 @@ class FolderView extends BaseAppView {
|
|||||||
return appIds;
|
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
|
// Overridden from BaseAppView
|
||||||
animate(animationDirection) {
|
animate(animationDirection) {
|
||||||
this._grid.animatePulse(animationDirection);
|
this._grid.animatePulse(animationDirection);
|
||||||
@ -1684,6 +1711,16 @@ class FolderView extends BaseAppView {
|
|||||||
return apps;
|
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) {
|
addApp(app) {
|
||||||
let folderApps = this._folder.get_strv('apps');
|
let folderApps = this._folder.get_strv('apps');
|
||||||
folderApps.push(app.id);
|
folderApps.push(app.id);
|
||||||
|
Loading…
Reference in New Issue
Block a user