tauri
tauri copied to clipboard
How to create multiple separate windows, instead of "tabs"?
Windows created by App::create_window() are just like tabs, sharing a same window, but I want they each had a separate window, can tauri do this? If so, how?
Sorry if I've missed anything, but i've been googling for a long time, checked the docs and issues of tauri and tao, got nothing at all.

Could you please fill out the rest of the information required like tauri info? This is definitely not the default behavior at all so it'd be good to know which platform you're on.
Sorry for for the lack of information. This is what I output under the tauri project:
Environment
› OS: Mac OS 12.3.0 X64
› Node.js: 16.13.2
› npm: 8.1.2
› pnpm: Not installed!
› yarn: 1.22.17
› rustup: 1.24.3
› rustc: 1.59.0
› cargo: 1.59.0
› Rust toolchain: stable-aarch64-apple-darwin
Packages
› @tauri-apps/cli [NPM]: 1.0.0-rc.7
› @tauri-apps/api [NPM]: Not installed!
› tauri [RUST]: no manifest (no lockfile),
› tauri-build [RUST]: no manifest (no lockfile),
› tao [RUST]: no manifest (no lockfile),
› wry [RUST]: no manifest (no lockfile),
App
› build-type: bundle
› CSP: default-src 'self'
› distDir: ["index.html"]
› devPath: ["index.html"]
App directory structure
├─ .husky
├─ tooling
├─ core
├─ audits
├─ target
├─ node_modules
├─ .changes
├─ .scripts
├─ examples
├─ .github
└─ .git
This is me running the "multiwindow" example (with some irrelevant js code commented out) of this project, I found that all windows created by rust become tabs of a window, and all windows created by js are in another window:
https://user-images.githubusercontent.com/12783466/163813075-30b928af-ce5c-43b4-9eba-464b3aa7f7bb.mp4
This behavior is a configuration option in your macOS System Preferences. Open the System Preferences app, click on General, and change Prefer tabs to in fullscreen or never.
@lucasfernog Thanks for pointing out, but I think the problem is only partially solved, why the first click of the create window button in my case above ignoring my system settings and open a new window? That's exactly what I want, to make sure a new window opens, regardless of the system settings. This system setting never affects my results when I click on the New Window option in, say, vscode, does it?
Let me change the question to, how do I make sure that I can create multiple separate windows when I want to?
I don't think we're doing anything special in this case, but i'll reopen so we can track it.
Looks like we can use NSWindow::setAllowsAutomaticWindowTabbing_(ns_window, NO); to force the tab option, but we might need to wait for v1 to be released.
Now that v1 was released, is this now available/achievable?
any code example pls?? I was trying this but my code is incomplete
#[allow(dead_code)]
#[tauri::command]
async fn open_docs() {
let handle: tauri::AppHandle = tauri::AppHandle();
let docs_window = tauri::WindowBuilder::new(
&handle,
"external", /* the unique window label */
tauri::WindowUrl::External("https://tauri.app/".parse().unwrap()),
).build().unwrap();
}
@aliscie inject the app handle like this and it should work: https://tauri.app/v1/guides/features/command#accessing-an-apphandle-in-commands
https://tauri.app/v1/guides/features/command#accessing-an-apphandle-in-commands
in the frontend how can I run this? like this?
//my rust frontend
let app_handle = somthing_that_i_dont_know
spawn_local(async move {
invoke_async("my_custom_command",(app_handle,)).await
});
My tasks is very simple, i just have a button and I need to open new dinow when i click it.
i don't know anything about rust frontends tbh, but you don't need to inject the app_handle yourself, Tauri injects it for you (in that regard rust frontends are the same as js frontends)
any code example pls??
This is what I have in the setup hook in my app:
#[cfg(target_os = "macos")]
{
// Disable the automatic creation of "Show Tab Bar" etc menu items on macOS
let window = app.get_window("main").unwrap();
unsafe {
let ns_window = window.ns_window().unwrap() as cocoa::base::id;
NSWindow::setAllowsAutomaticWindowTabbing_(ns_window, cocoa::base::NO);
}
}