Jelajahi Sumber

feat: double-click tauri-drag-region to maximize, closes #1839 (#2106)

Amr Bashir 4 tahun lalu
induk
melakukan
8b7ac1ad14

+ 4 - 0
.changes/dblclick-tauri-drag-maximize.md

@@ -0,0 +1,4 @@
+---
+"tauri": patch
+---
+Double clicking a `data-tauri-drag-region` element will toggle the window maximized state.

+ 23 - 8
core/tauri/scripts/core.js

@@ -191,14 +191,29 @@ if (!String.prototype.startsWith) {
 
   // drag region
   document.addEventListener('mousedown', (e) => {
-    // start dragging if the element has a `tauri-drag-region` data attribute
-    if (e.target.hasAttribute('data-tauri-drag-region') && e.buttons === 1) {
-      window.__TAURI__._invoke('tauri', {
-        __tauriModule: "Window",
-        message: {
-          cmd: "startDragging",
-        }
-      }, _KEY_VALUE_)
+    if (e.target.hasAttribute("data-tauri-drag-region") && e.buttons === 1) {
+      // start dragging if the element has a `tauri-drag-region` data attribute and maximize on double-clicking it
+      e.detail === 2
+      ? window.__TAURI__._invoke(
+        "tauri",
+        {
+          __tauriModule: "Window",
+          message: {
+            cmd: "toggleMaximize",
+          },
+        },
+        _KEY_VALUE_
+          )
+        : window.__TAURI__._invoke(
+            "tauri",
+            {
+              __tauriModule: "Window",
+              message: {
+                cmd: "startDragging",
+              },
+            },
+            _KEY_VALUE_
+          );
     }
   })
 

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

@@ -62,6 +62,7 @@ pub enum Cmd {
   SetTitle(String),
   Maximize,
   Unmaximize,
+  ToggleMaximize,
   Minimize,
   Unminimize,
   Show,
@@ -152,6 +153,10 @@ impl Cmd {
         Self::SetTitle(title) => window.set_title(&title)?,
         Self::Maximize => window.maximize()?,
         Self::Unmaximize => window.unmaximize()?,
+        Self::ToggleMaximize => match window.is_maximized()? {
+          true => window.unmaximize()?,
+          false => window.maximize()?,
+        },
         Self::Minimize => window.minimize()?,
         Self::Unminimize => window.unminimize()?,
         Self::Show => window.show()?,