mirror of
https://github.com/DioxusLabs/dioxus
synced 2024-11-10 06:34:20 +00:00
Fix ordering issues when with_menu(None) is called before setting the window builder (#2903)
This commit is contained in:
parent
4676171861
commit
aa0ea444cf
2 changed files with 26 additions and 13 deletions
|
@ -18,10 +18,26 @@ pub enum WindowCloseBehaviour {
|
||||||
CloseWindow,
|
CloseWindow,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// The state of the menu builder. We need to keep track of if the state is default
|
||||||
|
/// so we only swap out the default menu bar when decorations are disabled
|
||||||
|
pub(crate) enum MenuBuilderState {
|
||||||
|
Unset,
|
||||||
|
Set(Option<DioxusMenu>),
|
||||||
|
}
|
||||||
|
|
||||||
|
impl From<MenuBuilderState> for Option<DioxusMenu> {
|
||||||
|
fn from(val: MenuBuilderState) -> Self {
|
||||||
|
match val {
|
||||||
|
MenuBuilderState::Unset => Some(default_menu_bar()),
|
||||||
|
MenuBuilderState::Set(menu) => menu,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/// The configuration for the desktop application.
|
/// The configuration for the desktop application.
|
||||||
pub struct Config {
|
pub struct Config {
|
||||||
pub(crate) window: WindowBuilder,
|
pub(crate) window: WindowBuilder,
|
||||||
pub(crate) menu: Option<DioxusMenu>,
|
pub(crate) menu: MenuBuilderState,
|
||||||
pub(crate) protocols: Vec<WryProtocol>,
|
pub(crate) protocols: Vec<WryProtocol>,
|
||||||
pub(crate) asynchronous_protocols: Vec<AsyncWryProtocol>,
|
pub(crate) asynchronous_protocols: Vec<AsyncWryProtocol>,
|
||||||
pub(crate) pre_rendered: Option<String>,
|
pub(crate) pre_rendered: Option<String>,
|
||||||
|
@ -67,7 +83,7 @@ impl Config {
|
||||||
|
|
||||||
Self {
|
Self {
|
||||||
window,
|
window,
|
||||||
menu: Some(default_menu_bar()),
|
menu: MenuBuilderState::Unset,
|
||||||
protocols: Vec::new(),
|
protocols: Vec::new(),
|
||||||
asynchronous_protocols: Vec::new(),
|
asynchronous_protocols: Vec::new(),
|
||||||
pre_rendered: None,
|
pre_rendered: None,
|
||||||
|
@ -110,15 +126,11 @@ impl Config {
|
||||||
|
|
||||||
/// Set the configuration for the window.
|
/// Set the configuration for the window.
|
||||||
pub fn with_window(mut self, window: WindowBuilder) -> Self {
|
pub fn with_window(mut self, window: WindowBuilder) -> Self {
|
||||||
// gots to do a swap because the window builder only takes itself as muy self
|
// We need to do a swap because the window builder only takes itself as muy self
|
||||||
// I wish more people knew about returning &mut Self
|
|
||||||
self.window = window;
|
self.window = window;
|
||||||
if self.window.window.decorations {
|
// If the decorations are off for the window, remove the menu as well
|
||||||
if self.menu.is_none() {
|
if !self.window.window.decorations && matches!(self.menu, MenuBuilderState::Unset) {
|
||||||
self.menu = Some(default_menu_bar());
|
self.menu = MenuBuilderState::Set(None);
|
||||||
}
|
|
||||||
} else {
|
|
||||||
self.menu = None;
|
|
||||||
}
|
}
|
||||||
self
|
self
|
||||||
}
|
}
|
||||||
|
@ -224,7 +236,7 @@ impl Config {
|
||||||
#[cfg(not(any(target_os = "ios", target_os = "android")))]
|
#[cfg(not(any(target_os = "ios", target_os = "android")))]
|
||||||
{
|
{
|
||||||
if self.window.window.decorations {
|
if self.window.window.decorations {
|
||||||
self.menu = menu.into();
|
self.menu = MenuBuilderState::Set(menu.into())
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
self
|
self
|
||||||
|
|
|
@ -317,10 +317,11 @@ impl WebviewInstance {
|
||||||
let webview = webview.build().unwrap();
|
let webview = webview.build().unwrap();
|
||||||
|
|
||||||
let menu = if cfg!(not(any(target_os = "android", target_os = "ios"))) {
|
let menu = if cfg!(not(any(target_os = "android", target_os = "ios"))) {
|
||||||
if let Some(menu) = &cfg.menu {
|
let menu_option = cfg.menu.into();
|
||||||
|
if let Some(menu) = &menu_option {
|
||||||
crate::menubar::init_menu_bar(menu, &window);
|
crate::menubar::init_menu_bar(menu, &window);
|
||||||
}
|
}
|
||||||
cfg.menu
|
menu_option
|
||||||
} else {
|
} else {
|
||||||
None
|
None
|
||||||
};
|
};
|
||||||
|
|
Loading…
Reference in a new issue