appDisplay: Only emit layout-changed when not updating pages

It is wasteful to emit layout-changed when updating pages, because
the caller (AppDisplay) already has an updated state by the time
this is called.

Only emit 'layout-changed' if the GSettings notification doesn't
come from AppDisplay updating the pages.

https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/1428
This commit is contained in:
Georges Basile Stavracas Neto 2020-09-01 15:41:44 -03:00
parent f1bc87bf6d
commit 95645e155e

View File

@ -832,13 +832,15 @@ var PageManager = GObject.registerClass({
global.settings.connect('changed::app-picker-layout', global.settings.connect('changed::app-picker-layout',
this._loadPages.bind(this)); this._loadPages.bind(this));
this._updatingPages = false;
this._loadPages(); this._loadPages();
} }
_loadPages() { _loadPages() {
const layout = global.settings.get_value('app-picker-layout'); const layout = global.settings.get_value('app-picker-layout');
this._pages = layout.recursiveUnpack(); this._pages = layout.recursiveUnpack();
this.emit('layout-changed'); if (!this._updatingPages)
this.emit('layout-changed');
} }
getAppPosition(appId) { getAppPosition(appId) {
@ -869,8 +871,12 @@ var PageManager = GObject.registerClass({
packedPages.push(pageData); packedPages.push(pageData);
} }
this._updatingPages = true;
const variant = new GLib.Variant('aa{sv}', packedPages); const variant = new GLib.Variant('aa{sv}', packedPages);
global.settings.set_value('app-picker-layout', variant); global.settings.set_value('app-picker-layout', variant);
this._updatingPages = false;
} }
get pages() { get pages() {