From 4c2c1297bee57bdf6990a8765445b882d3c5e14a Mon Sep 17 00:00:00 2001 From: Georges Basile Stavracas Neto Date: Tue, 19 May 2020 15:34:11 -0300 Subject: [PATCH] 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 --- js/ui/appDisplay.js | 15 --------------- js/ui/iconGrid.js | 13 +++++++++++-- 2 files changed, 11 insertions(+), 17 deletions(-) diff --git a/js/ui/appDisplay.js b/js/ui/appDisplay.js index 6bd3b6145..0b545230a 100644 --- a/js/ui/appDisplay.js +++ b/js/ui/appDisplay.js @@ -121,9 +121,6 @@ var BaseAppView = GObject.registerClass({ super._init(params); this._grid = new IconGrid.IconGrid(); - this._grid.connect('child-focused', (grid, actor) => { - this._childFocused(actor); - }); // Standard hack for ClutterBinLayout this._grid.x_expand = true; @@ -141,10 +138,6 @@ var BaseAppView = GObject.registerClass({ }); } - _childFocused(_actor) { - // Nothing by default - } - _redisplay() { let oldApps = this._orderedItems.slice(); 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 adaptToSize(width, height) { @@ -1022,10 +1011,6 @@ class FolderView extends BaseAppView { super.vfunc_allocate(box); } - _childFocused(actor) { - Util.ensureActorVisibleInScrollView(this._scrollView, actor); - } - // Overridden from BaseAppView animate(animationDirection) { this._grid.animatePulse(animationDirection); diff --git a/js/ui/iconGrid.js b/js/ui/iconGrid.js index b6874d5b6..2d2b4548d 100644 --- a/js/ui/iconGrid.js +++ b/js/ui/iconGrid.js @@ -1143,7 +1143,6 @@ var IconGrid = GObject.registerClass({ Signals: { 'pages-changed': {}, 'animation-done': {}, - 'child-focused': { param_types: [Clutter.Actor.$gtype] }, }, }, class IconGrid extends St.Viewport { _init(layoutParams = {}) { @@ -1199,7 +1198,9 @@ var IconGrid = GObject.registerClass({ } _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._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) { if (this._currentMode === modeIndex) return;