ui: Make custom rows in ContextMenus use a normal cursor (#15239)
Some checks are pending
CI / Check formatting and spelling (push) Waiting to run
CI / (macOS) Run Clippy and tests (push) Waiting to run
CI / (Linux) Run Clippy and tests (push) Waiting to run
CI / (Windows) Run Clippy and tests (push) Waiting to run
CI / Create a macOS bundle (push) Blocked by required conditions
CI / Create a Linux bundle (push) Blocked by required conditions
CI / Create arm64 Linux bundle (push) Blocked by required conditions
Deploy Docs / Deploy Docs (push) Waiting to run

This PR makes custom rows in `ContextMenu`s use a regular cursor instead
of a pointer.

Even though custom rows were marked as not selectable, we would still
pass a click handler to them, causing the `ListItem` to show a pointer
cursor.

Release Notes:

- N/A
This commit is contained in:
Marshall Bowers 2024-07-25 20:16:53 -04:00 committed by GitHub
parent 4000b0a02c
commit 95d82f88de
No known key found for this signature in database
GPG key ID: B5690EEEBB952194

View file

@ -149,8 +149,7 @@ impl ContextMenu {
}
pub fn label(mut self, label: impl Into<SharedString>) -> Self {
let label = label.into();
self.items.push(ContextMenuItem::Label(label));
self.items.push(ContextMenuItem::Label(label.into()));
self
}
@ -295,9 +294,9 @@ impl ContextMenu {
impl ContextMenuItem {
fn is_selectable(&self) -> bool {
match self {
ContextMenuItem::Separator => false,
ContextMenuItem::Label { .. } => false,
ContextMenuItem::Header(_) => false,
ContextMenuItem::Header(_)
| ContextMenuItem::Separator
| ContextMenuItem::Label { .. } => false,
ContextMenuItem::Entry { .. } => true,
ContextMenuItem::CustomEntry { selectable, .. } => *selectable,
}
@ -428,19 +427,19 @@ impl Render for ContextMenu {
} => {
let handler = handler.clone();
let menu = cx.view().downgrade();
let selectable = *selectable;
ListItem::new(ix)
.inset(true)
.selected(if *selectable {
.selected(if selectable {
Some(ix) == self.selected_index
} else {
false
})
.selectable(*selectable)
.on_click({
let context = self.action_context.clone();
let selectable = *selectable;
move |_, cx| {
if selectable {
.selectable(selectable)
.when(selectable, |item| {
item.on_click({
let context = self.action_context.clone();
move |_, cx| {
handler(context.as_ref(), cx);
menu.update(cx, |menu, cx| {
menu.clicked = true;
@ -448,7 +447,7 @@ impl Render for ContextMenu {
})
.ok();
}
}
})
})
.child(entry_render(cx))
.into_any_element()