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{} } }