//! Shows the ability to share widgets between multiple windows. //! //! This example was created to test a fix for //! . The issue was that if the //! same Switcher widget was shown on two separate windows, only one window //! would unmount the existing widget. //! //! When running this example after the bug has been fixed, unmounted messages //! should be printed twice: once per each window. use cushy::value::{Dynamic, Switchable}; use cushy::widget::MakeWidget; use cushy::widgets::Custom; use cushy::{Open, PendingApp}; #[derive(Debug, Clone, Copy, Eq, PartialEq)] enum Contents { A, B, } #[cushy::main] fn main(app: &mut PendingApp) -> cushy::Result { let selected = Dynamic::new(Contents::A); // Open up another window containing our controls selected .new_radio(Contents::A, "A") .and(selected.new_radio(Contents::B, "B")) .into_rows() .open(app)?; let display = selected .switcher(|contents, _| match contents { Contents::A => Custom::new("A") .on_unmounted(|_| { println!("A unmounted"); }) .make_widget(), Contents::B => Custom::new("B") .on_unmounted(|_| { println!("B unmounted"); }) .make_widget(), }) .make_widget(); // Open two windows with the same switcher instance display.to_window().open(app)?; display.to_window().open(app)?; Ok(()) }