diff --git a/.editorconfig b/.editorconfig
index ef01478..a441ff3 100644
--- a/.editorconfig
+++ b/.editorconfig
@@ -3,6 +3,7 @@ root = true
[*]
insert_final_newline = true
trim_trailing_whitespace = true
+end_of_line = lf
[*.{js,ts,jsx,tsx,cjs}]
indent_style = tab
diff --git a/src-tauri/Cargo.lock b/src-tauri/Cargo.lock
index 688994d..678d1fd 100644
--- a/src-tauri/Cargo.lock
+++ b/src-tauri/Cargo.lock
@@ -119,6 +119,15 @@ version = "0.21.7"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "9d297deb1925b89f2ccc13d7635fa0714f12c87adce1c75356b39ca9b7178567"
+[[package]]
+name = "bincode"
+version = "1.3.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b1f45e9417d87227c7a56d22e471c6206462cba514c7590c09aff4cf6d1ddcad"
+dependencies = [
+ "serde",
+]
+
[[package]]
name = "bitflags"
version = "1.3.2"
@@ -309,8 +318,24 @@ dependencies = [
"block",
"cocoa-foundation",
"core-foundation",
- "core-graphics",
- "foreign-types",
+ "core-graphics 0.22.3",
+ "foreign-types 0.3.2",
+ "libc",
+ "objc",
+]
+
+[[package]]
+name = "cocoa"
+version = "0.25.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f6140449f97a6e97f9511815c5632d84c8aacf8ac271ad77c559218161a1373c"
+dependencies = [
+ "bitflags 1.3.2",
+ "block",
+ "cocoa-foundation",
+ "core-foundation",
+ "core-graphics 0.23.1",
+ "foreign-types 0.5.0",
"libc",
"objc",
]
@@ -376,7 +401,20 @@ dependencies = [
"bitflags 1.3.2",
"core-foundation",
"core-graphics-types",
- "foreign-types",
+ "foreign-types 0.3.2",
+ "libc",
+]
+
+[[package]]
+name = "core-graphics"
+version = "0.23.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "970a29baf4110c26fedbc7f82107d42c23f7e88e404c4577ed73fe99ff85a212"
+dependencies = [
+ "bitflags 1.3.2",
+ "core-foundation",
+ "core-graphics-types",
+ "foreign-types 0.5.0",
"libc",
]
@@ -710,7 +748,28 @@ version = "0.3.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "f6f339eb8adc052cd2ca78910fda869aefa38d22d5cb648e6485e4d3fc06f3b1"
dependencies = [
- "foreign-types-shared",
+ "foreign-types-shared 0.1.1",
+]
+
+[[package]]
+name = "foreign-types"
+version = "0.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d737d9aa519fb7b749cbc3b962edcf310a8dd1f4b67c91c4f83975dbdd17d965"
+dependencies = [
+ "foreign-types-macros",
+ "foreign-types-shared 0.3.1",
+]
+
+[[package]]
+name = "foreign-types-macros"
+version = "0.2.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1a5c6c585bc94aaf2c7b51dd4c2ba22680844aba4c687be581871a6f518c5742"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.48",
]
[[package]]
@@ -719,6 +778,12 @@ version = "0.1.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "00b0228411908ca8685dba7fc2cdd70ec9990a6e753e89b6ac91a84c40fbaf4b"
+[[package]]
+name = "foreign-types-shared"
+version = "0.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "aa9a19cbb55df58761df49b23516a86d432839add4af60fc256da840f66ed35b"
+
[[package]]
name = "form_urlencoded"
version = "1.2.1"
@@ -2532,9 +2597,9 @@ dependencies = [
"bitflags 1.3.2",
"cairo-rs",
"cc",
- "cocoa",
+ "cocoa 0.24.1",
"core-foundation",
- "core-graphics",
+ "core-graphics 0.22.3",
"crossbeam-channel",
"dispatch",
"gdk",
@@ -2605,7 +2670,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "fd27c04b9543776a972c86ccf70660b517ecabbeced9fb58d8b961a13ad129af"
dependencies = [
"anyhow",
- "cocoa",
+ "cocoa 0.24.1",
"dirs-next",
"embed_plist",
"encoding_rs",
@@ -2653,6 +2718,8 @@ dependencies = [
"serde_json",
"tauri",
"tauri-build",
+ "tauri-plugin-window-state",
+ "window-shadows",
]
[[package]]
@@ -2714,6 +2781,20 @@ dependencies = [
"tauri-utils",
]
+[[package]]
+name = "tauri-plugin-window-state"
+version = "0.1.0"
+source = "git+https://github.com/tauri-apps/plugins-workspace?branch=v1#c5e8cd31ec86ba7ddcd524f1377a5bf09229fb9e"
+dependencies = [
+ "bincode",
+ "bitflags 2.4.1",
+ "log",
+ "serde",
+ "serde_json",
+ "tauri",
+ "thiserror",
+]
+
[[package]]
name = "tauri-runtime"
version = "0.14.2"
@@ -2741,7 +2822,7 @@ version = "0.14.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "6cae61fbc731f690a4899681c9052dde6d05b159b44563ace8186fc1bfb7d158"
dependencies = [
- "cocoa",
+ "cocoa 0.24.1",
"gtk",
"percent-encoding",
"rand 0.8.5",
@@ -3345,6 +3426,18 @@ version = "0.4.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f"
+[[package]]
+name = "window-shadows"
+version = "0.2.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "67ff424735b1ac21293b0492b069394b0a189c8a463fb015a16dea7c2e221c08"
+dependencies = [
+ "cocoa 0.25.0",
+ "objc",
+ "raw-window-handle",
+ "windows-sys 0.48.0",
+]
+
[[package]]
name = "windows"
version = "0.39.0"
@@ -3664,8 +3757,8 @@ checksum = "6ad85d0e067359e409fcb88903c3eac817c392e5d638258abfb3da5ad8ba6fc4"
dependencies = [
"base64 0.13.1",
"block",
- "cocoa",
- "core-graphics",
+ "cocoa 0.24.1",
+ "core-graphics 0.22.3",
"crossbeam-channel",
"dunce",
"gdk",
diff --git a/src-tauri/Cargo.toml b/src-tauri/Cargo.toml
index 72143c0..3195e25 100644
--- a/src-tauri/Cargo.toml
+++ b/src-tauri/Cargo.toml
@@ -14,8 +14,10 @@ tauri-build = { version = "1.5", features = [] }
[dependencies]
tauri = { version = "1.5", features = [ "macos-private-api", "window-minimize", "window-maximize", "window-hide", "window-unminimize", "window-unmaximize", "window-start-dragging", "window-close", "window-show", "shell-open"] }
+tauri-plugin-window-state = { git = "https://github.com/tauri-apps/plugins-workspace", branch = "v1" }
serde = { version = "1.0", features = ["derive"] }
serde_json = "1.0"
+window-shadows = "0.2"
[features]
# this feature is used for production builds or when `devPath` points to the filesystem
diff --git a/src-tauri/src/main.rs b/src-tauri/src/main.rs
index 1508e77..1c6226c 100644
--- a/src-tauri/src/main.rs
+++ b/src-tauri/src/main.rs
@@ -2,10 +2,17 @@
#![cfg_attr(not(debug_assertions), windows_subsystem = "windows")]
use tauri::Manager;
+use window_shadows::set_shadow;
fn main() {
tauri::Builder::default()
.invoke_handler(tauri::generate_handler![close_splashscreen])
+ .setup(|app| {
+ let window = app.get_window("main").unwrap();
+
+ set_shadow(&window, true).expect("Unsupported platform!");
+ Ok(())
+ })
.run(tauri::generate_context!())
.expect("error while running tauri application");
}
@@ -13,6 +20,7 @@ fn main() {
#[tauri::command]
async fn close_splashscreen(window: tauri::Window) {
if let Some(splashscreen) = window.get_window("splashscreen") {
+ println!("Closing splashscreen");
splashscreen.close().unwrap();
}
window.get_window("main").unwrap().show().unwrap();
diff --git a/src-tauri/tauri.conf.json b/src-tauri/tauri.conf.json
index 99c0912..0fcedce 100644
--- a/src-tauri/tauri.conf.json
+++ b/src-tauri/tauri.conf.json
@@ -43,27 +43,6 @@
"security": {
"csp": null
},
- "windows": [
- {
- "fullscreen": false,
- "resizable": true,
- "title": "Vybr",
- "width": 800,
- "height": 600,
- "decorations": true,
- "hiddenTitle": true,
- "titleBarStyle": "Overlay",
- "visible": false,
- "userAgent": "Vybr-App"
- },
- {
- "width": 300,
- "height": 400,
- "decorations": false,
- "url": "splashscreen.html",
- "label": "splashscreen"
- }
- ],
"macOSPrivateApi": true
}
}
diff --git a/src-tauri/tauri.macos.conf.json b/src-tauri/tauri.macos.conf.json
new file mode 100644
index 0000000..fbf5b58
--- /dev/null
+++ b/src-tauri/tauri.macos.conf.json
@@ -0,0 +1,24 @@
+{
+ "tauri": {
+ "windows": [
+ {
+ "fullscreen": false,
+ "resizable": true,
+ "title": "Vybr (MacOS)",
+ "width": 800,
+ "height": 600,
+ "decorations": true,
+ "hiddenTitle": true,
+ "titleBarStyle": "Overlay",
+ "visible": false
+ },
+ {
+ "width": 300,
+ "height": 400,
+ "decorations": false,
+ "url": "splashscreen.html",
+ "label": "splashscreen"
+ }
+ ]
+ }
+}
diff --git a/src-tauri/tauri.windows.conf.json b/src-tauri/tauri.windows.conf.json
new file mode 100644
index 0000000..8715b5e
--- /dev/null
+++ b/src-tauri/tauri.windows.conf.json
@@ -0,0 +1,22 @@
+{
+ "tauri": {
+ "windows": [
+ {
+ "fullscreen": false,
+ "resizable": true,
+ "title": "Vybr (Windows)",
+ "width": 800,
+ "height": 600,
+ "decorations": false,
+ "visible": false
+ },
+ {
+ "width": 300,
+ "height": 400,
+ "decorations": false,
+ "url": "splashscreen.html",
+ "label": "splashscreen"
+ }
+ ]
+ }
+}
diff --git a/src/App.tsx b/src/App.tsx
index d905ca3..89606c4 100644
--- a/src/App.tsx
+++ b/src/App.tsx
@@ -1,8 +1,10 @@
+import { isWindows } from "@tauri-apps/api/helpers/os-check";
import Sidebar from "./components/sidebar";
import { cn } from "./lib/utils";
import { dragging } from "./store";
+import TitleBar from "./components/title-bar";
export default function App() {
return (
@@ -11,6 +13,8 @@ export default function App() {
"cursor-col-resize": dragging.value.isDragging,
})}
>
+ {isWindows() &&