From 90d6ebc7ee291fa58b3f4ceb2ce71e0afc80dba3 Mon Sep 17 00:00:00 2001 From: Christopher Harrison Date: Thu, 9 Oct 2025 21:29:36 -0400 Subject: [PATCH] Fix focus shortcuts when pointer warp disabled --- lib/extension/tree.js | 17 +++++++++++------ lib/extension/window.js | 5 +++-- 2 files changed, 14 insertions(+), 8 deletions(-) diff --git a/lib/extension/tree.js b/lib/extension/tree.js index 0fa2981..c7cf7fe 100644 --- a/lib/extension/tree.js +++ b/lib/extension/tree.js @@ -831,6 +831,7 @@ export class Tree extends Node { let metaWindow = next.nodeValue; if (!metaWindow) return null; + const previousMetaWindow = this.extWm.focusMetaWindow; if (metaWindow.minimized) { next = this.focus(next, direction); } else { @@ -838,14 +839,18 @@ export class Tree extends Node { metaWindow.focus(global.display.get_current_time()); metaWindow.activate(global.display.get_current_time()); + const monitorArea = metaWindow.get_work_area_current_monitor(); + const ptr = this.extWm.getPointer(); + const pointerInside = Utils.rectContainsPoint(monitorArea, [ptr[0], ptr[1]]); + const monitorChanged = + !!previousMetaWindow && + previousMetaWindow.get_monitor && + previousMetaWindow.get_monitor() !== metaWindow.get_monitor(); + if (this.settings.get_boolean("move-pointer-focus-enabled")) { this.extWm.movePointerWith(next); - } else { - let monitorArea = metaWindow.get_work_area_current_monitor(); - let ptr = this.extWm.getPointer(); - if (!Utils.rectContainsPoint(monitorArea, [ptr[0], ptr[1]])) { - this.extWm.movePointerWith(next); - } + } else if (!pointerInside) { + this.extWm.movePointerWith(next, { force: monitorChanged }); } } return next; diff --git a/lib/extension/window.js b/lib/extension/window.js index 24356f5..5f73916 100644 --- a/lib/extension/window.js +++ b/lib/extension/window.js @@ -1864,9 +1864,10 @@ export class WindowManager extends GObject.Object { * This is useful for making sure that Forge calculates the attachNode * properly */ - movePointerWith(nodeWindow) { + movePointerWith(nodeWindow, { force = false } = {}) { if (!nodeWindow || !nodeWindow._data) return; - if (this.ext.settings.get_boolean("move-pointer-focus-enabled")) { + const shouldWarp = force || this.ext.settings.get_boolean("move-pointer-focus-enabled"); + if (shouldWarp) { this.storePointerLastPosition(this.lastFocusedWindow); if (this.canMovePointerInsideNodeWindow(nodeWindow)) { this.warpPointerToNodeWindow(nodeWindow);