folderView: Reset schemas before removing the folder

When removing the last icon of a folder, FolderView first removes
the folder from org.gnome.desktop.app-folders.folder-children, then
proceeds to reset all its keys, which removes the relocatable schema.

That order of operations turns out to be problematic. Removing the
folder from 'folder-children' destroys the folder icon, which in turn
destroys the folder view, which throws a load of warnings in the
journal.

Fix that by removing the folder after resetting the schema keys. In
fact, what we're doing here is not using 'this' anymore.

https://gitlab.gnome.org/GNOME/gnome-shell/merge_requests/841
This commit is contained in:
Georges Basile Stavracas Neto 2019-11-21 18:45:12 -03:00
parent b88f7d0655
commit aa1d297bdf

View File

@ -1397,15 +1397,15 @@ var FolderView = class FolderView extends BaseAppView {
// Remove the folder if this is the last app icon; otherwise, // Remove the folder if this is the last app icon; otherwise,
// just remove the icon // just remove the icon
if (folderApps.length == 0) { if (folderApps.length == 0) {
let settings = new Gio.Settings({ schema_id: 'org.gnome.desktop.app-folders' });
let folders = settings.get_strv('folder-children');
folders.splice(folders.indexOf(this._id), 1);
settings.set_strv('folder-children', folders);
// Resetting all keys deletes the relocatable schema // Resetting all keys deletes the relocatable schema
let keys = this._folder.settings_schema.list_keys(); let keys = this._folder.settings_schema.list_keys();
for (let key of keys) for (let key of keys)
this._folder.reset(key); this._folder.reset(key);
let settings = new Gio.Settings({ schema_id: 'org.gnome.desktop.app-folders' });
let folders = settings.get_strv('folder-children');
folders.splice(folders.indexOf(this._id), 1);
settings.set_strv('folder-children', folders);
} else { } else {
this._folder.set_strv('apps', folderApps); this._folder.set_strv('apps', folderApps);
} }