Skip to main content

DesktopConfig

Struct DesktopConfig 

Source
pub struct DesktopConfig {
    pub app_name: Option<String>,
    pub app_id: Option<String>,
    pub window_icon: Option<IconData>,
    pub menu_spec: Option<MenuSpec>,
    pub quit_on_last_window_closed: bool,
}
Expand description

The desktop app’s identity and native-integration vocabulary, re-exported from the desktop core so app code never names a shell crate: DesktopConfig (the whole declaration — app name, reverse-DNS id, window icon, menu bar, last-window-close policy — handed to App::desktop, run_desktop_config or app!’s desktop = { .. } argument), MenuSpec/MenuItemSpec/MenuRole (the platform-independent native menu tree a per-OS shell translates into an NSApp menu bar or an HMENU), DesktopIconData (decoded, tightly-packed RGBA8 — decoding a PNG/ICO/ICNS is the caller’s job), and DEFAULT_APP_NAME (the window title a config that names nothing still gets).

frust-shell-desktop‘s IconData is re-exported renamed: the facade already carries frust-widgets’ IconData, an in-UI vector icon, and the two are unrelated (one is a BezPath a widget paints, the other is the window/taskbar bitmap the OS shows). The Desktop prefix matches DesktopConfig, whose with_window_icon is its only consumer.

use frust::{DesktopConfig, MenuItemSpec, MenuRole, MenuSpec};

let file = MenuSpec::new()
    .with_item(MenuItemSpec::item("file.open", "Open…").with_accelerator("CmdOrCtrl+O"))
    .with_item(MenuItemSpec::separator())
    .with_item(MenuItemSpec::role(MenuRole::Quit));

let config = DesktopConfig::new()
    .with_app_name("Huddle")
    .with_app_id("dev.frust.huddle")
    .with_menu_spec(MenuSpec::new().with_item(MenuItemSpec::submenu("File", file)));

Desktop-only, unlike the menu_events read side: these types are defined in frust-shell-desktop, which is not in a mobile build’s or a wasm32 build’s dependency graph at all (see this crate’s Cargo.toml). Code shared with a mobile or wasm32 target keeps a DesktopConfig behind its own #[cfg(not(any(target_os = "android", target_os = "ios", target_arch = "wasm32")))] — or, more simply, writes it inline in app!’s desktop = { .. } argument, which the macro already emits only on the targets that have it. The desktop app’s identity and native-integration configuration.

Built by the facade from an app’s own declaration and handed to run_desktop_with; every field is optional and the Default value is today’s dev-preview behavior (see the module docs).

Fields§

§app_name: Option<String>

The app’s display name: the window title, and (for the per-OS shells) the name a macOS menu bar’s application menu shows. None falls back to DEFAULT_APP_NAME for the title — see DesktopConfig::window_title.

§app_id: Option<String>

The app’s reverse-DNS identifier (com.example.myapp). Carried, never consumed by the shared core: the Linux shell turns it into a Wayland app_id/X11 WM_CLASS so the window pairs with its .desktop entry, and the Windows shell into an AppUserModelID so taskbar grouping and notifications attribute correctly.

§window_icon: Option<IconData>

The window/taskbar icon as platform-independent RGBA (see IconData). Carried for the per-OS shells; the shared core never attaches it, since winit’s own WindowAttributes::with_window_icon reaches X11 and Windows only and macOS wants an application icon rather than a window one.

§menu_spec: Option<MenuSpec>

The native menu bar to install, if any (see MenuSpec). Carried for the per-OS shells that can build one; a platform with no native menu (Linux, where the menu is widget-drawn) simply ignores it.

§quit_on_last_window_closed: bool

Whether closing the last window quits the app.

Carried, not consumed by the shared core: with no extension installed a close request always exits the event loop (today’s behavior, and what true means anyway). It exists for the macOS shell, where the platform convention is for an app to stay running with no window until ⌘Q — see DesktopExtensions::on_close_requested.

Implementations§

Source§

impl DesktopConfig

Source

pub fn new() -> DesktopConfig

A config that reproduces today’s zero-config preview window (see Default).

Source

pub fn with_app_name(self, app_name: impl Into<String>) -> DesktopConfig

Set the app’s display name (the window title).

Source

pub fn with_app_id(self, app_id: impl Into<String>) -> DesktopConfig

Set the app’s reverse-DNS identifier.

Source

pub fn with_window_icon(self, icon: IconData) -> DesktopConfig

Set the window/taskbar icon.

Source

pub fn with_menu_spec(self, menu_spec: MenuSpec) -> DesktopConfig

Set the native menu bar to install.

Source

pub fn with_quit_on_last_window_closed(self, quit: bool) -> DesktopConfig

Set whether closing the last window quits the app.

Source

pub fn window_title(&self) -> &str

The title to give the preview window: the configured app_name, else DEFAULT_APP_NAME.

The fallback lives here rather than in the field itself so a per-OS shell can still tell “the app named itself Frust” apart from “the app named itself nothing” — a macOS menu bar wants the real name or no application menu at all, not a placeholder.

Trait Implementations§

Source§

impl Clone for DesktopConfig

Source§

fn clone(&self) -> DesktopConfig

Returns a duplicate of the value. Read more
1.0.0 (const: unstable) · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for DesktopConfig

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

Formats the value using the given formatter. Read more
Source§

impl Default for DesktopConfig

Source§

fn default() -> DesktopConfig

Hand-written rather than derived because quit_on_last_window_closed defaults to true — the shell’s existing unconditional event_loop.exit() on CloseRequested.

Source§

impl Eq for DesktopConfig

Source§

impl PartialEq for DesktopConfig

Source§

fn eq(&self, other: &DesktopConfig) -> bool

Equality operator ==. Read more
1.0.0 (const: unstable) · Source§

fn ne(&self, other: &Rhs) -> bool

Inequality operator !=. Read more
Source§

impl StructuralPartialEq for DesktopConfig

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> Brush for T
where T: Clone + PartialEq + Default + Debug,

Source§

impl<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
where ST: ?Sized, DT: ?Sized,

Source§

impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
where ST: ?Sized, DT: ?Sized,

Source§

impl<T> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> Downcast for T
where T: Any,

Source§

fn into_any(self: Box<T>) -> Box<dyn Any>

Convert Box<dyn Trait> (where Trait: Downcast) to Box<dyn Any>. Box<dyn Any> can then be further downcast into Box<ConcreteType> where ConcreteType implements Trait.
Source§

fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>

Convert Rc<Trait> (where Trait: Downcast) to Rc<Any>. Rc<Any> can then be further downcast into Rc<ConcreteType> where ConcreteType implements Trait.
Source§

fn as_any(&self) -> &(dyn Any + 'static)

Convert &Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot generate &Any’s vtable from &Trait’s.
Source§

fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)

Convert &mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot generate &mut Any’s vtable from &mut Trait’s.
Source§

impl<T> DowncastSync for T
where T: Any + Send + Sync,

Source§

fn into_any_arc(self: Arc<T>) -> Arc<dyn Any + Sync + Send> ⓘ

Convert Arc<Trait> (where Trait: Downcast) to Arc<Any>. Arc<Any> can then be further downcast into Arc<ConcreteType> where ConcreteType implements Trait.
Source§

impl<Q, K> Equivalent<K> for Q
where Q: Eq + ?Sized, K: Borrow<Q> + ?Sized,

Source§

fn equivalent(&self, key: &K) -> bool

Checks if this value is equivalent to the given key. Read more
Source§

impl<Q, K> Equivalent<K> for Q
where Q: Eq + ?Sized, K: Borrow<Q> + ?Sized,

Source§

fn equivalent(&self, key: &K) -> bool

Compare self to key and return true if they are equal.
Source§

impl<T> ErasedDestructor for T
where T: 'static,

Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T> Instrument for T

Source§

fn instrument(self, span: Span) -> Instrumented<Self> ⓘ

Instruments this type with the provided Span, returning an Instrumented wrapper. Read more
Source§

fn in_current_span(self) -> Instrumented<Self> ⓘ

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> NoneValue for T
where T: Default,

Source§

type NoneType = T

Source§

fn null_value() -> T

The none-equivalent value.
Source§

impl<T> Read<Exclusive, BecauseExclusive> for T
where T: ?Sized,

Source§

impl<T, S> SimdFrom<T, S> for T
where S: Simd,

Source§

fn simd_from(_simd: S, value: T) -> T

Source§

impl<F, T, S> SimdInto<T, S> for F
where T: SimdFrom<F, S>, S: Simd,

Source§

fn simd_into(self, simd: S) -> T

Source§

impl<T> StorageAccess<T> for T

Source§

fn as_borrowed(&self) -> &T

Borrows the value.
Source§

fn into_taken(self) -> T

Takes the value.
Source§

impl<T> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = !

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, !>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
Source§

impl<T> WasmNotSend for T
where T: Send,

Source§

impl<T> WasmNotSendSync for T

Source§

impl<T> WasmNotSync for T
where T: Sync,

Source§

impl<T> WithSubscriber for T

Source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self> ⓘ
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a WithDispatch wrapper. Read more
Source§

fn with_current_subscriber(self) -> WithDispatch<Self> ⓘ

Attaches the current default Subscriber to this type, returning a WithDispatch wrapper. Read more