            goog.ui.KeyboardShortcutHandler))
 
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-;; Keyboard Shortcuts Watcher
+;; Keyboard Shortcuts Handlers
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 
 (defonce ^:static +shortcuts+
-  #{:ctrl+g
-    :ctrl+shift+f
-    :ctrl+shift+i
-    :ctrl+shift+l})
+  {:ctrl+g #(rs/emit! (dw/toggle-tool :grid))
+   :ctrl+shift+f #(rs/emit! (dw/toggle-toolbox :draw))
+   :ctrl+shift+i #(rs/emit! (dw/toggle-toolbox :icons))
+   :ctrl+shift+l #(rs/emit! (dw/toggle-toolbox :layers))
+   :esc (constantly nil)
+   :backspace (constantly nil)})
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;; Keyboard Shortcuts Watcher
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 
 (defonce ^:static ^:private +bus+
   (rx/bus))

        (events/unlistenByKey key)
        (.clearKeyListener handler)))))

;; DEBUG
(rx/on-value +stream+ #(println "[debug]: shortcut:" %))

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; Keyboard Shortcuts Handlers
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

(defmulti -handle-event identity)

(defmethod -handle-event :default [ev] nil)

(defmethod -handle-event :ctrl+shift+l
  [_]
  (rs/emit! (dw/toggle-toolbox :layers)))

(defmethod -handle-event :ctrl+shift+i
  [_]
  (rs/emit! (dw/toggle-toolbox :icons)))

(defmethod -handle-event :ctrl+shift+f
  [_]
  (rs/emit! (dw/toggle-toolbox :draw)))

(defmethod -handle-event :ctrl+g
  [_]
  (rs/emit! (dw/toggle-tool :grid)))

(rx/on-value +stream+ #(-handle-event %))

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; Keyboard Shortcuts Mixin

(ns uxbox.ui.workspace.shortcuts
  (:require-macros [uxbox.util.syntax :refer [define-once]])
  (:require [goog.events :as events]
            [beicon.core :as rx]
            [uxbox.rstore :as rs]
