diff --git a/frontend/src/app/main/data/workspace/comments.cljs b/frontend/src/app/main/data/workspace/comments.cljs index 246034878..4718b252c 100644 --- a/frontend/src/app/main/data/workspace/comments.cljs +++ b/frontend/src/app/main/data/workspace/comments.cljs @@ -60,8 +60,7 @@ (let [local (:comments-local state)] (cond (:draft local) (rx/of (dcm/close-thread)) - (:open local) (rx/of (dcm/close-thread)) - :else (rx/of #(dissoc % :workspace-drawing))))))) + (:open local) (rx/of (dcm/close-thread))))))) ;; Event responsible of the what should be executed when user clicked ;; on the comments layer. An option can be create a new draft thread, diff --git a/frontend/src/app/main/data/workspace/drawing.cljs b/frontend/src/app/main/data/workspace/drawing.cljs index c4c3a148d..1b1d96bee 100644 --- a/frontend/src/app/main/data/workspace/drawing.cljs +++ b/frontend/src/app/main/data/workspace/drawing.cljs @@ -28,6 +28,10 @@ ptk/UpdateEvent (update [_ state] (-> state + (update :workspace-layout (fn [workspace-layout] + (if (= tool :comments) + (disj workspace-layout :document-history) + workspace-layout))) (update :workspace-drawing assoc :tool tool) ;; When changing drawing tool disable "scale text" mode ;; automatically, to help users that ignore how this diff --git a/frontend/src/app/main/ui/workspace/comments.cljs b/frontend/src/app/main/ui/workspace/comments.cljs index 4ff0e1842..17be9321c 100644 --- a/frontend/src/app/main/ui/workspace/comments.cljs +++ b/frontend/src/app/main/ui/workspace/comments.cljs @@ -92,7 +92,8 @@ (fn [] (if from-viewer (st/emit! (dcm/update-options {:show-sidebar? false})) - (st/emit! :interrupt (dw/deselect-all true))))) + (st/emit! (dw/clear-edition-mode) + (dw/deselect-all true))))) tgroups (->> threads (dcm/group-threads-by-page)) diff --git a/frontend/src/app/main/ui/workspace/right_header.cljs b/frontend/src/app/main/ui/workspace/right_header.cljs index f2e1b53f0..d3b6a6026 100644 --- a/frontend/src/app/main/ui/workspace/right_header.cljs +++ b/frontend/src/app/main/ui/workspace/right_header.cljs @@ -10,6 +10,7 @@ [app.main.data.events :as ev] [app.main.data.shortcuts :as scd] [app.main.data.workspace :as dw] + [app.main.data.workspace.drawing.common :as dwc] [app.main.data.workspace.shortcuts :as sc] [app.main.refs :as refs] [app.main.store :as st] @@ -21,7 +22,6 @@ [app.main.ui.workspace.presence :refer [active-sessions]] [app.util.dom :as dom] [app.util.i18n :as i18n :refer [tr]] - [app.util.timers :as ts] [okulary.core :as l] [rumext.v2 :as mf])) @@ -141,7 +141,7 @@ (mf/defc right-header {::mf/wrap-props false} [{:keys [file layout page-id]}] - (let [file-id (:id file) + (let [file-id (:id file) zoom (mf/deref refs/selected-zoom) read-only? (mf/use-ctx ctx/workspace-read-only?) @@ -169,33 +169,29 @@ active-comments (mf/use-fn + (mf/deps layout) (fn [] (st/emit! :interrupt - (dw/clear-edition-mode)) - ;; Delay so anything that launched :interrupt can finish - (ts/schedule 100 #(st/emit! (dw/select-for-drawing :comments))))) + (dw/clear-edition-mode) + (-> (dw/remove-layout-flag :document-history) + (vary-meta assoc ::ev/origin "workspace-header")) + (dw/select-for-drawing :comments)))) toggle-comments (mf/use-fn (mf/deps selected-drawtool) (fn [_] - (when (contains? layout :document-history) - (st/emit! (-> (dw/remove-layout-flag :document-history) - (vary-meta assoc ::ev/origin "workspace-header")))) - - (if (= :comments selected-drawtool) - (st/emit! :interrupt) + (if (= selected-drawtool :comments) + (st/emit! (dwc/clear-drawing)) (active-comments)))) toggle-history (mf/use-fn (mf/deps selected-drawtool) (fn [] - (when (= :comments selected-drawtool) (st/emit! :interrupt - (-> (dw/toggle-layout-flag :comments) - (vary-meta assoc ::ev/origin "workspace-header")))) + (dw/clear-edition-mode))) (st/emit! (-> (dw/toggle-layout-flag :document-history) (vary-meta assoc ::ev/origin "workspace-header")))))] diff --git a/frontend/src/app/main/ui/workspace/viewport.cljs b/frontend/src/app/main/ui/workspace/viewport.cljs index 8539def89..d20d35e3c 100644 --- a/frontend/src/app/main/ui/workspace/viewport.cljs +++ b/frontend/src/app/main/ui/workspace/viewport.cljs @@ -266,7 +266,7 @@ rule-area-size (/ rulers/ruler-area-size zoom)] - (hooks/setup-dom-events zoom disable-paste in-viewport? workspace-read-only?) + (hooks/setup-dom-events zoom disable-paste in-viewport? workspace-read-only? drawing-tool drawing-path?) (hooks/setup-viewport-size vport viewport-ref) (hooks/setup-cursor cursor alt? mod? space? panning drawing-tool drawing-path? node-editing? z? workspace-read-only?) (hooks/setup-keyboard alt? mod? space? z? shift?) diff --git a/frontend/src/app/main/ui/workspace/viewport/hooks.cljs b/frontend/src/app/main/ui/workspace/viewport/hooks.cljs index c2d4ab55b..d9f1dd1b5 100644 --- a/frontend/src/app/main/ui/workspace/viewport/hooks.cljs +++ b/frontend/src/app/main/ui/workspace/viewport/hooks.cljs @@ -17,6 +17,7 @@ [app.common.uuid :as uuid] [app.main.data.shortcuts :as dsc] [app.main.data.workspace :as dw] + [app.main.data.workspace.edition :as dwe] [app.main.data.workspace.grid-layout.shortcuts :as gsc] [app.main.data.workspace.path.shortcuts :as psc] [app.main.data.workspace.shortcuts :as wsc] @@ -39,13 +40,26 @@ [rumext.v2 :as mf]) (:import goog.events.EventType)) -(defn setup-dom-events [zoom disable-paste in-viewport? workspace-read-only?] +(defn setup-dom-events [zoom disable-paste in-viewport? workspace-read-only? drawing-tool drawing-path?] (let [on-key-down (actions/on-key-down) on-key-up (actions/on-key-up) on-mouse-wheel (actions/on-mouse-wheel zoom) on-paste (actions/on-paste disable-paste in-viewport? workspace-read-only?) + on-pointer-down (mf/use-fn + (mf/deps drawing-tool drawing-path?) + (fn [_] + (when drawing-path? + (st/emit! (dwe/clear-edition-mode))))) on-blur (mf/use-fn #(st/emit! (mse/->BlurEvent)))] + (mf/use-effect + (mf/deps drawing-tool drawing-path?) + (fn [] + (let [keys [(events/listen js/window EventType.POINTERDOWN on-pointer-down)]] + (fn [] + (doseq [key keys] + (events/unlistenByKey key)))))) + (mf/use-layout-effect (mf/deps on-key-down on-key-up on-mouse-wheel on-paste workspace-read-only?) (fn []