   (-> state
     (assoc-in [:pan :position] {:x x :y y})))
 
-(defn mouse-depressed-intents [state button ctrl? shift? outside-canvas?]
+(defn mouse-depressed-intents [state button ctrl? shift? meta? outside-canvas?]
   (let [tool (get-in state state/current-tool-path)
         drawing-text? (and (keyword-identical? :text tool)
                            (get-in state [:drawing :in-progress?]))]

       (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]

              new-state intents))))

(defmethod post-control-event! :mouse-depressed
  [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? meta? outside-canvas?)]
      (doseq [intent intents]
        (case intent
          :finish-text-layer (handle-text-layer-finished-after previous-state current-state)
