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;
|
||||
}
|
||||
|
||||
_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);
|
||||
|
Loading…
Reference in New Issue
Block a user