summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCaolán McNamara <caolanm@redhat.com>2020-10-07 10:16:41 +0100
committerCaolán McNamara <caolanm@redhat.com>2020-10-07 16:19:32 +0200
commitac2369cf0369da191ac970a6ed47d634a7fae0e7 (patch)
tree1bf092ca5554a7d182aef7dee44db5d0d8554dc0
parentbd567a409f214d042bd64798f168fdb3dbf3cd31 (diff)
let a subclass destroy and recreate its EditView
Change-Id: I743592b0d6d864f3d72c2fd111ef8adf13a3eb4a Reviewed-on: https://gerrit.libreoffice.org/c/core/+/104052 Tested-by: Jenkins Reviewed-by: Caolán McNamara <caolanm@redhat.com>
-rw-r--r--include/svx/weldeditview.hxx20
-rw-r--r--svx/source/dialog/weldeditview.cxx49
2 files changed, 45 insertions, 24 deletions
diff --git a/include/svx/weldeditview.hxx b/include/svx/weldeditview.hxx
index d54f2c9404a7..00f49f6965a7 100644
--- a/include/svx/weldeditview.hxx
+++ b/include/svx/weldeditview.hxx
@@ -39,11 +39,23 @@ public:
EditEngine& GetEditEngine() { return *m_xEditEngine; }
- bool HasSelection() const { return m_xEditView->HasSelection(); }
+ bool HasSelection() const { return m_xEditView && m_xEditView->HasSelection(); }
- void Cut() { m_xEditView->Cut(); }
- void Copy() { m_xEditView->Copy(); }
- void Paste() { m_xEditView->Paste(); }
+ void Cut()
+ {
+ if (m_xEditView)
+ m_xEditView->Cut();
+ }
+ void Copy()
+ {
+ if (m_xEditView)
+ m_xEditView->Copy();
+ }
+ void Paste()
+ {
+ if (m_xEditView)
+ m_xEditView->Paste();
+ }
virtual ~WeldEditView() override;
diff --git a/svx/source/dialog/weldeditview.cxx b/svx/source/dialog/weldeditview.cxx
index d29316f9c9a9..18fc071702b5 100644
--- a/svx/source/dialog/weldeditview.cxx
+++ b/svx/source/dialog/weldeditview.cxx
@@ -88,32 +88,33 @@ void WeldEditView::Resize()
void WeldEditView::Paint(vcl::RenderContext& rRenderContext, const tools::Rectangle& rRect)
{
- //note: ScEditWindow::Paint is similar
-
rRenderContext.Push(PushFlags::ALL);
rRenderContext.SetClipRegion();
const StyleSettings& rStyleSettings = Application::GetSettings().GetStyleSettings();
Color aBgColor = rStyleSettings.GetWindowColor();
- m_xEditView->SetBackgroundColor(aBgColor);
-
rRenderContext.SetBackground(aBgColor);
- tools::Rectangle aLogicRect(rRenderContext.PixelToLogic(rRect));
- m_xEditView->Paint(aLogicRect, &rRenderContext);
+ std::vector<tools::Rectangle> aLogicRects;
- if (HasFocus())
+ if (m_xEditView)
{
- m_xEditView->ShowCursor();
- vcl::Cursor* pCursor = m_xEditView->GetCursor();
- pCursor->DrawToDevice(rRenderContext);
- }
+ m_xEditView->SetBackgroundColor(aBgColor);
- std::vector<tools::Rectangle> aLogicRects;
+ tools::Rectangle aLogicRect(rRenderContext.PixelToLogic(rRect));
+ m_xEditView->Paint(aLogicRect, &rRenderContext);
- // get logic selection
- m_xEditView->GetSelectionRectangles(aLogicRects);
+ if (HasFocus())
+ {
+ m_xEditView->ShowCursor();
+ vcl::Cursor* pCursor = m_xEditView->GetCursor();
+ pCursor->DrawToDevice(rRenderContext);
+ }
+
+ // get logic selection
+ m_xEditView->GetSelectionRectangles(aLogicRects);
+ }
rRenderContext.SetLineColor();
rRenderContext.SetFillColor(COL_BLACK);
@@ -125,7 +126,10 @@ void WeldEditView::Paint(vcl::RenderContext& rRenderContext, const tools::Rectan
rRenderContext.Pop();
}
-bool WeldEditView::MouseMove(const MouseEvent& rMEvt) { return m_xEditView->MouseMove(rMEvt); }
+bool WeldEditView::MouseMove(const MouseEvent& rMEvt)
+{
+ return m_xEditView && m_xEditView->MouseMove(rMEvt);
+}
bool WeldEditView::MouseButtonDown(const MouseEvent& rMEvt)
{
@@ -135,12 +139,12 @@ bool WeldEditView::MouseButtonDown(const MouseEvent& rMEvt)
GetFocus();
}
- return m_xEditView->MouseButtonDown(rMEvt);
+ return m_xEditView && m_xEditView->MouseButtonDown(rMEvt);
}
bool WeldEditView::MouseButtonUp(const MouseEvent& rMEvt)
{
- return m_xEditView->MouseButtonUp(rMEvt);
+ return m_xEditView && m_xEditView->MouseButtonUp(rMEvt);
}
bool WeldEditView::KeyInput(const KeyEvent& rKEvt)
@@ -151,7 +155,7 @@ bool WeldEditView::KeyInput(const KeyEvent& rKEvt)
{
return false;
}
- else if (!m_xEditView->PostKeyEvent(rKEvt))
+ else if (m_xEditView && !m_xEditView->PostKeyEvent(rKEvt))
{
if (rKEvt.GetKeyCode().IsMod1() && !rKEvt.GetKeyCode().IsMod2())
{
@@ -175,6 +179,8 @@ bool WeldEditView::KeyInput(const KeyEvent& rKEvt)
bool WeldEditView::Command(const CommandEvent& rCEvt)
{
+ if (!m_xEditView)
+ return false;
m_xEditView->Command(rCEvt);
return true;
}
@@ -1432,6 +1438,8 @@ void WeldEditView::SetDrawingArea(weld::DrawingArea* pDrawingArea)
int WeldEditView::GetSurroundingText(OUString& rSurrounding)
{
+ if (!m_xEditView)
+ return -1;
rSurrounding = m_xEditView->GetSurroundingText();
return m_xEditView->GetSurroundingTextSelection().Min();
}
@@ -1439,7 +1447,7 @@ int WeldEditView::GetSurroundingText(OUString& rSurrounding)
bool WeldEditView::DeleteSurroundingText(const Selection& rRange)
{
bool bRes(false);
- EditEngine* pEditEngine = m_xEditView->GetEditEngine();
+ EditEngine* pEditEngine = m_xEditView ? m_xEditView->GetEditEngine() : nullptr;
if (pEditEngine)
{
ESelection aSel(m_xEditView->GetSelection());
@@ -1455,7 +1463,8 @@ bool WeldEditView::DeleteSurroundingText(const Selection& rRange)
void WeldEditView::GetFocus()
{
- m_xEditView->ShowCursor();
+ if (m_xEditView)
+ m_xEditView->ShowCursor();
weld::CustomWidgetController::GetFocus();