@@ -23,6 +23,7 @@ type windowManager struct {
23
23
oncePrintPixelRatioLimit sync.Once
24
24
pointerPhase embedder.PointerPhase
25
25
pixelsPerScreenCoordinate float64
26
+ pointerCurrentlyAdded bool
26
27
}
27
28
28
29
func newWindowManager () * windowManager {
@@ -37,6 +38,16 @@ func (m *windowManager) glfwCursorPosCallback(window *glfw.Window, x, y float64)
37
38
}
38
39
39
40
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
+
40
51
// TODO(GeertJohan): sometimes the x and/or y given by glfw is negative or over window size, could this cause an issue?
41
52
// spew.Dump(event)
42
53
event := embedder.PointerEvent {
@@ -50,6 +61,12 @@ func (m *windowManager) sendPointerEvent(window *glfw.Window, phase embedder.Poi
50
61
flutterEngine := (* embedder .FlutterEngine )(unsafe .Pointer (flutterEnginePointer ))
51
62
52
63
flutterEngine .SendPointerEvent (event )
64
+
65
+ if phase == embedder .PointerPhaseAdd {
66
+ m .pointerCurrentlyAdded = true
67
+ } else if phase == embedder .PointerPhaseRemove {
68
+ m .pointerCurrentlyAdded = false
69
+ }
53
70
}
54
71
55
72
func (m * windowManager ) glfwCursorEnterCallback (window * glfw.Window , entered bool ) {
0 commit comments