From 872c185eb7a76e574fdbbbb9065d0a6fb6a4bc5f Mon Sep 17 00:00:00 2001 From: Junyi Du Date: Fri, 8 Jul 2022 00:31:54 +0800 Subject: [PATCH] fix: quick capture across desktops --- src/electron/electron/core.cljs | 2 ++ src/electron/electron/url.cljs | 22 ++++++++++++---------- src/electron/electron/utils.cljs | 12 ++++++++++-- 3 files changed, 24 insertions(+), 12 deletions(-) diff --git a/src/electron/electron/core.cljs b/src/electron/electron/core.cljs index 0cd234f201..c65406b2e2 100644 --- a/src/electron/electron/core.cljs +++ b/src/electron/electron/core.cljs @@ -43,6 +43,8 @@ :win win}))) (defn open-url-handler + "win - the main window instance (first renderer process) + url - the input URL" [win url] (.info logger "open-url" (str {:url url})) diff --git a/src/electron/electron/url.cljs b/src/electron/electron/url.cljs index 10bfe62b15..acbfe692ab 100644 --- a/src/electron/electron/url.cljs +++ b/src/electron/electron/url.cljs @@ -2,7 +2,7 @@ (:require [electron.handler :as handler] [electron.state :as state] [electron.window :as win] - [electron.utils :refer [send-to-renderer] :as utils] + [electron.utils :refer [send-to-renderer send-to-focused-renderer] :as utils] [clojure.string :as string] [promesa.core :as p])) @@ -58,22 +58,24 @@ (graph-identifier-error-handler graph-identifier)))) (defn- x-callback-url-handler - [^js parsed-url] + "win - a window used for fallback (main window is prefered)" + [^js win parsed-url] (let [action (.-pathname parsed-url)] (cond (= action "/quickCapture") (let [[url title content] (get-URL-decoded-params parsed-url ["url" "title" "content"])] - (send-to-renderer "quickCapture" {:url url - :title title - :content content})) + (send-to-focused-renderer "quickCapture" {:url url + :title title + :content content} win)) :else - (send-to-renderer "notification" {:type "error" - :payload (str "Unimplemented x-callback-url action: `" - action - "`.")})))) + (send-to-focused-renderer "notification" {:type "error" + :payload (str "Unimplemented x-callback-url action: `" + action + "`.")} win)))) (defn logseq-url-handler + "win - the main window" [^js win parsed-url] (let [url-host (.-host parsed-url)] ;; return "" when no pathname provided (cond @@ -81,7 +83,7 @@ (send-to-renderer win "loginCallback" (.get (.-searchParams parsed-url) "code")) (= "x-callback-url" url-host) - (x-callback-url-handler parsed-url) + (x-callback-url-handler win parsed-url) ;; identifier of graph in local (= "graph" url-host) diff --git a/src/electron/electron/utils.cljs b/src/electron/electron/utils.cljs index cba23c3eae..babf6be5c2 100644 --- a/src/electron/electron/utils.cljs +++ b/src/electron/electron/utils.cljs @@ -6,7 +6,7 @@ [cljs-bean.core :as bean] ["electron" :refer [app BrowserWindow]])) -(defonce *win (atom nil)) +(defonce *win (atom nil)) ;; The main window (defonce mac? (= (.-platform js/process) "darwin")) (defonce win32? (= (.-platform js/process) "win32")) (defonce linux? (= (.-platform js/process) "linux")) @@ -112,7 +112,8 @@ (defn send-to-renderer "Notice: pass the `window` parameter if you can. Otherwise, the message - will not be received if there's no focused window." + will not be received if there's no focused window. + Use `send-to-focused-renderer` instead if you want to set a window for fallback" ([kind payload] (send-to-renderer (get-focused-window) kind payload)) ([window kind payload] @@ -120,6 +121,13 @@ (.. ^js window -webContents (send (name kind) (bean/->js payload)))))) +(defn send-to-focused-renderer + "Try to send to focused window. If no focused window, fallback to the `fallback-win`" + ([kind payload fallback-win] + (let [focused-win (get-focused-window) + win (if focused-win focused-win fallback-win)] + (send-to-renderer win kind payload)))) + (defn get-graph-dir "required by all internal state in the electron section" [graph-name]