[Libreoffice-commits] core.git: vcl/win
Libreoffice Gerrit user
logerrit at kemper.freedesktop.org
Thu Mar 7 20:46:16 UTC 2019
vcl/win/gdi/salnativewidgets-luna.cxx | 27 +++++++++++++++++----------
1 file changed, 17 insertions(+), 10 deletions(-)
New commits:
commit 5f2b67e7c1aa4ea7bb66292207ed8c9b20a6f78f
Author: Miklos Vajna <vmiklos at collabora.com>
AuthorDate: Thu Mar 7 18:05:11 2019 +0100
Commit: Miklos Vajna <vmiklos at collabora.com>
CommitDate: Thu Mar 7 21:45:49 2019 +0100
tdf#119947 vcl opengl win: fix fontwork popup menu
Regression from commit b160db926b574b7e9d6696d49dbbce8dd289aade
(tdf#96947 vcl opengl win: fix background of menu items w/ check/radio
marks, 2018-05-14), the problem was that GetMenuPopupMarkRegion() did an
unconditional downcast from ImplControlValue to MenupopupValue. This
looked safe, but when the extracted function was used in
WinSalGraphics::drawNativeControl(), then that argument was not safe to
downcast.
Fix the problem by switching to safe downcast, and returning an empty
rectangle (instead of a bogus one) on error.
This way the old bug stays fixed but fontwork popup menu works again as
well.
Change-Id: I2b69b9f2e6823850892ac73df78dac5c2f04ec03
Reviewed-on: https://gerrit.libreoffice.org/68883
Reviewed-by: Miklos Vajna <vmiklos at collabora.com>
Tested-by: Jenkins
diff --git a/vcl/win/gdi/salnativewidgets-luna.cxx b/vcl/win/gdi/salnativewidgets-luna.cxx
index efa69457c083..422a86c27045 100644
--- a/vcl/win/gdi/salnativewidgets-luna.cxx
+++ b/vcl/win/gdi/salnativewidgets-luna.cxx
@@ -496,18 +496,21 @@ static tools::Rectangle GetMenuPopupMarkRegion(const ImplControlValue& rValue)
{
tools::Rectangle aRet;
- const MenupopupValue& rMVal(static_cast<const MenupopupValue&>(rValue));
- aRet.SetTop(rMVal.maItemRect.Top());
- aRet.SetBottom(rMVal.maItemRect.Bottom() + 1); // see below in drawNativeControl
+ auto pMVal = dynamic_cast<const MenupopupValue*>(&rValue);
+ if (!pMVal)
+ return aRet;
+
+ aRet.SetTop(pMVal->maItemRect.Top());
+ aRet.SetBottom(pMVal->maItemRect.Bottom() + 1); // see below in drawNativeControl
if (AllSettings::GetLayoutRTL())
{
- aRet.SetRight(rMVal.maItemRect.Right() + 1);
- aRet.SetLeft(aRet.Right() - (rMVal.getNumericVal() - rMVal.maItemRect.Left()));
+ aRet.SetRight(pMVal->maItemRect.Right() + 1);
+ aRet.SetLeft(aRet.Right() - (pMVal->getNumericVal() - pMVal->maItemRect.Left()));
}
else
{
- aRet.SetRight(rMVal.getNumericVal());
- aRet.SetLeft(rMVal.maItemRect.Left());
+ aRet.SetRight(pMVal->getNumericVal());
+ aRet.SetLeft(pMVal->maItemRect.Left());
}
return aRet;
@@ -1173,9 +1176,13 @@ bool WinSalGraphics::drawNativeControl( ControlType nType,
if (pImpl && nType == ControlType::MenuPopup && (nPart == ControlPart::MenuItemCheckMark || nPart == ControlPart::MenuItemRadioMark))
{
- cacheRect = GetMenuPopupMarkRegion(aValue);
- buttonRect = cacheRect;
- keySize = cacheRect.GetSize();
+ tools::Rectangle aRectangle = GetMenuPopupMarkRegion(aValue);
+ if (!aRectangle.IsEmpty())
+ {
+ cacheRect = GetMenuPopupMarkRegion(aValue);
+ buttonRect = cacheRect;
+ keySize = cacheRect.GetSize();
+ }
}
More information about the Libreoffice-commits
mailing list