From 99f2609495ef7935f3ceffc228701a22b0fbb5db Mon Sep 17 00:00:00 2001 From: Xavier Julian Date: Wed, 13 May 2026 11:05:31 +0200 Subject: [PATCH] :bug: Fix glitch when selecting tools and save last used tool in state --- .../main/ui/ds/tool_toolbar/tool_toolbar.cljs | 37 +++++++++++++------ .../main/ui/ds/tool_toolbar/tool_toolbar.scss | 2 +- 2 files changed, 26 insertions(+), 13 deletions(-) diff --git a/frontend/src/app/main/ui/ds/tool_toolbar/tool_toolbar.cljs b/frontend/src/app/main/ui/ds/tool_toolbar/tool_toolbar.cljs index 9d5e9b2581..31beef3339 100644 --- a/frontend/src/app/main/ui/ds/tool_toolbar/tool_toolbar.cljs +++ b/frontend/src/app/main/ui/ds/tool_toolbar/tool_toolbar.cljs @@ -108,16 +108,25 @@ (mf/defc grouped-tool-flyout* {::mf/wrap [mf/memo]} [{:keys [group drawtool on-select-tool]}] - (let [default-tool (active-group-tool group drawtool) - default-icon (:icon (get-in group [:tools default-tool])) - subtools (:tools group) - open* (mf/use-state false) - open (deref open*) + (let [default-tool* (mf/use-state (active-group-tool group drawtool)) + default-tool (deref default-tool*) + default-icon (:icon (get-in group [:tools default-tool])) + subtools (:tools group) + open* (mf/use-state false) + open (deref open*) open-timer* (mf/use-ref nil) close-timer* (mf/use-ref nil) menu-label (group-menu-label group drawtool) selected (boolean (is-selected-group group drawtool)) + select-tool (mf/use-fn + (fn [event] + (let [tool (-> (dom/get-current-target event) + (dom/get-data "tool") + (keyword))] + (reset! default-tool* tool) + (on-select-tool event)))) + on-display-menu (mf/use-fn (fn [] (cancel-timer! close-timer*) @@ -167,7 +176,7 @@ [:> tool-button* {:title (tool-label id) :selected (= drawtool id) :icon icon - :on-click on-select-tool + :on-click select-tool :data-tool (name id) :role "menuitemradio" :aria-checked (= drawtool id)}]])]]])) @@ -213,6 +222,9 @@ {::mf/wrap [mf/memo]} [{:keys [layout]}] (let [selected-drawing-tool (mf/deref refs/selected-drawing-tool) + active-drawing-tool* (mf/use-state nil) + active-drawing-tool (deref active-drawing-tool*) + current-drawing-tool (or active-drawing-tool selected-drawing-tool) selected-edition (mf/deref refs/selected-edition) plugins-enabled (features/active-feature? @st/state "plugins/runtime") rulers-enabled (mf/deref refs/rulers?) @@ -242,7 +254,8 @@ (let [tool (-> (dom/get-current-target event) (dom/get-data "tool") (keyword))] - (on-interrupt) + (reset! active-drawing-tool* tool) + (st/emit! :interrupt (dw/clear-edition-mode)) ;; Delay so anything that launched :interrupt can finish (ts/schedule 100 @@ -265,14 +278,14 @@ :data-testid "toolbar-options"} [:li {:class (stl/css :main-toolbar-option)} [:> tool-button* {:title (tr "workspace.toolbar.move" (sc/get-tooltip :move)) - :selected (and (nil? selected-drawing-tool) + :selected (and (nil? current-drawing-tool) (not selected-edition)) :icon i/move :on-click on-interrupt}]] [:li {:class (stl/css :main-toolbar-option)} [:> tool-button* {:title (tool-label :frame) - :selected (= selected-drawing-tool :frame) + :selected (= current-drawing-tool :frame) :icon i/board :on-click on-select-tool :data-tool "frame"}]] @@ -280,12 +293,12 @@ [:> grouped-tool-flyout* {:key :shapes :group (get grouped-tools :shapes) - :drawtool selected-drawing-tool + :drawtool current-drawing-tool :on-select-tool on-select-tool}] [:li {:class (stl/css :main-toolbar-option)} [:> tool-button* {:title (tool-label :text) - :selected (= selected-drawing-tool :text) + :selected (= current-drawing-tool :text) :icon i/text :on-click on-select-tool :data-tool "text"}]] @@ -294,7 +307,7 @@ [:> grouped-tool-flyout* {:key :free-draw :group (get grouped-tools :free-draw) - :drawtool selected-drawing-tool + :drawtool current-drawing-tool :on-select-tool on-select-tool}] (when plugins-enabled diff --git a/frontend/src/app/main/ui/ds/tool_toolbar/tool_toolbar.scss b/frontend/src/app/main/ui/ds/tool_toolbar/tool_toolbar.scss index 6a5c32d9d5..622f9064a1 100644 --- a/frontend/src/app/main/ui/ds/tool_toolbar/tool_toolbar.scss +++ b/frontend/src/app/main/ui/ds/tool_toolbar/tool_toolbar.scss @@ -39,7 +39,7 @@ } .main-toolbar-no-rulers { - --toolbar-position-y: 0; + --toolbar-position-y: 0px; --toolbar-offset-y: 8px; }