summaryrefslogtreecommitdiff
path: root/include/vcl/ITiledRenderable.hxx
diff options
context:
space:
mode:
authorPranav Kant <pranavk@collabora.co.uk>2018-02-24 12:19:57 +0530
committerPranav Kant <pranavk@collabora.co.uk>2018-02-27 19:43:52 +0530
commit3c3e07b51fb09d09cfef54193f93b07304f4ccda (patch)
tree55c4098e959779c3dea62efc428902156192aeb8 /include/vcl/ITiledRenderable.hxx
parent33acd925613117d98f8e2b1752fbd949860c792e (diff)
lok: All mouse,key events async
custom posting of mouse,key events on main thread This still bypasses vcl while keeping the processing of events on the main thread which is what we want. Change-Id: Ia7a6f5ef1ac546245715abe418d261b49df12d4c Reviewed-on: https://gerrit.libreoffice.org/50274 Reviewed-by: Aron Budea <aron.budea@collabora.com> Tested-by: Aron Budea <aron.budea@collabora.com>
Diffstat (limited to 'include/vcl/ITiledRenderable.hxx')
-rw-r--r--include/vcl/ITiledRenderable.hxx44
1 files changed, 44 insertions, 0 deletions
diff --git a/include/vcl/ITiledRenderable.hxx b/include/vcl/ITiledRenderable.hxx
index ab7b4f027a45..9b0e7dbe8e3a 100644
--- a/include/vcl/ITiledRenderable.hxx
+++ b/include/vcl/ITiledRenderable.hxx
@@ -14,6 +14,8 @@
#include <LibreOfficeKit/LibreOfficeKitTypes.h>
#include <tools/gen.hxx>
#include <svx/ruler.hxx>
+#include <vcl/event.hxx>
+#include <vcl/vclevent.hxx>
#include <vcl/pointr.hxx>
#include <vcl/ptrstyle.hxx>
#include <vcl/virdev.hxx>
@@ -88,6 +90,48 @@ protected:
int mnTilePixelWidth, mnTilePixelHeight;
int mnTileTwipWidth, mnTileTwipHeight;
public:
+ struct LOKAsyncEventData
+ {
+ VclPtr<vcl::Window> mpWindow;
+ VclEventId mnEvent;
+ MouseEvent maMouseEvent;
+ KeyEvent maKeyEvent;
+ };
+
+ static void LOKPostAsyncEvent(void* pEv, void*)
+ {
+ LOKAsyncEventData* pLOKEv = static_cast<LOKAsyncEventData*>(pEv);
+ switch (pLOKEv->mnEvent)
+ {
+ case VclEventId::WindowKeyInput:
+ pLOKEv->mpWindow->KeyInput(pLOKEv->maKeyEvent);
+ break;
+ case VclEventId::WindowKeyUp:
+ pLOKEv->mpWindow->KeyUp(pLOKEv->maKeyEvent);
+ break;
+ case VclEventId::WindowMouseButtonDown:
+ pLOKEv->mpWindow->LogicMouseButtonDown(pLOKEv->maMouseEvent);
+ // Invoke the context menu
+ if (pLOKEv->maMouseEvent.GetButtons() & MOUSE_RIGHT)
+ {
+ const CommandEvent aCEvt(pLOKEv->maMouseEvent.GetPosPixel(), CommandEventId::ContextMenu, true, nullptr);
+ pLOKEv->mpWindow->Command(aCEvt);
+ }
+ break;
+ case VclEventId::WindowMouseButtonUp:
+ pLOKEv->mpWindow->LogicMouseButtonUp(pLOKEv->maMouseEvent);
+ break;
+ case VclEventId::WindowMouseMove:
+ pLOKEv->mpWindow->LogicMouseMove(pLOKEv->maMouseEvent);
+ break;
+ default:
+ assert(false);
+ break;
+ }
+
+ delete pLOKEv;
+ }
+
virtual ~ITiledRenderable();
/**