Skip to content

Commit eae922f

Browse files
author
Drakirus
committed
Fix #113: Don't double-add event of pointerPhase
1 parent 6415d49 commit eae922f

File tree

1 file changed

+17
-0
lines changed

1 file changed

+17
-0
lines changed

glfw.go

+17
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ type windowManager struct {
2323
oncePrintPixelRatioLimit sync.Once
2424
pointerPhase embedder.PointerPhase
2525
pixelsPerScreenCoordinate float64
26+
pointerCurrentlyAdded bool
2627
}
2728

2829
func newWindowManager() *windowManager {
@@ -37,6 +38,16 @@ func (m *windowManager) glfwCursorPosCallback(window *glfw.Window, x, y float64)
3738
}
3839

3940
func (m *windowManager) sendPointerEvent(window *glfw.Window, phase embedder.PointerPhase, x, y float64) {
41+
// synthesize an PointerPhaseAdd if the pointer isn't already added
42+
if !m.pointerCurrentlyAdded && phase != embedder.PointerPhaseAdd {
43+
m.sendPointerEvent(window, embedder.PointerPhaseAdd, x, y)
44+
}
45+
46+
// Don't double-add the pointer
47+
if m.pointerCurrentlyAdded && phase == embedder.PointerPhaseAdd {
48+
return
49+
}
50+
4051
// TODO(GeertJohan): sometimes the x and/or y given by glfw is negative or over window size, could this cause an issue?
4152
// spew.Dump(event)
4253
event := embedder.PointerEvent{
@@ -50,6 +61,12 @@ func (m *windowManager) sendPointerEvent(window *glfw.Window, phase embedder.Poi
5061
flutterEngine := (*embedder.FlutterEngine)(unsafe.Pointer(flutterEnginePointer))
5162

5263
flutterEngine.SendPointerEvent(event)
64+
65+
if phase == embedder.PointerPhaseAdd {
66+
m.pointerCurrentlyAdded = true
67+
} else if phase == embedder.PointerPhaseRemove {
68+
m.pointerCurrentlyAdded = false
69+
}
5370
}
5471

5572
func (m *windowManager) glfwCursorEnterCallback(window *glfw.Window, entered bool) {

0 commit comments

Comments
 (0)