From ae94993b09b871a2f5cca5638f428d51624fd582 Mon Sep 17 00:00:00 2001
From: GyDi <segydi@foxmail.com>
Date: Wed, 25 May 2022 16:45:18 +0800
Subject: [PATCH] fix: create main window

---
 src-tauri/src/main.rs          | 36 ++------------------------
 src-tauri/src/utils/resolve.rs | 46 +++++++++++++++++++++++++++++++++-
 2 files changed, 47 insertions(+), 35 deletions(-)

diff --git a/src-tauri/src/main.rs b/src-tauri/src/main.rs
index 19bbc41..9d729e4 100644
--- a/src-tauri/src/main.rs
+++ b/src-tauri/src/main.rs
@@ -44,23 +44,7 @@ fn main() -> std::io::Result<()> {
     .on_system_tray_event(move |app_handle, event| match event {
       SystemTrayEvent::MenuItemClick { id, .. } => match id.as_str() {
         "open_window" => {
-          tauri::window::WindowBuilder::new(
-            app_handle,
-            "main".to_string(),
-            tauri::WindowUrl::App("index.html".into()),
-          )
-          .title("Clash Verge")
-          .center()
-          .decorations(false)
-          .fullscreen(false)
-          .inner_size(800.0, 636.0)
-          .min_inner_size(600.0, 520.0)
-          .build()
-          .err()
-          .and_then(|e| {
-            log::error!("{e}");
-            Some(0)
-          });
+          resolve::create_window(app_handle);
         }
         "system_proxy" => {
           let core = app_handle.state::<core::Core>();
@@ -104,23 +88,7 @@ fn main() -> std::io::Result<()> {
       },
       #[cfg(target_os = "windows")]
       SystemTrayEvent::LeftClick { .. } => {
-        tauri::window::WindowBuilder::new(
-          app_handle,
-          "main".to_string(),
-          tauri::WindowUrl::App("index.html".into()),
-        )
-        .title("Clash Verge")
-        .center()
-        .decorations(false)
-        .fullscreen(false)
-        .inner_size(800.0, 636.0)
-        .min_inner_size(600.0, 520.0)
-        .build()
-        .err()
-        .and_then(|e| {
-          log::error!("{e}");
-          Some(0)
-        });
+        resolve::create_window(app_handle);
       }
       _ => {}
     })
diff --git a/src-tauri/src/utils/resolve.rs b/src-tauri/src/utils/resolve.rs
index cf5e617..5fa0d74 100644
--- a/src-tauri/src/utils/resolve.rs
+++ b/src-tauri/src/utils/resolve.rs
@@ -1,4 +1,4 @@
-use crate::{core::Core, utils::init, utils::server};
+use crate::{core::Core, log_if_err, utils::init, utils::server};
 use tauri::{App, AppHandle, Manager};
 
 /// handle something when start app
@@ -61,3 +61,47 @@ fn resolve_window(app: &App) {
     }));
   }
 }
+
+/// create main window
+pub fn create_window(app_handle: &AppHandle) {
+  if let Some(window) = app_handle.get_window("main") {
+    let _ = window.unminimize();
+    let _ = window.show();
+    let _ = window.set_focus();
+    return;
+  }
+
+  let builder = tauri::window::WindowBuilder::new(
+    app_handle,
+    "main".to_string(),
+    tauri::WindowUrl::App("index.html".into()),
+  )
+  .title("Clash Verge")
+  .center()
+  .fullscreen(false)
+  .min_inner_size(600.0, 520.0);
+
+  #[cfg(target_os = "windows")]
+  {
+    use crate::utils::winhelp;
+    use window_shadows::set_shadow;
+    use window_vibrancy::apply_blur;
+
+    match builder.decorations(false).inner_size(800.0, 636.0).build() {
+      Ok(window) => {
+        let _ = set_shadow(&window, true);
+
+        if !winhelp::is_win11() {
+          let _ = apply_blur(&window, None);
+        }
+      }
+      Err(err) => log::error!("{err}"),
+    }
+  }
+
+  #[cfg(target_os = "macos")]
+  log_if_err!(builder.decorations(true).inner_size(800.0, 620.0).build());
+
+  #[cfg(target_os = "linux")]
+  log_if_err!(builder.decorations(false).inner_size(800.0, 636.0).build());
+}
-- 
GitLab