Kaynağa Gözat

feat(electron): refine app menu

Andelf 3 yıl önce
ebeveyn
işleme
c297748bd8
1 değiştirilmiş dosya ile 32 ekleme ve 2 silme
  1. 32 2
      src/electron/electron/core.cljs

+ 32 - 2
src/electron/electron/core.cljs

@@ -1,7 +1,7 @@
 (ns electron.core
   (:require [electron.handler :as handler]
             [electron.search :as search]
-            [electron.updater :refer [init-updater]]
+            [electron.updater :refer [init-updater] :as updater]
             [electron.utils :refer [*win mac? linux? dev? logger get-win-from-sender restore-user-fetch-agent]]
             [electron.url :refer [logseq-url-handler]]
             [clojure.string :as string]
@@ -11,7 +11,7 @@
             ["fs-extra" :as fs]
             ["path" :as path]
             ["os" :as os]
-            ["electron" :refer [BrowserWindow app protocol ipcMain dialog] :as electron]
+            ["electron" :refer [BrowserWindow Menu app protocol ipcMain dialog shell] :as electron]
             ["electron-deeplink" :refer [Deeplink]]
             [clojure.core.async :as async]
             [electron.state :as state]
@@ -180,6 +180,35 @@
          (.removeHandler ipcMain call-app-channel)
          (.removeHandler ipcMain call-win-channel))))
 
+(defn- set-app-menu! []
+  (let [about-fn (fn []
+                   (.showMessageBox dialog (clj->js {:title "Logseq"
+                                                     :icon (path/join js/__dirname "icons/logseq.png")
+                                                     :message (str "Version " updater/electron-version)})))
+        template  (clj->js [{:role "fileMenu"
+                             :submenu [{:label "New Window"
+                                        :click (fn []
+                                                 (handler/open-new-window!))
+                                        :accelerator "CommandOrControl+N"
+                                        :acceleratorWorksWhenHidden false}
+                                       {:type "separator"}
+                                       {:role "close"
+                                        :label "Close Window"}
+                                       {:label "Quit Logseq"
+                                        :role "quit"}]}
+                            {:role "editMenu"}
+                            {:role "viewMenu"}
+                            {:role "windowMenu"}
+                            {:role "help"
+                             :submenu [{:label "Official Documentation"
+                                        :click (fn []
+                                                 (.openExternal shell "https://docs.logseq.com/"))}
+                                       {:role "about"
+                                        :label "About Logseq"
+                                        :click about-fn}]}])
+        menu (.buildFromTemplate Menu template)]
+    (.setApplicationMenu Menu menu)))
+
 (defn- setup-deeplink! []
   ;; Works for Deeplink v1.0.9
   ;; :mainWindow is only used for handeling window restoring on second-instance,
@@ -210,6 +239,7 @@
                              {:scheme     FILE_LSP_SCHEME
                               :privileges privileges}]))
 
+      (set-app-menu!)
       (setup-deeplink!)
 
       (.on app "second-instance"