diff options
author | Pranav Kant <pranavk@collabora.co.uk> | 2018-02-24 12:19:57 +0530 |
---|---|---|
committer | Pranav Kant <pranavk@collabora.co.uk> | 2018-02-27 19:43:52 +0530 |
commit | 3c3e07b51fb09d09cfef54193f93b07304f4ccda (patch) | |
tree | 55c4098e959779c3dea62efc428902156192aeb8 /sw/source/uibase/uno/unotxdoc.cxx | |
parent | 33acd925613117d98f8e2b1752fbd949860c792e (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 'sw/source/uibase/uno/unotxdoc.cxx')
-rw-r--r-- | sw/source/uibase/uno/unotxdoc.cxx | 34 |
1 files changed, 18 insertions, 16 deletions
diff --git a/sw/source/uibase/uno/unotxdoc.cxx b/sw/source/uibase/uno/unotxdoc.cxx index 39c9ad4a4ad7..ef3ed6b4d431 100644 --- a/sw/source/uibase/uno/unotxdoc.cxx +++ b/sw/source/uibase/uno/unotxdoc.cxx @@ -3489,19 +3489,22 @@ void SwXTextDocument::postKeyEvent(int nType, int nCharCode, int nKeyCode) if (!pWindow) return; - KeyEvent aEvent(nCharCode, nKeyCode, 0); + LOKAsyncEventData* pLOKEv = new LOKAsyncEventData; + pLOKEv->mpWindow = pWindow; switch (nType) { case LOK_KEYEVENT_KEYINPUT: - pWindow->KeyInput(aEvent); + pLOKEv->mnEvent = VclEventId::WindowKeyInput; break; case LOK_KEYEVENT_KEYUP: - pWindow->KeyUp(aEvent); + pLOKEv->mnEvent = VclEventId::WindowKeyUp; break; default: assert(false); - break; } + + pLOKEv->maKeyEvent = KeyEvent(nCharCode, nKeyCode, 0); + Application::PostUserEvent(Link<void*, void>(pLOKEv, ITiledRenderable::LOKPostAsyncEvent)); } void SwXTextDocument::postMouseEvent(int nType, int nX, int nY, int nCount, int nButtons, int nModifier) @@ -3529,30 +3532,29 @@ void SwXTextDocument::postMouseEvent(int nType, int nX, int nY, int nCount, int } SwEditWin& rEditWin = pDocShell->GetView()->GetEditWin(); - Point aPos(nX , nY); - MouseEvent aEvent(aPos, nCount, MouseEventModifiers::SIMPLECLICK, nButtons, nModifier); + + LOKAsyncEventData* pLOKEv = new LOKAsyncEventData; + pLOKEv->mpWindow = &rEditWin; switch (nType) { case LOK_MOUSEEVENT_MOUSEBUTTONDOWN: - rEditWin.LogicMouseButtonDown(aEvent); - - if (nButtons & MOUSE_RIGHT) - { - const CommandEvent aCEvt(aPos, CommandEventId::ContextMenu, true, nullptr); - rEditWin.Command(aCEvt); - } + pLOKEv->mnEvent = VclEventId::WindowMouseButtonDown; break; case LOK_MOUSEEVENT_MOUSEBUTTONUP: - rEditWin.LogicMouseButtonUp(aEvent); + pLOKEv->mnEvent = VclEventId::WindowMouseButtonUp; break; case LOK_MOUSEEVENT_MOUSEMOVE: - rEditWin.LogicMouseMove(aEvent); + pLOKEv->mnEvent = VclEventId::WindowMouseMove; break; default: assert(false); - break; } + + pLOKEv->maMouseEvent = MouseEvent(Point(nX, nY), nCount, + MouseEventModifiers::SIMPLECLICK, + nButtons, nModifier); + Application::PostUserEvent(Link<void*, void>(pLOKEv, ITiledRenderable::LOKPostAsyncEvent)); } void SwXTextDocument::setTextSelection(int nType, int nX, int nY) |