From 6a796675bd7815087881b799ff5fc79e9ce2b0bf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Florian=20M=C3=BCllner?= Date: Mon, 16 Jul 2018 23:36:38 +0000 Subject: [PATCH] keyboard: Handle no-window case in FocusTracker For windows, the cursor location needs to be adjusted by the frame offsets. However we cannot assume that there is a window, as the shell itself can have the key focus. https://gitlab.gnome.org/GNOME/gnome-shell/issues/414 (cherry picked from commit 0dee82fb9fa974ebdb4dd77fd85535a6edf207fd) --- js/ui/keyboard.js | 18 +++++++++++++----- 1 file changed, 13 insertions(+), 5 deletions(-) diff --git a/js/ui/keyboard.js b/js/ui/keyboard.js index 5fcdf988a..66653d602 100644 --- a/js/ui/keyboard.js +++ b/js/ui/keyboard.js @@ -533,17 +533,25 @@ var FocusTracker = new Lang.Class({ }, _setCurrentRect(rect) { - let frameRect = this._currentWindow.get_frame_rect(); - rect.x -= frameRect.x; - rect.y -= frameRect.y; + if (this._currentWindow) { + let frameRect = this._currentWindow.get_frame_rect(); + rect.x -= frameRect.x; + rect.y -= frameRect.y; + } this._rect = rect; this.emit('position-changed'); }, getCurrentRect() { - let frameRect = this._currentWindow.get_frame_rect(); - let rect = { x: this._rect.x + frameRect.x, y: this._rect.y + frameRect.y, width: this._rect.width, height: this._rect.height }; + let rect = { x: this._rect.x, y: this._rect.y, + width: this._rect.width, height: this._rect.height }; + + if (this._currentWindow) { + let frameRect = this._currentWindow.get_frame_rect(); + rect.x += frameRect.x; + rect.y += frameRect.y; + } return rect; }