瀏覽代碼

feat: add `title` getter on window, closes #5023 (#5515)

Co-authored-by: Lucas Nogueira <lucas@tauri.studio>
Amr Bashir 2 年之前
父節點
當前提交
233e43b0c3

+ 8 - 0
.changes/title-getter.md

@@ -0,0 +1,8 @@
+---
+"tauri": "minor"
+"api": "minor"
+"tauri-runtime": "minor"
+"tauri-runtime-wry": "minor"
+---
+
+Add `title` getter on window.

+ 6 - 0
core/tauri-runtime-wry/src/lib.rs

@@ -1028,6 +1028,7 @@ pub enum WindowMessage {
   IsDecorated(Sender<bool>),
   IsResizable(Sender<bool>),
   IsVisible(Sender<bool>),
+  Title(Sender<String>),
   IsMenuVisible(Sender<bool>),
   CurrentMonitor(Sender<Option<MonitorHandle>>),
   PrimaryMonitor(Sender<Option<MonitorHandle>>),
@@ -1262,6 +1263,10 @@ impl<T: UserEvent> Dispatch<T> for WryDispatcher<T> {
     window_getter!(self, WindowMessage::IsVisible)
   }
 
+  fn title(&self) -> Result<String> {
+    window_getter!(self, WindowMessage::Title)
+  }
+
   fn is_menu_visible(&self) -> Result<bool> {
     window_getter!(self, WindowMessage::IsMenuVisible)
   }
@@ -2349,6 +2354,7 @@ fn handle_user_message<T: UserEvent>(
             WindowMessage::IsDecorated(tx) => tx.send(window.is_decorated()).unwrap(),
             WindowMessage::IsResizable(tx) => tx.send(window.is_resizable()).unwrap(),
             WindowMessage::IsVisible(tx) => tx.send(window.is_visible()).unwrap(),
+            WindowMessage::Title(tx) => tx.send(window.title()).unwrap(),
             WindowMessage::IsMenuVisible(tx) => tx.send(window.is_menu_visible()).unwrap(),
             WindowMessage::CurrentMonitor(tx) => tx.send(window.current_monitor()).unwrap(),
             WindowMessage::PrimaryMonitor(tx) => tx.send(window.primary_monitor()).unwrap(),

+ 2 - 0
core/tauri-runtime/src/lib.rs

@@ -536,6 +536,8 @@ pub trait Dispatch<T: UserEvent>: Debug + Clone + Send + Sync + Sized + 'static
 
   /// Gets the window's current visibility state.
   fn is_visible(&self) -> Result<bool>;
+  /// Gets the window's current title.
+  fn title(&self) -> Result<String>;
 
   /// Gets the window menu current visibility state.
   fn is_menu_visible(&self) -> Result<bool>;

文件差異過大導致無法顯示
+ 0 - 0
core/tauri/scripts/bundle.global.js


+ 2 - 0
core/tauri/src/endpoints/window.rs

@@ -68,6 +68,7 @@ pub enum WindowManagerCmd {
   IsDecorated,
   IsResizable,
   IsVisible,
+  Title,
   CurrentMonitor,
   PrimaryMonitor,
   AvailableMonitors,
@@ -259,6 +260,7 @@ impl Cmd {
       WindowManagerCmd::IsDecorated => return Ok(window.is_decorated()?.into()),
       WindowManagerCmd::IsResizable => return Ok(window.is_resizable()?.into()),
       WindowManagerCmd::IsVisible => return Ok(window.is_visible()?.into()),
+      WindowManagerCmd::Title => return Ok(window.title()?.into()),
       WindowManagerCmd::CurrentMonitor => return Ok(window.current_monitor()?.into()),
       WindowManagerCmd::PrimaryMonitor => return Ok(window.primary_monitor()?.into()),
       WindowManagerCmd::AvailableMonitors => return Ok(window.available_monitors()?.into()),

+ 4 - 0
core/tauri/src/test/mock_runtime.rs

@@ -379,6 +379,10 @@ impl<T: UserEvent> Dispatch<T> for MockDispatcher {
     Ok(true)
   }
 
+  fn title(&self) -> Result<String> {
+    Ok(String::new())
+  }
+
   fn is_menu_visible(&self) -> Result<bool> {
     Ok(true)
   }

+ 5 - 0
core/tauri/src/window.rs

@@ -913,6 +913,11 @@ impl<R: Runtime> Window<R> {
     self.window.dispatcher.is_visible().map_err(Into::into)
   }
 
+  /// Gets the window's current title.
+  pub fn title(&self) -> crate::Result<String> {
+    self.window.dispatcher.title().map_err(Into::into)
+  }
+
   /// Returns the monitor on which the window currently resides.
   ///
   /// Returns None if current monitor can't be detected.

文件差異過大導致無法顯示
+ 0 - 0
examples/api/dist/assets/index.css


文件差異過大導致無法顯示
+ 0 - 0
examples/api/dist/assets/index.js


+ 15 - 63
examples/api/src-tauri/Cargo.lock

@@ -8,12 +8,6 @@ version = "1.0.2"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe"
 
-[[package]]
-name = "adler32"
-version = "1.2.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "aae1277d39aeec15cb388266ecc24b11c80469deae6067e17a1a7aa9e5c1f234"
-
 [[package]]
 name = "aead"
 version = "0.4.3"
@@ -635,16 +629,6 @@ dependencies = [
  "winapi",
 ]
 
-[[package]]
-name = "deflate"
-version = "0.7.20"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "707b6a7b384888a70c8d2e8650b3e60170dfc6a67bb4aa67b6dfca57af4bedb4"
-dependencies = [
- "adler32",
- "byteorder",
-]
-
 [[package]]
 name = "derive_more"
 version = "0.99.17"
@@ -1348,12 +1332,12 @@ dependencies = [
 
 [[package]]
 name = "ico"
-version = "0.1.0"
+version = "0.2.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "6a4b3331534254a9b64095ae60d3dc2a8225a7a70229cd5888be127cdc1f6804"
+checksum = "031530fe562d8c8d71c0635013d6d155bbfe8ba0aa4b4d2d24ce8af6b71047bd"
 dependencies = [
  "byteorder",
- "png 0.11.0",
+ "png",
 ]
 
 [[package]]
@@ -1431,15 +1415,6 @@ dependencies = [
  "cfb 0.7.3",
 ]
 
-[[package]]
-name = "inflate"
-version = "0.3.4"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "f5f9f47468e9a76a6452271efadc88fe865a82be91fe75e6c0c57b87ccea59d4"
-dependencies = [
- "adler32",
-]
-
 [[package]]
 name = "instant"
 version = "0.1.12"
@@ -1891,17 +1866,6 @@ dependencies = [
  "num-traits",
 ]
 
-[[package]]
-name = "num-iter"
-version = "0.1.43"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "7d03e6c028c5dc5cac6e2dec0efda81fc887605bb3d884578bb6d6bf7514e252"
-dependencies = [
- "autocfg",
- "num-integer",
- "num-traits",
-]
-
 [[package]]
 name = "num-rational"
 version = "0.4.1"
@@ -2298,18 +2262,6 @@ dependencies = [
  "xml-rs",
 ]
 
-[[package]]
-name = "png"
-version = "0.11.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "f0b0cabbbd20c2d7f06dbf015e06aad59b6ca3d9ed14848783e98af9aaf19925"
-dependencies = [
- "bitflags",
- "deflate",
- "inflate",
- "num-iter",
-]
-
 [[package]]
 name = "png"
 version = "0.17.7"
@@ -3104,7 +3056,7 @@ dependencies = [
  "once_cell",
  "parking_lot",
  "paste",
- "png 0.17.7",
+ "png",
  "raw-window-handle",
  "scopeguard",
  "serde",
@@ -3128,7 +3080,7 @@ dependencies = [
 
 [[package]]
 name = "tauri"
-version = "1.2.0"
+version = "1.2.2"
 dependencies = [
  "anyhow",
  "attohttpc",
@@ -3157,7 +3109,7 @@ dependencies = [
  "os_info",
  "os_pipe",
  "percent-encoding",
- "png 0.17.7",
+ "png",
  "rand 0.8.5",
  "raw-window-handle",
  "regex",
@@ -3190,7 +3142,7 @@ dependencies = [
 
 [[package]]
 name = "tauri-build"
-version = "1.2.0"
+version = "1.2.1"
 dependencies = [
  "anyhow",
  "cargo_toml",
@@ -3206,14 +3158,14 @@ dependencies = [
 
 [[package]]
 name = "tauri-codegen"
-version = "1.2.0"
+version = "1.2.1"
 dependencies = [
  "base64",
  "brotli",
  "ico",
  "json-patch",
  "plist",
- "png 0.17.7",
+ "png",
  "proc-macro2",
  "quote",
  "regex",
@@ -3230,7 +3182,7 @@ dependencies = [
 
 [[package]]
 name = "tauri-macros"
-version = "1.2.0"
+version = "1.2.1"
 dependencies = [
  "heck 0.4.0",
  "proc-macro2",
@@ -3242,7 +3194,7 @@ dependencies = [
 
 [[package]]
 name = "tauri-runtime"
-version = "0.12.0"
+version = "0.12.1"
 dependencies = [
  "gtk",
  "http",
@@ -3260,7 +3212,7 @@ dependencies = [
 
 [[package]]
 name = "tauri-runtime-wry"
-version = "0.12.0"
+version = "0.12.2"
 dependencies = [
  "cocoa",
  "gtk",
@@ -3278,7 +3230,7 @@ dependencies = [
 
 [[package]]
 name = "tauri-utils"
-version = "1.2.0"
+version = "1.2.1"
 dependencies = [
  "aes-gcm",
  "brotli",
@@ -4241,9 +4193,9 @@ dependencies = [
 
 [[package]]
 name = "wry"
-version = "0.22.0"
+version = "0.23.4"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "923d297b203eae65b095af16c02978b7932be1968012b4da7138390edf34dea5"
+checksum = "4c1ad8e2424f554cc5bdebe8aa374ef5b433feff817aebabca0389961fc7ef98"
 dependencies = [
  "base64",
  "block",

+ 25 - 0
tooling/api/src/window.ts

@@ -704,6 +704,31 @@ class WindowManager extends WebviewWindowHandle {
     })
   }
 
+  /**
+   * Gets the window's current title.
+   * @example
+   * ```typescript
+   * import { appWindow } from '@tauri-apps/api/window';
+   * const title = await appWindow.title();
+   * ```
+   *
+   * @since 1.3.0
+   * */
+  async title(): Promise<string> {
+    return invokeTauriCommand({
+      __tauriModule: 'Window',
+      message: {
+        cmd: 'manage',
+        data: {
+          label: this.label,
+          cmd: {
+            type: 'title'
+          }
+        }
+      }
+    })
+  }
+
   /**
    * Gets the window's current theme.
    *

部分文件因文件數量過多而無法顯示