Skip to content

Commit

Permalink
feat(core): add window_class name API on Windows (#11469)
Browse files Browse the repository at this point in the history
* 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>
  • Loading branch information
3 people authored Nov 5, 2024
1 parent 1b6b2cf commit 2a75c64
Show file tree
Hide file tree
Showing 11 changed files with 78 additions and 0 deletions.
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 @@ -763,6 +763,11 @@ impl WindowBuilder for WindowBuilderWrapper {

builder = builder.title("Tauri App");

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

builder
}

Expand Down Expand Up @@ -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
Expand Down Expand Up @@ -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(
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 @@ -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.
Expand Down Expand Up @@ -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,
Expand Down Expand Up @@ -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;
Expand Down Expand Up @@ -2587,6 +2591,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 @@ -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
}
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 @@ -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
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 @@ -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
Expand Down

0 comments on commit 2a75c64

Please sign in to comment.