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;