Box the optional exact State menu target to bound message size

This commit is contained in:
2026-09-23 03:37:02 -07:00
parent 2a3b9ba822
commit 3480b54201
3 changed files with 10 additions and 9 deletions
+5 -4
View File
@@ -12,7 +12,7 @@ pub struct Request {
pub anchor: Point,
pub object: Id,
pub placement: Option<Id>,
pub selection_target: Option<crate::diagram_usage::Target>,
pub selection_target: Option<Box<crate::diagram_usage::Target>>,
pub bend: Option<usize>,
pub route_point: Option<Position>,
pub route_segment: Option<(usize, Position)>,
@@ -98,7 +98,7 @@ impl Opened {
fn target_matches(app: &App, request: &Request) -> bool {
use crate::diagram_usage::Target;
let Some(target) = &request.selection_target else {
let Some(target) = request.selection_target.as_deref() else {
return true;
};
if request.canvas.is_none() || !app.multiselect_target_visible(target) {
@@ -157,7 +157,7 @@ pub fn trigger(app: &App) -> iced::Element<'_, Message> {
} else if app.page == Page::Behavior {
request.canvas = app.state_context();
if let Some(target) = app.diagram_selection.as_ref().and_then(|s| s.primary()) {
request.selection_target = Some(target.clone());
request.selection_target = Some(Box::new(target.clone()));
request.placement = match target {
crate::diagram_usage::Target::Placement(id) => {
if let Some(node) = request
@@ -244,7 +244,8 @@ pub fn popup(app: &App) -> Option<Menu<Message>> {
.map(|d| projection::project_view_with_index(p, d, app.document.view_index()));
let target = request
.selection_target
.clone()
.as_deref()
.cloned()
.or_else(|| request.placement.map(Target::Placement))
.or_else(|| {
view.as_ref()?