lokdialog: Callback for dialog cursor invalidation

Change-Id: Iecadb68737ed7b1a425d9ea633976fb24d1055c6
Reviewed-on: https://gerrit.libreoffice.org/44721
Tested-by: Jenkins <ci@libreoffice.org>
Reviewed-by: pranavk <pranavk@collabora.co.uk>
This commit is contained in:
Pranav Kant 2017-11-14 16:00:57 +05:30 committed by pranavk
parent 8aa381f8a1
commit a088f9e729
4 changed files with 26 additions and 1 deletions

View file

@ -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 );

View file

@ -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;

View file

@ -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()

View file

@ -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