Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

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

Open
wants to merge 6 commits into
base: dev
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 5 additions & 0 deletions .changes/window-class-name-config-api.md
Original file line number Diff line number Diff line change
@@ -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.
6 changes: 6 additions & 0 deletions .changes/window-class-name-config.md
Original file line number Diff line number Diff line change
@@ -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.
7 changes: 7 additions & 0 deletions .changes/window-class-name.md
Original file line number Diff line number Diff line change
@@ -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.
7 changes: 7 additions & 0 deletions crates/tauri-cli/config.schema.json
Original file line number Diff line number Diff line change
Expand Up @@ -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": [
Expand Down
19 changes: 19 additions & 0 deletions crates/tauri-runtime-wry/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -746,6 +746,11 @@ impl WindowBuilder for WindowBuilderWrapper {
builder = builder.title_bar_style(TitleBarStyle::Visible);
}

#[cfg(windows)]
{
builder = builder.window_classname("Tauri Window");
}

builder
}

Expand Down Expand Up @@ -828,6 +833,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
Expand Down Expand Up @@ -1088,6 +1097,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(
Expand Down
4 changes: 4 additions & 0 deletions crates/tauri-runtime/src/window.rs
Original file line number Diff line number Diff line change
Expand Up @@ -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.
Expand Down
7 changes: 7 additions & 0 deletions crates/tauri-schema-generator/schemas/config.schema.json
Original file line number Diff line number Diff line change
Expand Up @@ -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": [
Expand Down
5 changes: 5 additions & 0 deletions crates/tauri-utils/src/config.rs
Original file line number Diff line number Diff line change
Expand Up @@ -1396,6 +1396,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.
Expand Down Expand Up @@ -1521,6 +1523,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,
Expand Down Expand Up @@ -2493,6 +2496,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;
Expand Down Expand Up @@ -2540,6 +2544,7 @@ mod build {
visible_on_all_workspaces,
content_protected,
skip_taskbar,
window_classname,
theme,
title_bar_style,
hidden_title,
Expand Down
4 changes: 4 additions & 0 deletions crates/tauri/src/test/mock_runtime.rs
Original file line number Diff line number Diff line change
Expand Up @@ -416,6 +416,10 @@ impl WindowBuilder for MockWindowBuilder {
self
}

fn window_classname<S: Into<String>>(self, classname: S) -> Self {
self
}

fn shadow(self, enable: bool) -> Self {
self
}
Expand Down
7 changes: 7 additions & 0 deletions crates/tauri/src/webview/webview_window.rs
Original file line number Diff line number Diff line change
Expand Up @@ -569,6 +569,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
Expand Down
7 changes: 7 additions & 0 deletions crates/tauri/src/window/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -641,6 +641,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
Expand Down