@@ -45,6 +45,11 @@ class StyledTextAreaBehavior implements Behavior {
4545
4646 private static final EventHandlerTemplate <StyledTextAreaBehavior , ? super KeyEvent > KEY_PRESSED_TEMPLATE ;
4747 private static final EventHandlerTemplate <StyledTextAreaBehavior , ? super KeyEvent > KEY_TYPED_TEMPLATE ;
48+ private static final EventHandlerTemplate <StyledTextAreaBehavior , ? super MouseEvent > MOUSE_PRESSED_TEMPLATE ;
49+ private static final EventHandlerTemplate <StyledTextAreaBehavior , ? super MouseEvent > MOUSE_DRAGGED_TEMPLATE ;
50+ private static final EventHandlerTemplate <StyledTextAreaBehavior , ? super MouseEvent > DRAG_DETECTED_TEMPLATE ;
51+ private static final EventHandlerTemplate <StyledTextAreaBehavior , ? super MouseEvent > MOUSE_RELEASED_TEMPLATE ;
52+
4853 static {
4954 SelectionPolicy selPolicy = isMac
5055 ? SelectionPolicy .EXTEND
@@ -163,6 +168,26 @@ class StyledTextAreaBehavior implements Behavior {
163168
164169 .create ()
165170 .onlyWhen (b -> b .area .isEditable ());
171+
172+ MOUSE_PRESSED_TEMPLATE = EventHandlerTemplate
173+ .on (MouseEvent .MOUSE_PRESSED )
174+ .act (StyledTextAreaBehavior ::mousePressed )
175+ .create ();
176+
177+ MOUSE_DRAGGED_TEMPLATE = EventHandlerTemplate
178+ .on (MouseEvent .MOUSE_DRAGGED )
179+ .act (StyledTextAreaBehavior ::mouseDragged )
180+ .create ();
181+
182+ DRAG_DETECTED_TEMPLATE = EventHandlerTemplate
183+ .on (MouseEvent .DRAG_DETECTED )
184+ .act (StyledTextAreaBehavior ::dragDetected )
185+ .create ();
186+
187+ MOUSE_RELEASED_TEMPLATE = EventHandlerTemplate
188+ .on (MouseEvent .MOUSE_RELEASED )
189+ .act (StyledTextAreaBehavior ::mouseReleased )
190+ .create ();
166191 }
167192
168193 /**
@@ -218,18 +243,28 @@ private CaretOffsetX getTargetCaretOffset() {
218243 EventHandler <? super KeyEvent > keyPressedHandler = KEY_PRESSED_TEMPLATE .bind (this );
219244 EventHandler <? super KeyEvent > keyTypedHandler = KEY_TYPED_TEMPLATE .bind (this );
220245
246+ EventHandler <? super MouseEvent > mousePressedHandler = MOUSE_PRESSED_TEMPLATE .bind (this );
247+ EventHandler <? super MouseEvent > mouseDraggedHandler = MOUSE_DRAGGED_TEMPLATE .bind (this );
248+ EventHandler <? super MouseEvent > dragDetectedHandler = DRAG_DETECTED_TEMPLATE .bind (this );
249+ EventHandler <? super MouseEvent > mouseReleasedHandler = MOUSE_RELEASED_TEMPLATE .bind (this );
250+
221251 EventHandlerHelper .installAfter (area .onKeyPressedProperty (), keyPressedHandler );
222252 EventHandlerHelper .installAfter (area .onKeyTypedProperty (), keyTypedHandler );
223253
224- subscription = Subscription . multi (
225- eventsOf (area , MouseEvent . MOUSE_PRESSED ). subscribe ( this :: mousePressed ),
226- eventsOf (area , MouseEvent . MOUSE_DRAGGED ). subscribe ( this :: mouseDragged ),
227- eventsOf (area , MouseEvent . DRAG_DETECTED ). subscribe ( this :: dragDetected ),
228- eventsOf ( area , MouseEvent . MOUSE_RELEASED ). subscribe ( this :: mouseReleased ),
229- () -> {
254+ EventHandlerHelper . installAfter ( area . onMousePressedProperty (), mousePressedHandler );
255+ EventHandlerHelper . installAfter (area . onMouseDraggedProperty (), mouseDraggedHandler );
256+ EventHandlerHelper . installAfter (area . onDragDetectedProperty (), dragDetectedHandler );
257+ EventHandlerHelper . installAfter (area . onMouseReleasedProperty (), mouseReleasedHandler );
258+
259+ subscription = () -> {
230260 EventHandlerHelper .remove (area .onKeyPressedProperty (), keyPressedHandler );
231261 EventHandlerHelper .remove (area .onKeyTypedProperty (), keyTypedHandler );
232- });
262+
263+ EventHandlerHelper .remove (area .onMousePressedProperty (), mousePressedHandler );
264+ EventHandlerHelper .remove (area .onMouseDraggedProperty (), mouseDraggedHandler );
265+ EventHandlerHelper .remove (area .onDragDetectedProperty (), dragDetectedHandler );
266+ EventHandlerHelper .remove (area .onMouseReleasedProperty (), mouseReleasedHandler );
267+ };
233268
234269 // setup auto-scroll
235270 Val <Point2D > projection = Val .combine (
0 commit comments