diff options
-rw-r--r-- | include/vcl/dialog.hxx | 1 | ||||
-rw-r--r-- | vcl/headless/svpinst.cxx | 2 | ||||
-rw-r--r-- | vcl/source/control/edit.cxx | 14 | ||||
-rw-r--r-- | vcl/source/window/dialog.cxx | 10 |
4 files changed, 26 insertions, 1 deletions
diff --git a/include/vcl/dialog.hxx b/include/vcl/dialog.hxx index 92d9138e3e8f..48ae4fec43fd 100644 --- a/include/vcl/dialog.hxx +++ b/include/vcl/dialog.hxx @@ -97,6 +97,7 @@ public: void LOKKeyInput(const KeyEvent& rKeyEvent); void LOKKeyUp(const KeyEvent& rKeyEvent); + void LOKCursorInvalidate(const tools::Rectangle& rRect); protected: explicit Dialog( WindowType nType ); diff --git a/vcl/headless/svpinst.cxx b/vcl/headless/svpinst.cxx index e20592b51b67..9912186c729c 100644 --- a/vcl/headless/svpinst.cxx +++ b/vcl/headless/svpinst.cxx @@ -266,7 +266,7 @@ bool SvpSalInstance::DoYield(bool bWait, bool bHandleAllCurrentEvents) { // first, process current user events bool bEvent = DispatchUserEvents( bHandleAllCurrentEvents ); - if ( !bHandleAllCurrentEvents &&bEvent ) + if ( !bHandleAllCurrentEvents && bEvent ) return true; bEvent = CheckTimeout() || bEvent; diff --git a/vcl/source/control/edit.cxx b/vcl/source/control/edit.cxx index 8edf98b274e1..cf8a153ee256 100644 --- a/vcl/source/control/edit.cxx +++ b/vcl/source/control/edit.cxx @@ -17,6 +17,8 @@ * the License at http://www.apache.org/licenses/LICENSE-2.0 . */ +#include <comphelper/lok.hxx> + #include <vcl/decoview.hxx> #include <vcl/event.hxx> #include <vcl/cursor.hxx> @@ -1143,6 +1145,18 @@ void Edit::ImplShowCursor( bool bOnlyIfVisible ) pCursor->SetSize( Size( nCursorWidth, nTextHeight ) ); pCursor->Show(); } + + if (comphelper::LibreOfficeKit::isActive()) + { + const long X = GetOutOffXPixel() + pCursor->GetPos().X(); + const long Y = GetOutOffYPixel() + pCursor->GetPos().Y(); + if (nCursorWidth == 0) + nCursorWidth = 2; + const tools::Rectangle aRect(Point(X, Y), Size(nCursorWidth, pCursor->GetHeight())); + Dialog* pParentDlg = GetParentDialog(); + if (pParentDlg) + pParentDlg->LOKCursorInvalidate(aRect); + } } void Edit::ImplAlign() diff --git a/vcl/source/window/dialog.cxx b/vcl/source/window/dialog.cxx index a409bdc6e126..8e6d5f101012 100644 --- a/vcl/source/window/dialog.cxx +++ b/vcl/source/window/dialog.cxx @@ -1015,6 +1015,16 @@ void Dialog::LOKKeyUp(const KeyEvent& rKeyEvent) ImplWindowFrameProc(this, SalEvent::ExternalKeyUp, &rKeyEvent); } +void Dialog::LOKCursorInvalidate(const tools::Rectangle& aRect) +{ + assert(comphelper::LibreOfficeKit::isActive()); + + if (!comphelper::LibreOfficeKit::isDialogPainting() && mpDialogRenderable && !maID.isEmpty()) + { + mpDialogRenderable->notifyDialog(maID, "cursor_invalidate", &aRect); + } +} + void Dialog::ensureRepaint() { // ensure repaint |