               new-state intents))))
 
 (defmethod post-control-event! :mouse-depressed
-  [browser-state message [x y {:keys [button ctrl? shift? outside-canvas?]}] previous-state current-state]
+  [browser-state message [x y {:keys [button ctrl? shift? meta? outside-canvas?]}] previous-state current-state]
   (when-not (empty? (:frontend-id-state previous-state))
     ;; use previous state so that we're consistent with the control-event
-    (let [intents (mouse-depressed-intents previous-state button ctrl? shift? outside-canvas?)]
+    (let [intents (mouse-depressed-intents previous-state button ctrl? shift? meta? outside-canvas?)]
       (doseq [intent intents]
         (case intent
           :finish-text-layer (handle-text-layer-finished-after previous-state current-state)

       (keyboard/pan-shortcut-active? state) [:pan]
       (= button 2) [:open-radial]
       (and (= button 0) ctrl? (not shift?)) [:open-radial]
       (get-in state [:layer-properties-menu :opened?]) [:submit-layer-properties]
       (contains? #{:pen :rect :circle :line :select} tool) [:start-drawing]
       (and (keyword-identical? tool :text) (not drawing-text?)) [:start-drawing]

(declare handle-text-layer-finished-after)

(defmethod control-event :mouse-depressed
  [browser-state message [x y {:keys [button type ctrl? shift? meta? outside-canvas?]}] state]
  (if (empty? (:frontend-id-state state))
    state
    (let [intents (mouse-depressed-intents state button ctrl? shift? meta? outside-canvas?)
          new-state (-> state
                      (update-mouse x y)
                      (assoc-in [:mouse-down] true)
