diff --git a/src/app/ui/document_view.cpp b/src/app/ui/document_view.cpp index 2d72bf2b7..03998ed5e 100644 --- a/src/app/ui/document_view.cpp +++ b/src/app/ui/document_view.cpp @@ -38,6 +38,7 @@ #include "raster/sprite.h" #include "ui/accelerator.h" #include "ui/message.h" +#include "ui/system.h" #include "ui/view.h" namespace app { @@ -109,6 +110,32 @@ public: return isKeyActionPressed(KeyAction::SubtractSelection); } +protected: + bool onProcessMessage(Message* msg) override { + switch (msg->type()) { + + case kKeyDownMessage: + case kKeyUpMessage: + if (static_cast(msg)->repeat() == 0) { + Key* lmb = KeyboardShortcuts::instance()->action(KeyAction::LeftMouseButton); + Key* rmb = KeyboardShortcuts::instance()->action(KeyAction::RightMouseButton); + + // Convert action keys into mouse messages. + if (lmb->isPressed(msg) || rmb->isPressed(msg)) { + MouseMessage mouseMsg( + (msg->type() == kKeyDownMessage ? kMouseDownMessage: kMouseUpMessage), + (lmb->isPressed(msg) ? kButtonLeft: kButtonRight), + gfx::Point(jmouse_x(0), jmouse_y(0))); + + sendMessage(&mouseMsg); + return true; + } + } + break; + } + return Editor::onProcessMessage(msg); + } + private: bool isKeyActionPressed(KeyAction action) { if (Key* key = KeyboardShortcuts::instance()->action(action)) diff --git a/src/app/ui/keyboard_shortcuts.cpp b/src/app/ui/keyboard_shortcuts.cpp index 723365cc2..cb597a580 100644 --- a/src/app/ui/keyboard_shortcuts.cpp +++ b/src/app/ui/keyboard_shortcuts.cpp @@ -57,6 +57,8 @@ namespace { { "LockAxis" , "Lock Axis" , app::KeyAction::LockAxis }, { "AddSelection" , "Add Selection" , app::KeyAction::AddSelection }, { "SubtractSelection" , "Subtract Selection" , app::KeyAction::SubtractSelection }, + { "LeftMouseButton" , "Trigger Left Mouse Button" , app::KeyAction::LeftMouseButton }, + { "RightMouseButton" , "Trigger Right Mouse Button" , app::KeyAction::RightMouseButton }, { NULL , NULL , app::KeyAction::None } }; diff --git a/src/app/ui/keyboard_shortcuts.h b/src/app/ui/keyboard_shortcuts.h index 3859def3b..4c7098689 100644 --- a/src/app/ui/keyboard_shortcuts.h +++ b/src/app/ui/keyboard_shortcuts.h @@ -67,6 +67,8 @@ namespace app { LockAxis, AddSelection, SubtractSelection, + LeftMouseButton, + RightMouseButton }; class Key {