sfx2/source/dialog/infobar.cxx | 33 +++++++-------------------------- sfx2/source/view/sfxbasecontroller.cxx | 6 ++++++ 2 files changed, 13 insertions(+), 26 deletions(-)
New commits: commit e275ef9db490a4dcb7d8bfbe8f3a06c7ff2ee1b1 Author: Samuel Mehrbrodt <[email protected]> AuthorDate: Mon Nov 18 15:25:11 2019 +0100 Commit: Xisco Faulí <[email protected]> CommitDate: Sat Nov 23 08:51:35 2019 +0100 tdf#125359 Don't overlap multiple infobars Change-Id: Ieda7dce84daec2e94501c69584f3df21d63d60bb Reviewed-on: https://gerrit.libreoffice.org/83101 Tested-by: Jenkins Reviewed-by: Samuel Mehrbrodt <[email protected]> (cherry picked from commit 1562e094fc6a57cd9738109d5202497bcc043d80) Reviewed-on: https://gerrit.libreoffice.org/83505 Reviewed-by: Xisco Faulí <[email protected]> diff --git a/sfx2/source/dialog/infobar.cxx b/sfx2/source/dialog/infobar.cxx index ea99fc6b67d3..8dd52ed32a92 100644 --- a/sfx2/source/dialog/infobar.cxx +++ b/sfx2/source/dialog/infobar.cxx @@ -339,7 +339,7 @@ void SfxInfoBarWindow::Resize() m_pSecondaryMessage->SetPosSizePixel(aSecondaryMessagePosition, aSecondaryTextSize); m_pImage->SetPosSizePixel(Point(4, 4), Size(32 * fScaleFactor, 32 * fScaleFactor)); - SetPosSizePixel(Point(0, 0), Size(nWidth, INFO_BAR_BASE_HEIGHT * fScaleFactor + aExtraHeight * fScaleFactor)); + SetPosSizePixel(GetPosPixel(), Size(nWidth, INFO_BAR_BASE_HEIGHT * fScaleFactor + aExtraHeight * fScaleFactor)); } void SfxInfoBarWindow::Update( const OUString& sPrimaryMessage, const OUString& sSecondaryMessage, InfobarType eType ) @@ -387,8 +387,6 @@ SfxInfoBarContainerWindow::appendInfoBar(const OUString& sId, const OUString& sP const OUString& sSecondaryMessage, InfobarType ibType, WinBits nMessageStyle, bool bShowCloseButton) { - Size aSize = GetSizePixel(); - auto pInfoBar = VclPtr<SfxInfoBarWindow>::Create(this, sId, sPrimaryMessage, sSecondaryMessage, ibType, nMessageStyle, bShowCloseButton); @@ -398,14 +396,9 @@ SfxInfoBarContainerWindow::appendInfoBar(const OUString& sId, const OUString& sP GetInfoBarColors(ibType,aBackgroundColor,aForegroundColor,aMessageColor); pInfoBar->m_aBackgroundColor = aBackgroundColor; pInfoBar->m_aForegroundColor = aForegroundColor; - - pInfoBar->SetPosPixel(Point(0, aSize.getHeight())); - pInfoBar->Show(); m_pInfoBars.push_back(pInfoBar); - long nHeight = pInfoBar->GetSizePixel().getHeight(); - aSize.setHeight(aSize.getHeight() + nHeight); - SetSizePixel(aSize); + Resize(); return pInfoBar; } @@ -434,24 +427,13 @@ void SfxInfoBarContainerWindow::removeInfoBar(VclPtr<SfxInfoBarWindow> const & p m_pInfoBars.erase(it); } - // Resize - long nY = 0; - for (auto const& infoBar : m_pInfoBars) - { - infoBar->SetPosPixel(Point(0, nY)); - nY += infoBar->GetSizePixel().getHeight(); - } - - Size aSize = GetSizePixel(); - aSize.setHeight(nY); - SetSizePixel(aSize); + Resize(); m_pChildWin->Update(); } void SfxInfoBarContainerWindow::Resize() { - // Only need to change the width of the infobars long nWidth = GetSizePixel().getWidth(); long nHeight = 0; @@ -459,14 +441,13 @@ void SfxInfoBarContainerWindow::Resize() { Size aSize = rxInfoBar->GetSizePixel(); aSize.setWidth(nWidth); - rxInfoBar->SetSizePixel(aSize); + Point aPos(0, nHeight); + rxInfoBar->SetPosSizePixel(aPos, aSize); rxInfoBar->Resize(); + rxInfoBar->Show(); // Stretch to fit the infobar(s) - if (aSize.getHeight() > nHeight) - { - nHeight = aSize.getHeight(); - } + nHeight += aSize.getHeight(); } SetSizePixel(Size(nWidth, nHeight)); commit 5d7be7fdbd1f94b2056f8b4adc7722addb9e7fc9 Author: Samuel Mehrbrodt <[email protected]> AuthorDate: Wed Nov 20 07:49:23 2019 +0100 Commit: Xisco Faulí <[email protected]> CommitDate: Sat Nov 23 08:51:13 2019 +0100 Add SolarMutexGuard to infobar api methods Change-Id: If7fab7df7566b1db770437090115b064b98257c6 Reviewed-on: https://gerrit.libreoffice.org/83255 Tested-by: Jenkins Reviewed-by: Samuel Mehrbrodt <[email protected]> (cherry picked from commit 9c9c047f42637c274b246fb4020ed0df4ee39ded) Reviewed-on: https://gerrit.libreoffice.org/83506 Reviewed-by: Xisco Faulí <[email protected]> diff --git a/sfx2/source/view/sfxbasecontroller.cxx b/sfx2/source/view/sfxbasecontroller.cxx index f4cf6768a8b3..22ec268c9518 100644 --- a/sfx2/source/view/sfxbasecontroller.cxx +++ b/sfx2/source/view/sfxbasecontroller.cxx @@ -1477,6 +1477,8 @@ void SAL_CALL SfxBaseController::appendInfobar(const OUString& sId, const OUStri const Sequence<StringPair>& actionButtons, sal_Bool bShowCloseButton) { + SolarMutexGuard aGuard; + if (aInfobarType < static_cast<sal_Int32>(InfobarType::INFO) || aInfobarType > static_cast<sal_Int32>(InfobarType::DANGER)) throw lang::IllegalArgumentException("Undefined InfobarType: " @@ -1510,6 +1512,8 @@ void SAL_CALL SfxBaseController::updateInfobar(const OUString& sId, const OUStri const OUString& sSecondaryMessage, sal_Int32 aInfobarType) { + SolarMutexGuard aGuard; + if (aInfobarType < static_cast<sal_Int32>(InfobarType::INFO) || aInfobarType > static_cast<sal_Int32>(InfobarType::DANGER)) throw lang::IllegalArgumentException("Undefined InfobarType: " @@ -1525,6 +1529,8 @@ void SAL_CALL SfxBaseController::updateInfobar(const OUString& sId, const OUStri void SAL_CALL SfxBaseController::removeInfobar(const OUString& sId) { + SolarMutexGuard aGuard; + SfxViewFrame* pViewFrame = m_pData->m_pViewShell->GetFrame(); if (!pViewFrame->HasInfoBarWithID(sId)) throw css::container::NoSuchElementException("Infobar with ID '" + sId + "' not found."); _______________________________________________ Libreoffice-commits mailing list [email protected] https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits
