1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798 |
- // Copyright 2019-2021 Tauri Programme within The Commons Conservancy
- // SPDX-License-Identifier: Apache-2.0
- // SPDX-License-Identifier: MIT
- #![cfg_attr(
- all(not(debug_assertions), target_os = "windows"),
- windows_subsystem = "windows"
- )]
- // Application code for a splashscreen system that waits on a Rust initialization script
- mod rust {
- use std::{thread::sleep, time::Duration};
- use tauri::Manager;
- // this command is here just so the example doesn't throw an error
- #[tauri::command]
- fn close_splashscreen() {}
- pub fn main() {
- tauri::Builder::default()
- .setup(|app| {
- let splashscreen_window = app.get_window("splashscreen").unwrap();
- let main_window = app.get_window("main").unwrap();
- // we perform the initialization code on a new task so the app doesn't crash
- tauri::async_runtime::spawn(async move {
- println!("Initializing...");
- sleep(Duration::from_secs(2));
- println!("Done initializing.");
- // After it's done, close the splashscreen and display the main window
- splashscreen_window.close().unwrap();
- main_window.show().unwrap();
- });
- Ok(())
- })
- .invoke_handler(tauri::generate_handler![close_splashscreen])
- .run(tauri::generate_context!(
- "../../examples/splashscreen/tauri.conf.json"
- ))
- .expect("failed to run app");
- }
- }
- // Application code for a splashscreen system that waits for the UI
- mod ui {
- use std::sync::{Arc, Mutex};
- use tauri::{Manager, State, Window};
- // wrappers around each Window
- // we use a dedicated type because Tauri can only manage a single instance of a given type
- struct SplashscreenWindow(Arc<Mutex<Window>>);
- struct MainWindow(Arc<Mutex<Window>>);
- #[tauri::command]
- fn close_splashscreen(
- _: Window, // force inference of P
- splashscreen: State<SplashscreenWindow>,
- main: State<MainWindow>,
- ) {
- // Close splashscreen
- splashscreen.0.lock().unwrap().close().unwrap();
- // Show main window
- main.0.lock().unwrap().show().unwrap();
- }
- pub fn main() {
- let context = tauri::generate_context!("../../examples/splashscreen/tauri.conf.json");
- tauri::Builder::default()
- .menu(if cfg!(target_os = "macos") {
- tauri::Menu::os_default(&context.package_info().name)
- } else {
- tauri::Menu::default()
- })
- .setup(|app| {
- // set the splashscreen and main windows to be globally available with the tauri state API
- app.manage(SplashscreenWindow(Arc::new(Mutex::new(
- app.get_window("splashscreen").unwrap(),
- ))));
- app.manage(MainWindow(Arc::new(Mutex::new(
- app.get_window("main").unwrap(),
- ))));
- Ok(())
- })
- .invoke_handler(tauri::generate_handler![close_splashscreen])
- .run(context)
- .expect("error while running tauri application");
- }
- }
- fn main() {
- // toggle this flag to experiment with different splashscreen usages
- let ui = false;
- if ui {
- ui::main();
- } else {
- rust::main();
- }
- }
|