Box the optional exact State menu target to bound message size
This commit is contained in:
@@ -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()?
|
||||
|
||||
Reference in New Issue
Block a user