mirror of
https://github.com/slint-ui/slint.git
synced 2025-11-01 04:18:14 +00:00
live-preview: Fix Mac menu commands
... being potentially run from the wrong thread.
This commit is contained in:
parent
fe599db81c
commit
ed8089e43b
2 changed files with 20 additions and 21 deletions
|
|
@ -224,10 +224,8 @@ pub(super) fn open_ui_impl(
|
|||
Ok(())
|
||||
}
|
||||
|
||||
/// Potentially called from other thread!
|
||||
pub fn close_ui() {
|
||||
let _ = super::PREVIEW_STATE.with(|preview_state| {
|
||||
let mut preview_state = preview_state.borrow_mut();
|
||||
super::PREVIEW_STATE.with_borrow_mut(|preview_state| {
|
||||
if !preview_state.ui_is_visible {
|
||||
return; // UI is already down!
|
||||
}
|
||||
|
|
@ -242,15 +240,12 @@ pub fn close_ui() {
|
|||
|
||||
#[cfg(target_vendor = "apple")]
|
||||
fn toggle_always_on_top() {
|
||||
i_slint_core::api::invoke_from_event_loop(move || {
|
||||
super::PREVIEW_STATE.with(move |preview_state| {
|
||||
let preview_state = preview_state.borrow_mut();
|
||||
let Some(ui) = preview_state.ui.as_ref() else { return };
|
||||
let api = ui.global::<crate::preview::ui::Api>();
|
||||
api.set_always_on_top(!api.get_always_on_top());
|
||||
});
|
||||
})
|
||||
.unwrap(); // TODO: Handle Error
|
||||
super::PREVIEW_STATE.with(move |preview_state| {
|
||||
let preview_state = preview_state.borrow_mut();
|
||||
let Some(ui) = preview_state.ui.as_ref() else { return };
|
||||
let api = ui.global::<crate::preview::ui::Api>();
|
||||
api.set_always_on_top(!api.get_always_on_top());
|
||||
});
|
||||
}
|
||||
|
||||
static SERVER_NOTIFIER: Mutex<Option<ServerNotifier>> = Mutex::new(None);
|
||||
|
|
@ -352,13 +347,19 @@ fn init_apple_platform(
|
|||
let keep_on_top_id = keep_on_top_menu_item.id().clone();
|
||||
|
||||
muda::MenuEvent::set_event_handler(Some(move |menu_event: muda::MenuEvent| {
|
||||
if menu_event.id == close_id {
|
||||
close_ui();
|
||||
} else if menu_event.id == reload_id {
|
||||
super::reload_preview();
|
||||
} else if menu_event.id == keep_on_top_id {
|
||||
toggle_always_on_top();
|
||||
}
|
||||
let close_id = close_id.clone();
|
||||
let reload_id = reload_id.clone();
|
||||
let keep_on_top_id = keep_on_top_id.clone();
|
||||
|
||||
let _ = slint::invoke_from_event_loop(move || {
|
||||
if menu_event.id == close_id {
|
||||
close_ui();
|
||||
} else if menu_event.id == reload_id {
|
||||
super::reload_preview();
|
||||
} else if menu_event.id == keep_on_top_id {
|
||||
toggle_always_on_top();
|
||||
}
|
||||
});
|
||||
}));
|
||||
|
||||
Ok((close_app_menu_item, reload_menu_item, keep_on_top_menu_item))
|
||||
|
|
|
|||
|
|
@ -24,8 +24,6 @@ pub fn setup(ui: &ui::PreviewUi) {
|
|||
}
|
||||
|
||||
fn add_recent_color(ui: ui::PreviewUi, value: slint::Color) {
|
||||
eprintln!("RUST SIDE: add_recent_color: {value:?}");
|
||||
|
||||
let api = ui.global::<ui::Api>();
|
||||
|
||||
let model = api.get_recent_colors();
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue