appDisplay: Introduce PageManager
The PageManager does the heavy lifting between reading the 'app-picker-layout' GSettings key, and saving the new pages. https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/1284
This commit is contained in:
parent
8e23ff8111
commit
e1ea1d2954
@ -574,6 +574,61 @@ var BaseAppView = GObject.registerClass({
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
var PageManager = GObject.registerClass({
|
||||||
|
Signals: { 'layout-changed': {} },
|
||||||
|
}, class PageManager extends GObject.Object {
|
||||||
|
_init() {
|
||||||
|
super._init();
|
||||||
|
|
||||||
|
global.settings.connect('changed::app-picker-layout',
|
||||||
|
this._loadPages.bind(this));
|
||||||
|
|
||||||
|
this._loadPages();
|
||||||
|
}
|
||||||
|
|
||||||
|
_loadPages() {
|
||||||
|
const layout = global.settings.get_value('app-picker-layout');
|
||||||
|
this._pages = layout.recursiveUnpack();
|
||||||
|
this.emit('layout-changed');
|
||||||
|
}
|
||||||
|
|
||||||
|
getAppPosition(appId) {
|
||||||
|
let position = -1;
|
||||||
|
let page = -1;
|
||||||
|
|
||||||
|
for (let pageIndex = 0; pageIndex < this._pages.length; pageIndex++) {
|
||||||
|
const pageData = this._pages[pageIndex];
|
||||||
|
|
||||||
|
if (!(appId in pageData))
|
||||||
|
continue;
|
||||||
|
|
||||||
|
page = pageIndex;
|
||||||
|
position = pageData[appId].position;
|
||||||
|
}
|
||||||
|
|
||||||
|
return [page, position];
|
||||||
|
}
|
||||||
|
|
||||||
|
set pages(p) {
|
||||||
|
const packedPages = [];
|
||||||
|
|
||||||
|
// Pack the icon properties as a GVariant
|
||||||
|
for (const page of p) {
|
||||||
|
const pageData = {};
|
||||||
|
for (const [appId, properties] of Object.entries(page))
|
||||||
|
pageData[appId] = new GLib.Variant('a{sv}', properties);
|
||||||
|
packedPages.push(pageData);
|
||||||
|
}
|
||||||
|
|
||||||
|
const variant = new GLib.Variant('aa{sv}', packedPages);
|
||||||
|
global.settings.set_value('app-picker-layout', variant);
|
||||||
|
}
|
||||||
|
|
||||||
|
get pages() {
|
||||||
|
return this._pages;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
var AppDisplay = GObject.registerClass(
|
var AppDisplay = GObject.registerClass(
|
||||||
class AppDisplay extends BaseAppView {
|
class AppDisplay extends BaseAppView {
|
||||||
_init() {
|
_init() {
|
||||||
@ -584,6 +639,7 @@ class AppDisplay extends BaseAppView {
|
|||||||
});
|
});
|
||||||
|
|
||||||
this._grid._delegate = this;
|
this._grid._delegate = this;
|
||||||
|
this._pageManager = new PageManager();
|
||||||
|
|
||||||
this._scrollView.add_style_class_name('all-apps');
|
this._scrollView.add_style_class_name('all-apps');
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user