@@ -90,6 +90,7 @@ impl<'a> MessageHandler<InputPreprocessorMessage, InputPreprocessorMessageContex
9090 self . translate_mouse_event ( mouse_state, true , responses) ;
9191 }
9292 InputPreprocessorMessage :: PointerMove { editor_mouse_state, modifier_keys } => {
93+ self . clear_double_tap_state ( ) ;
9394 self . update_states_of_modifier_keys ( modifier_keys, responses) ;
9495
9596 let mouse_state = editor_mouse_state. to_mouse_state ( viewport) ;
@@ -457,4 +458,35 @@ mod test {
457458
458459 assert ! ( !responses. contains( & InputMapperMessage :: DoubleTap ( Key :: Space ) . into( ) ) ) ;
459460 }
461+
462+ #[ test]
463+ fn process_double_tap_interrupted_by_mouse_movement ( ) {
464+ let mut input_preprocessor = InputPreprocessorMessageHandler :: default ( ) ;
465+ let mut responses = VecDeque :: new ( ) ;
466+
467+ key_down ( & mut input_preprocessor, Key :: Space , & mut responses) ;
468+ key_up ( & mut input_preprocessor, Key :: Space , & mut responses) ;
469+ responses. clear ( ) ;
470+
471+ input_preprocessor. time = 50 ;
472+ key_down ( & mut input_preprocessor, Key :: Space , & mut responses) ;
473+ responses. clear ( ) ;
474+
475+ // PointerMove happens!
476+ input_preprocessor. process_message (
477+ InputPreprocessorMessage :: PointerMove {
478+ editor_mouse_state : EditorMouseState :: default ( ) ,
479+ modifier_keys : ModifierKeys :: empty ( ) ,
480+ } ,
481+ & mut responses,
482+ InputPreprocessorMessageContext {
483+ viewport : & ViewportMessageHandler :: default ( ) ,
484+ } ,
485+ ) ;
486+ responses. clear ( ) ;
487+
488+ key_up ( & mut input_preprocessor, Key :: Space , & mut responses) ;
489+
490+ assert ! ( !responses. contains( & InputMapperMessage :: DoubleTap ( Key :: Space ) . into( ) ) ) ;
491+ }
460492}
0 commit comments