From 7bc192a6d4d4ffbbbf296be6793d85e4deea8a3a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tor=20Hedin=20Br=C3=B8nner?= Date: Sun, 8 Mar 2020 14:17:47 +0100 Subject: [PATCH] grab: pass the correct focus window to navigator When ending a grab we want to have full control over what space and window gains focus. So simply pass the window through navigator.finish in addition to the space. --- grab.js | 2 +- navigator.js | 13 ++++++++----- 2 files changed, 9 insertions(+), 6 deletions(-) diff --git a/grab.js b/grab.js index 983288e..81eacee 100644 --- a/grab.js +++ b/grab.js @@ -461,7 +461,7 @@ var MoveGrab = class MoveGrab { // metaWindow.change_workspace(space.workspace) // space.workspace.activate(global.get_current_time()); Tiling.inGrab = false; - Navigator.getNavigator().finish(destSpace); + Navigator.getNavigator().finish(destSpace, metaWindow); global.display.set_cursor(Meta.Cursor.DEFAULT); } diff --git a/navigator.js b/navigator.js index ad71b06..01b795c 100644 --- a/navigator.js +++ b/navigator.js @@ -235,14 +235,14 @@ var Navigator = class Navigator { this.was_accepted = true; } - finish(space) { + finish(space, focus) { if (grab) return; this.accept(); - this.destroy(space); + this.destroy(space, focus); } - destroy(space) { + destroy(space, focus) { this.minimaps.forEach(m => { if (typeof(m) === 'number') Mainloop.source_remove(m); @@ -308,8 +308,11 @@ var Navigator = class Navigator { selected = this.space.indexOf(selected) !== -1 ? selected : this.space.selectedWindow; - let focus = display.focus_window; - if (focus && focus.is_on_all_workspaces()) + let curFocus = display.focus_window; + if (force && curFocus && curFocus.is_on_all_workspaces()) + selected = curFocus; + + if (focus) selected = focus; if (selected && !Tiling.inGrab) {