Fix sluggish experience when dragging tabs

The problem was caused by a missing call to `WindowContext::notify` when
moving the mouse. Actually, we *did* notify as part of a `MouseMoveEvent`
listener registered in `Interactivity` but that code path was never
exercised because we were clearing the `pending_mouse_down`.

This commit fixes the issue by automatically redrawing the window in gpui
when there is an active drag and the mouse moves.
This commit is contained in:
Antonio Scandurra 2023-12-20 11:21:55 +01:00
parent dfed171627
commit 00927db711
2 changed files with 18 additions and 10 deletions

View file

@ -1516,15 +1516,24 @@ impl<'a> WindowContext<'a> {
}
}
if self.app.propagate_event && event.downcast_ref::<MouseUpEvent>().is_some() {
self.active_drag = None;
}
self.window
.rendered_frame
.mouse_listeners
.insert(event.type_id(), handlers);
}
if self.app.propagate_event && self.has_active_drag() {
if event.is::<MouseMoveEvent>() {
// If this was a mouse move event, redraw the window so that the
// active drag can follow the mouse cursor.
self.notify();
} else if event.is::<MouseUpEvent>() {
// If this was a mouse up event, cancel the active drag and redraw
// the window.
self.active_drag = None;
self.notify();
}
}
}
fn dispatch_key_event(&mut self, event: &dyn Any) {