From 78c1d1307737996c114bbbbda3c1f0bd256a8608 Mon Sep 17 00:00:00 2001 From: Andy Williams Date: Fri, 26 Mar 2021 11:18:50 +0000 Subject: [PATCH] When we leave the window invalidate our tracked cursor position Fixes #1857 --- internal/driver/glfw/window.go | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/internal/driver/glfw/window.go b/internal/driver/glfw/window.go index 2e1c4418f3..b3d41b20b3 100644 --- a/internal/driver/glfw/window.go +++ b/internal/driver/glfw/window.go @@ -702,6 +702,11 @@ func (w *window) mouseOut() { } func (w *window) mouseClicked(_ *glfw.Window, btn glfw.MouseButton, action glfw.Action, mods glfw.ModifierKey) { + if w.mousePos.IsZero() { // window may not be focused (darwin mostly) and so position callbacks not happening + xpos, ypos := w.viewport.GetCursorPos() + w.mousePos = fyne.NewPos(internal.UnscaleInt(w.canvas, int(xpos)), internal.UnscaleInt(w.canvas, int(ypos))) + } + co, pos, _ := w.findObjectAtPositionMatching(w.canvas, w.mousePos, func(object fyne.CanvasObject) bool { switch object.(type) { case fyne.Tappable, fyne.SecondaryTappable, fyne.DoubleTappable, fyne.Focusable, desktop.Mouseable, desktop.Hoverable: @@ -1184,6 +1189,7 @@ func (w *window) focused(_ *glfw.Window, isFocused bool) { w.canvas.FocusGained() } else { w.canvas.FocusLost() + w.mousePos = fyne.Position{} } }