diff --git a/frontend/src/app/main/data/workspace/selection.cljs b/frontend/src/app/main/data/workspace/selection.cljs index 2c2763f75..6dc81868a 100644 --- a/frontend/src/app/main/data/workspace/selection.cljs +++ b/frontend/src/app/main/data/workspace/selection.cljs @@ -448,7 +448,7 @@ :use-for-thumbnail?) (cond-> - (or group? bool?) + (or frame? group? bool?) (assoc :shapes [])) (gsh/move delta) diff --git a/frontend/src/app/main/ui/components/dropdown.cljs b/frontend/src/app/main/ui/components/dropdown.cljs index 8be2f498d..f27662421 100644 --- a/frontend/src/app/main/ui/components/dropdown.cljs +++ b/frontend/src/app/main/ui/components/dropdown.cljs @@ -10,6 +10,7 @@ [app.util.dom :as dom] [app.util.globals :as globals] [app.util.keyboard :as kbd] + [app.util.timers :as tm] [goog.events :as events] [goog.object :as gobj] [rumext.v2 :as mf]) @@ -18,24 +19,26 @@ (mf/defc dropdown' {::mf/wrap-props false} [props] - (let [children (gobj/get props "children") - on-close (gobj/get props "on-close") - ref (gobj/get props "container") + (let [children (gobj/get props "children") + on-close (gobj/get props "on-close") + container-ref (gobj/get props "container") + listening-ref (mf/use-ref nil) on-click (fn [event] - (let [target (dom/get-target event) + (when (mf/ref-val listening-ref) + (let [target (dom/get-target event) - ;; MacOS ctrl+click sends two events: context-menu and click. - ;; In order to not have two handlings we ignore ctrl+click for this platform - mac-ctrl-click? (and (cfg/check-platform? :macos) (kbd/ctrl? event))] - (when (and (not mac-ctrl-click?) - (not (.-data-no-close ^js target))) - (if ref - (let [parent (mf/ref-val ref)] - (when-not (or (not parent) (.contains parent target)) - (on-close))) - (on-close))))) + ;; MacOS ctrl+click sends two events: context-menu and click. + ;; In order to not have two handlings we ignore ctrl+click for this platform + mac-ctrl-click? (and (cfg/check-platform? :macos) (kbd/ctrl? event))] + (when (and (not mac-ctrl-click?) + (not (.-data-no-close ^js target))) + (if container-ref + (let [parent (mf/ref-val container-ref)] + (when-not (or (not parent) (.contains parent target)) + (on-close))) + (on-close)))))) on-keyup (fn [event] @@ -47,8 +50,8 @@ (let [keys [(events/listen globals/document EventType.CLICK on-click) (events/listen globals/document EventType.CONTEXTMENU on-click) (events/listen globals/document EventType.KEYUP on-keyup)]] - #(doseq [key keys] - (events/unlistenByKey key))))] + (tm/schedule #(mf/set-ref-val! listening-ref true)) + #(run! events/unlistenByKey keys)))] (mf/use-effect on-mount) children)) diff --git a/frontend/src/app/main/ui/viewer/inspect/render.cljs b/frontend/src/app/main/ui/viewer/inspect/render.cljs index a3cf6cc4d..a2d944bfa 100644 --- a/frontend/src/app/main/ui/viewer/inspect/render.cljs +++ b/frontend/src/app/main/ui/viewer/inspect/render.cljs @@ -170,7 +170,9 @@ (mf/use-memo (mf/deps objects) #(svg-raw-container-factory objects))] (when (and shape (not (:hidden shape))) - (let [shape (gsh/translate-to-frame shape frame) + (let [shape (if frame + (gsh/translate-to-frame shape frame) + shape) opts #js {:shape shape :frame frame}] (case (:type shape) diff --git a/frontend/src/app/main/ui/workspace/viewport/actions.cljs b/frontend/src/app/main/ui/workspace/viewport/actions.cljs index 370285522..4535a030d 100644 --- a/frontend/src/app/main/ui/workspace/viewport/actions.cljs +++ b/frontend/src/app/main/ui/workspace/viewport/actions.cljs @@ -56,7 +56,8 @@ (.setPointerCapture target (.-pointerId bevent)))) (when (or (dom/class? (dom/get-target bevent) "viewport-controls") - (dom/child? (dom/get-target bevent) (dom/query ".viewport-controls"))) + (dom/class? (dom/get-target bevent) "viewport-selrect") + (dom/child? (dom/get-target bevent) (dom/query ".grid-layout-editor"))) (dom/stop-propagation bevent) @@ -161,7 +162,7 @@ (fn [event] (when (and (nil? selrect) (or (dom/class? (dom/get-target event) "viewport-controls") - (dom/child? (dom/get-target event) (dom/query ".viewport-controls")) + (dom/child? (dom/get-target event) (dom/query ".grid-layout-editor")) (dom/class? (dom/get-target event) "viewport-selrect"))) (let [ctrl? (kbd/ctrl? event) shift? (kbd/shift? event) @@ -236,7 +237,7 @@ (dom/prevent-default event) (when-not workspace-read-only? (when (or (dom/class? (dom/get-target event) "viewport-controls") - (dom/child? (dom/get-target event) (dom/query ".viewport-controls")) + (dom/child? (dom/get-target event) (dom/query ".grid-layout-editor")) (dom/class? (dom/get-target event) "viewport-selrect") workspace-read-only?) (let [position (dom/get-client-position event)]