feat(core): add window_class name API on Windows (#11469)

* On Windows, set name of Window Class, closes #7498
allow to customize it instead of current value hard coded "Window Class"

* feat(windows): add window_classname, closes #7498
allow to customize the window class name instead of current value hard coded "Window Class"

    * feat: add window_classname, closes #7498

    * add changes file

    * Update core/tauri-config-schema/schema.json

    * Update tooling/cli/schema.json

* missing pieces after merge

* clippy

---------

Co-authored-by: Géraud-Loup <47665233+geraudloup@users.noreply.github.com>
Co-authored-by: Lucas Nogueira <lucas@tauri.app>
This commit is contained in:
Amr Bashir 2024-11-05 20:18:47 +02:00 committed by GitHub
parent 1b6b2cfaa1
commit 2a75c64b54
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
11 changed files with 78 additions and 0 deletions

View File

@ -0,0 +1,5 @@
---
"@tauri-apps/api": 'minor:feat'
---
Added `windowClassname` option, when constructing a `Webview` or `WebviewWindow`, to specify the name of the window class on Windows.

View File

@ -0,0 +1,6 @@
---
"tauri": 'minor:feat'
"tauri-utils": 'minor:feat'
---
Added `app > windows > windowClassname` config option to specify the name of the window class on Windows.

View File

@ -0,0 +1,7 @@
---
"tauri": 'minor:feat'
"tauri-runtime-wry": 'minor:feat'
"tauri-runtime": 'minor:feat'
---
Added `WindowBuilder/WebviewWindowBuilder::window_classname` method to specify the name of the window class on Windows.

View File

@ -397,6 +397,13 @@
"default": false,
"type": "boolean"
},
"windowClassname": {
"description": "The name of the window class created on Windows to create the window. **Windows only**.",
"type": [
"string",
"null"
]
},
"theme": {
"description": "The initial window theme. Defaults to the system theme. Only implemented on Windows and macOS 10.14+.",
"anyOf": [

View File

@ -763,6 +763,11 @@ impl WindowBuilder for WindowBuilderWrapper {
builder = builder.title("Tauri App");
#[cfg(windows)]
{
builder = builder.window_classname("Tauri Window");
}
builder
}
@ -846,6 +851,10 @@ impl WindowBuilder for WindowBuilderWrapper {
if config.center {
window = window.center();
}
if let Some(window_classname) = &config.window_classname {
window = window.window_classname(window_classname);
}
}
window
@ -1106,6 +1115,16 @@ impl WindowBuilder for WindowBuilderWrapper {
_ => Theme::Light,
})
}
#[cfg(windows)]
fn window_classname<S: Into<String>>(mut self, window_classname: S) -> Self {
self.inner = self.inner.with_window_classname(window_classname);
self
}
#[cfg(not(windows))]
fn window_classname<S: Into<String>>(self, _window_classname: S) -> Self {
self
}
}
#[cfg(any(

View File

@ -438,6 +438,10 @@ pub trait WindowBuilder: WindowBuilderBase {
fn has_icon(&self) -> bool;
fn get_theme(&self) -> Option<Theme>;
/// Sets custom name for Windows' window class. **Windows only**.
#[must_use]
fn window_classname<S: Into<String>>(self, window_classname: S) -> Self;
}
/// A window that has yet to be built.

View File

@ -397,6 +397,13 @@
"default": false,
"type": "boolean"
},
"windowClassname": {
"description": "The name of the window class created on Windows to create the window. **Windows only**.",
"type": [
"string",
"null"
]
},
"theme": {
"description": "The initial window theme. Defaults to the system theme. Only implemented on Windows and macOS 10.14+.",
"anyOf": [

View File

@ -1429,6 +1429,8 @@ pub struct WindowConfig {
/// If `true`, hides the window icon from the taskbar on Windows and Linux.
#[serde(default, alias = "skip-taskbar")]
pub skip_taskbar: bool,
/// The name of the window class created on Windows to create the window. **Windows only**.
pub window_classname: Option<String>,
/// The initial window theme. Defaults to the system theme. Only implemented on Windows and macOS 10.14+.
pub theme: Option<crate::Theme>,
/// The style of the macOS title bar.
@ -1566,6 +1568,7 @@ impl Default for WindowConfig {
visible_on_all_workspaces: false,
content_protected: false,
skip_taskbar: false,
window_classname: None,
theme: None,
title_bar_style: Default::default(),
hidden_title: false,
@ -2539,6 +2542,7 @@ mod build {
let visible_on_all_workspaces = self.visible_on_all_workspaces;
let content_protected = self.content_protected;
let skip_taskbar = self.skip_taskbar;
let window_classname = opt_str_lit(self.window_classname.as_ref());
let theme = opt_lit(self.theme.as_ref());
let title_bar_style = &self.title_bar_style;
let hidden_title = self.hidden_title;
@ -2587,6 +2591,7 @@ mod build {
visible_on_all_workspaces,
content_protected,
skip_taskbar,
window_classname,
theme,
title_bar_style,
hidden_title,

View File

@ -421,6 +421,10 @@ impl WindowBuilder for MockWindowBuilder {
self
}
fn window_classname<S: Into<String>>(self, classname: S) -> Self {
self
}
fn shadow(self, enable: bool) -> Self {
self
}

View File

@ -571,6 +571,13 @@ impl<'a, R: Runtime, M: Manager<R>> WebviewWindowBuilder<'a, R, M> {
self
}
/// Sets custom name for Windows' window class. **Windows only**.
#[must_use]
pub fn window_classname<S: Into<String>>(mut self, classname: S) -> Self {
self.window_builder = self.window_builder.window_classname(classname);
self
}
/// Sets whether or not the window has shadow.
///
/// ## Platform-specific

View File

@ -645,6 +645,13 @@ impl<'a, R: Runtime, M: Manager<R>> WindowBuilder<'a, R, M> {
self
}
/// Sets custom name for Windows' window class. **Windows only**.
#[must_use]
pub fn window_classname<S: Into<String>>(mut self, classname: S) -> Self {
self.window_builder = self.window_builder.window_classname(classname);
self
}
/// Sets whether or not the window has shadow.
///
/// ## Platform-specific