diff --git a/desktop/src/desktop_system/event_forwarding.rs b/desktop/src/desktop_system/event_forwarding.rs index f89b5a63..fa1a1bf0 100644 --- a/desktop/src/desktop_system/event_forwarding.rs +++ b/desktop/src/desktop_system/event_forwarding.rs @@ -14,12 +14,6 @@ impl DesktopSystem { transitions: EventTransitions, instance_manager: &InstanceManager, ) -> Result { - if self.pointer_feedback_enabled - && let Some(pointer_focus) = transitions.pointer_focus_target() - { - self.sync_hover_rect_to_pointer_path(pointer_focus); - } - let mut cmd = Cmd::None; let keyboard_modifiers = self.event_router.keyboard_modifiers(); @@ -89,32 +83,4 @@ impl DesktopSystem { Ok(Cmd::None) } - - pub(super) fn sync_hover_rect_to_pointer_path( - &mut self, - pointer_focus: Option<&DesktopTarget>, - ) { - let hover_rect = match pointer_focus { - Some(DesktopTarget::Instance(instance_id)) => { - self.rect(&DesktopTarget::Instance(*instance_id)) - } - Some(DesktopTarget::View(view_id)) => match self - .aggregates - .hierarchy - .parent(&DesktopTarget::View(*view_id)) - { - Some(DesktopTarget::Instance(instance_id)) => { - self.rect(&DesktopTarget::Instance(*instance_id)) - } - Some(_) => panic!("Internal error: View parent is not an instance"), - None => None, - }, - Some(DesktopTarget::Launcher(launcher_id)) => { - self.rect(&DesktopTarget::Launcher(*launcher_id)) - } - _ => None, - }; - - self.aggregates.project_presenter.set_hover_rect(hover_rect); - } } diff --git a/desktop/src/desktop_system/focus_input.rs b/desktop/src/desktop_system/focus_input.rs index 61716661..ca47144e 100644 --- a/desktop/src/desktop_system/focus_input.rs +++ b/desktop/src/desktop_system/focus_input.rs @@ -52,12 +52,9 @@ impl DesktopSystem { }, ) if key_event.state == ElementState::Pressed && !key_event.repeat => { self.pointer_feedback_enabled = false; - self.aggregates.project_presenter.set_hover_rect(None); } (false, ViewEvent::MouseInput { .. } | ViewEvent::MouseWheel { .. }) => { self.pointer_feedback_enabled = true; - let pointer_focus = self.event_router.pointer_focus().cloned(); - self.sync_hover_rect_to_pointer_path(pointer_focus.as_ref()); } (false, ViewEvent::CursorMoved { .. }) if event.cursor_has_velocity( @@ -66,8 +63,6 @@ impl DesktopSystem { ) => { self.pointer_feedback_enabled = true; - let pointer_focus = self.event_router.pointer_focus().cloned(); - self.sync_hover_rect_to_pointer_path(pointer_focus.as_ref()); } _ => {} } diff --git a/desktop/src/desktop_system/layout_effects.rs b/desktop/src/desktop_system/layout_effects.rs index 7dd7ed13..5ffc23ae 100644 --- a/desktop/src/desktop_system/layout_effects.rs +++ b/desktop/src/desktop_system/layout_effects.rs @@ -54,6 +54,15 @@ impl DesktopSystem { } } + // Hover + + let pointer_focus = if self.pointer_feedback_enabled { + self.event_router.pointer_focus().cloned() + } else { + None + }; + self.sync_hover_rect_to_pointer_path(pointer_focus.as_ref()); + Ok(()) } @@ -215,4 +224,32 @@ impl DesktopSystem { .filter(|launcher| launcher.should_relayout_on_focus_change(instance_count)) .map(|_| launcher_id) } + + fn sync_hover_rect_to_pointer_path( + &mut self, + pointer_focus: Option<&DesktopTarget>, + ) { + let hover_rect = match pointer_focus { + Some(DesktopTarget::Instance(instance_id)) => { + self.rect(&DesktopTarget::Instance(*instance_id)) + } + Some(DesktopTarget::View(view_id)) => match self + .aggregates + .hierarchy + .parent(&DesktopTarget::View(*view_id)) + { + Some(DesktopTarget::Instance(instance_id)) => { + self.rect(&DesktopTarget::Instance(*instance_id)) + } + Some(_) => panic!("Internal error: View parent is not an instance"), + None => None, + }, + Some(DesktopTarget::Launcher(launcher_id)) => { + self.rect(&DesktopTarget::Launcher(*launcher_id)) + } + _ => None, + }; + + self.aggregates.project_presenter.set_hover_rect(hover_rect); + } }