appDisplay: Move child focus handling to IconGrid

The icon grid is always paginated, so the app grid code doesn't need
to behave differently in the FolderView and AppDisplay.

Move the keyboard handling to IconGrid itself, and remove the now dead
code from AppDisplay.

https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/1271
This commit is contained in:
Georges Basile Stavracas Neto 2020-05-19 15:34:11 -03:00
parent c5dbdad5fc
commit 4c2c1297be
2 changed files with 11 additions and 17 deletions

View File

@ -121,9 +121,6 @@ var BaseAppView = GObject.registerClass({
super._init(params); super._init(params);
this._grid = new IconGrid.IconGrid(); this._grid = new IconGrid.IconGrid();
this._grid.connect('child-focused', (grid, actor) => {
this._childFocused(actor);
});
// Standard hack for ClutterBinLayout // Standard hack for ClutterBinLayout
this._grid.x_expand = true; this._grid.x_expand = true;
@ -141,10 +138,6 @@ var BaseAppView = GObject.registerClass({
}); });
} }
_childFocused(_actor) {
// Nothing by default
}
_redisplay() { _redisplay() {
let oldApps = this._orderedItems.slice(); let oldApps = this._orderedItems.slice();
let oldAppIds = oldApps.map(icon => icon.id); let oldAppIds = oldApps.map(icon => icon.id);
@ -697,10 +690,6 @@ class AppDisplay extends BaseAppView {
}); });
} }
_childFocused(icon) {
let itemPage = this._grid.getItemPage(icon);
this.goToPage(itemPage);
}
// Called before allocation to calculate dynamic spacing // Called before allocation to calculate dynamic spacing
adaptToSize(width, height) { adaptToSize(width, height) {
@ -1022,10 +1011,6 @@ class FolderView extends BaseAppView {
super.vfunc_allocate(box); super.vfunc_allocate(box);
} }
_childFocused(actor) {
Util.ensureActorVisibleInScrollView(this._scrollView, actor);
}
// Overridden from BaseAppView // Overridden from BaseAppView
animate(animationDirection) { animate(animationDirection) {
this._grid.animatePulse(animationDirection); this._grid.animatePulse(animationDirection);

View File

@ -1143,7 +1143,6 @@ var IconGrid = GObject.registerClass({
Signals: { Signals: {
'pages-changed': {}, 'pages-changed': {},
'animation-done': {}, 'animation-done': {},
'child-focused': { param_types: [Clutter.Actor.$gtype] },
}, },
}, class IconGrid extends St.Viewport { }, class IconGrid extends St.Viewport {
_init(layoutParams = {}) { _init(layoutParams = {}) {
@ -1199,7 +1198,9 @@ var IconGrid = GObject.registerClass({
} }
_childAdded(grid, child) { _childAdded(grid, child) {
child._iconGridKeyFocusInId = child.connect('key-focus-in', actor => this.emit('child-focused', actor)); child._iconGridKeyFocusInId = child.connect('key-focus-in', () => {
this._ensureItemIsVisible(child);
});
child._paintVisible = child.opacity > 0; child._paintVisible = child.opacity > 0;
child._opacityChangedId = child.connect('notify::opacity', () => { child._opacityChangedId = child.connect('notify::opacity', () => {
@ -1210,6 +1211,14 @@ var IconGrid = GObject.registerClass({
}); });
} }
_ensureItemIsVisible(item) {
if (!this.contains(item))
throw new Error(`${item} is not a child of IconGrid`);
const itemPage = this.layout_manager.getItemPage(item);
this.goToPage(itemPage);
}
_setGridMode(modeIndex) { _setGridMode(modeIndex) {
if (this._currentMode === modeIndex) if (this._currentMode === modeIndex)
return; return;