Move ui listener macros to ui.clj