|
|
@@ -17,7 +17,6 @@
|
|
|
["os" :as os]
|
|
|
["electron" :refer [BrowserWindow Menu app protocol ipcMain dialog shell] :as electron]
|
|
|
["electron-deeplink" :refer [Deeplink]]
|
|
|
- [clojure.core.async :as async]
|
|
|
[electron.state :as state]
|
|
|
[electron.git :as git]
|
|
|
[electron.window :as win]
|
|
|
@@ -209,7 +208,7 @@
|
|
|
:label "About Logseq"
|
|
|
:click about-fn}]}))
|
|
|
;; Enable Cmd/Ctrl+= Zoom In
|
|
|
- template (conj template
|
|
|
+ template (conj template
|
|
|
{:role "zoomin"
|
|
|
:accelerator "CommandOrControl+="})
|
|
|
menu (.buildFromTemplate Menu (clj->js template))]
|
|
|
@@ -266,33 +265,28 @@
|
|
|
(@*setup-fn)
|
|
|
|
|
|
;; main window events
|
|
|
- ;; TODO merge with window/on-close-actions!
|
|
|
- ;; TODO elimilate the difference between main and non-main windows
|
|
|
(.on win "close" (fn [e]
|
|
|
- (when @*quit-dirty? ;; when not updating
|
|
|
- (.preventDefault e)
|
|
|
- (let [web-contents (. win -webContents)]
|
|
|
- (.send web-contents "persist-zoom-level" (.getZoomLevel web-contents))
|
|
|
- (.send web-contents "persistent-dbs"))
|
|
|
- (async/go
|
|
|
- (let [_ (async/<! state/persistent-dbs-chan)]
|
|
|
- (if (or @win/*quitting? (not mac?))
|
|
|
- ;; MacOS: only cmd+q quitting will trigger actual closing
|
|
|
- ;; otherwise, it's just hiding - don't do any actual closing in that case
|
|
|
- ;; except saving transit
|
|
|
- (when-let [win @*win]
|
|
|
- (when-let [dir (state/get-window-graph-path win)]
|
|
|
- (handler/close-watcher-when-orphaned! win dir))
|
|
|
- (state/close-window! win)
|
|
|
- (win/destroy-window! win)
|
|
|
- ;; FIXME: what happens when closing main window on Windows?
|
|
|
- (reset! *win nil))
|
|
|
- ;; Just hiding - don't do any actual closing operation
|
|
|
- (do (.preventDefault ^js/Event e)
|
|
|
- (if (and mac? (.isFullScreen win))
|
|
|
- (do (.once win "leave-full-screen" #(.hide win))
|
|
|
- (.setFullScreen win false))
|
|
|
- (.hide win)))))))))
|
|
|
+ (when @*quit-dirty? ;; when not updating
|
|
|
+ (.preventDefault e)
|
|
|
+
|
|
|
+ (let [windows (win/get-all-windows)
|
|
|
+ window @*win
|
|
|
+ multiple-windows? (> (count windows) 1)]
|
|
|
+ (cond
|
|
|
+ (or multiple-windows? (not mac?) @win/*quitting?)
|
|
|
+ (when window
|
|
|
+ (win/close-handler win handler/close-watcher-when-orphaned! e)
|
|
|
+ (reset! *win nil))
|
|
|
+
|
|
|
+ (and mac? (not multiple-windows?))
|
|
|
+ ;; Just hiding - don't do any actual closing operation
|
|
|
+ (do (.preventDefault ^js/Event e)
|
|
|
+ (if (and mac? (.isFullScreen win))
|
|
|
+ (do (.once win "leave-full-screen" #(.hide win))
|
|
|
+ (.setFullScreen win false))
|
|
|
+ (.hide win)))
|
|
|
+ :else
|
|
|
+ nil)))))
|
|
|
(.on app "before-quit" (fn [_e]
|
|
|
(reset! win/*quitting? true)))
|
|
|
|
|
|
@@ -309,15 +303,15 @@
|
|
|
:bypassCSP true
|
|
|
:supportFetchAPI true}]
|
|
|
(.registerSchemesAsPrivileged
|
|
|
- protocol (bean/->js [{:scheme LSP_SCHEME
|
|
|
- :privileges privileges}
|
|
|
- {:scheme FILE_LSP_SCHEME
|
|
|
- :privileges privileges}
|
|
|
- {:scheme FILE_ASSETS_SCHEME
|
|
|
- :privileges {:standard false
|
|
|
- :secure false
|
|
|
- :bypassCSP false
|
|
|
- :supportFetchAPI false}}]))
|
|
|
+ protocol (bean/->js [{:scheme LSP_SCHEME
|
|
|
+ :privileges privileges}
|
|
|
+ {:scheme FILE_LSP_SCHEME
|
|
|
+ :privileges privileges}
|
|
|
+ {:scheme FILE_ASSETS_SCHEME
|
|
|
+ :privileges {:standard false
|
|
|
+ :secure false
|
|
|
+ :bypassCSP false
|
|
|
+ :supportFetchAPI false}}]))
|
|
|
|
|
|
(set-app-menu!)
|
|
|
(setup-deeplink!)
|