Kaydet (Commit) a792468f authored tarafından Miklos Vajna's avatar Miklos Vajna

sw lok: fix blinking cursor position of comments

With this, it is possible to click inside a comment (and get a blinking
cursor inside a comment), and also possible to use the arrow keys to
native around and still get correct blinking cursor position.

(cherry picked from commit 5fb91dfd)

Conflicts:
	sw/inc/SidebarWin.hxx
	sw/source/uibase/docvw/SidebarTxtControl.hxx
	sw/source/uibase/docvw/SidebarWin.cxx

Change-Id: I29eb1e60e4e571151f0b18bec8cf765ea09af09f
üst 739dad1e
......@@ -179,9 +179,10 @@ class SwSidebarWin : public vcl::Window
virtual void Draw(OutputDevice* pDev, const Point&, const Size&, sal_uLong) SAL_OVERRIDE;
virtual void KeyInput(const KeyEvent& rKeyEvt) SAL_OVERRIDE;
virtual void MouseButtonDown(const MouseEvent& rMouseEvent) SAL_OVERRIDE;
void PaintTile(vcl::RenderContext& rRenderContext, const Rectangle& rRect);
/// Get the matching sub-widget inside this sidebar widget for rPointLogic, if any.
vcl::Window* IsHitWindow(const Point& rPointLogic);
/// Is there a matching sub-widget inside this sidebar widget for rPointLogic?
bool IsHitWindow(const Point& rPointLogic);
protected:
virtual void DataChanged( const DataChangedEvent& aEvent) SAL_OVERRIDE;
......
......@@ -1736,9 +1736,9 @@ vcl::Window* SwPostItMgr::IsHitSidebarWindow(const Point& rPointLogic)
if (!pPostIt)
continue;
if (vcl::Window* pWindow = pPostIt->IsHitWindow(rPointLogic))
if (pPostIt->IsHitWindow(rPointLogic))
{
pRet = pWindow;
pRet = pPostIt;
break;
}
}
......
......@@ -41,7 +41,6 @@ class SidebarTextControl : public Control
protected:
virtual void Paint( vcl::RenderContext& rRenderContext, const Rectangle& rRect) SAL_OVERRIDE;
virtual void MouseMove( const MouseEvent& rMEvt ) SAL_OVERRIDE;
virtual void MouseButtonDown( const MouseEvent& rMEvt ) SAL_OVERRIDE;
virtual void MouseButtonUp( const MouseEvent& rMEvt ) SAL_OVERRIDE;
virtual void Command( const CommandEvent& rCEvt ) SAL_OVERRIDE;
virtual void LoseFocus() SAL_OVERRIDE;
......@@ -61,6 +60,7 @@ class SidebarTextControl : public Control
virtual void GetFocus() SAL_OVERRIDE;
virtual void KeyInput( const KeyEvent& rKeyEvt ) SAL_OVERRIDE;
virtual void MouseButtonDown( const MouseEvent& rMEvt ) SAL_OVERRIDE;
OutlinerView* GetTextView() const;
......
......@@ -279,12 +279,10 @@ void SwSidebarWin::PaintTile(vcl::RenderContext& rRenderContext, const Rectangle
rRenderContext.Push(PushFlags::NONE);
}
vcl::Window* SwSidebarWin::IsHitWindow(const Point& rPointLogic)
bool SwSidebarWin::IsHitWindow(const Point& rPointLogic)
{
Rectangle aRectangleLogic(EditWin()->PixelToLogic(GetPosPixel()), EditWin()->PixelToLogic(GetSizePixel()));
if (aRectangleLogic.IsInside(rPointLogic))
return mpSidebarTextControl;
return 0;
return aRectangleLogic.IsInside(rPointLogic);
}
void SwSidebarWin::Draw(OutputDevice* pDev, const Point& rPt, const Size& rSz, sal_uLong nInFlags)
......@@ -355,10 +353,40 @@ void SwSidebarWin::Draw(OutputDevice* pDev, const Point& rPt, const Size& rSz, s
}
}
/// We want to work in absolute twips: so set delta between rChild and rParent as origin on rChild, then disable map mode on rChild.
static void lcl_setAbsoluteTwips(vcl::Window& rParent, vcl::Window& rChild)
{
Point aOffset(rChild.GetOutOffXPixel() - rParent.GetOutOffXPixel(), rChild.GetOutOffYPixel() - rParent.GetOutOffYPixel());
MapMode aMapMode(rChild.GetMapMode());
aMapMode.SetOrigin(rChild.PixelToLogic(aOffset));
rChild.SetMapMode(aMapMode);
rChild.EnableMapMode(false);
}
void SwSidebarWin::KeyInput(const KeyEvent& rKeyEvent)
{
if (mpSidebarTextControl)
{
mpSidebarTextControl->Push(PushFlags::MAPMODE);
lcl_setAbsoluteTwips(*EditWin(), *mpSidebarTextControl);
mpSidebarTextControl->KeyInput(rKeyEvent);
mpSidebarTextControl->Pop();
}
}
void SwSidebarWin::MouseButtonDown(const MouseEvent& rMouseEvent)
{
if (mpSidebarTextControl)
{
mpSidebarTextControl->Push(PushFlags::MAPMODE);
lcl_setAbsoluteTwips(*EditWin(), *mpSidebarTextControl);
mpSidebarTextControl->MouseButtonDown(rMouseEvent);
mpSidebarTextControl->Pop();
}
}
void SwSidebarWin::SetPosSizePixelRect(long nX, long nY, long nWidth, long nHeight,
......
......@@ -2770,14 +2770,7 @@ void SwEditWin::MouseButtonDown(const MouseEvent& _rMEvt)
{
if (vcl::Window* pWindow = m_rView.GetPostItMgr()->IsHitSidebarWindow(rMEvt.GetPosPixel()))
{
bool bDisableMapMode = pWindow->IsMapModeEnabled();
if (bDisableMapMode)
pWindow->EnableMapMode(false);
pWindow->MouseButtonDown(rMEvt);
if (bDisableMapMode)
pWindow->EnableMapMode();
return;
}
}
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment