vcl/headless/svpframe.cxx | 31 ++++++++++++++++++++++--------- 1 file changed, 22 insertions(+), 9 deletions(-)
New commits: commit d9648d1cf6c4ec7407ff30cf814be98d089345d1 Author: Jan-Marek Glogowski <glo...@fbihome.de> AuthorDate: Tue Jun 29 18:30:01 2021 +0200 Commit: Jan-Marek Glogowski <glo...@fbihome.de> CommitDate: Thu Jul 1 15:26:31 2021 +0200 svp: a bit more correct focus handling Took me a while to realize, that the focus handling after closing a dialog was somehow broken. This isn't a really good solution, because we can still focus invisble frames, but that is at least needed for CppunitTest_sd_tiledrendering and the reason that crashes for non-headless VCL plugins. Change-Id: I272837bd965439c5c0cd9c8bcbc9d51e3018fdf3 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/118130 Tested-by: Jenkins Reviewed-by: Jan-Marek Glogowski <glo...@fbihome.de> diff --git a/vcl/headless/svpframe.cxx b/vcl/headless/svpframe.cxx index c7a1d8f50845..5f40377f5b86 100644 --- a/vcl/headless/svpframe.cxx +++ b/vcl/headless/svpframe.cxx @@ -118,8 +118,12 @@ SvpSalFrame::~SvpSalFrame() void SvpSalFrame::GetFocus() { + if (m_nStyle == SalFrameStyleFlags::NONE) + return; if( s_pFocusFrame == this ) return; + // FIXME: return if !m_bVisible + // That's IMHO why CppunitTest_sd_tiledrendering crashes non-headless if( (m_nStyle & (SalFrameStyleFlags::OWNERDRAWDECORATION | SalFrameStyleFlags::FLOAT)) == SalFrameStyleFlags::NONE ) { @@ -210,7 +214,16 @@ void SvpSalFrame::SetExtendedFrameStyle( SalExtStyle ) void SvpSalFrame::Show( bool bVisible, bool bNoActivate ) { - if( bVisible && ! m_bVisible ) + if (m_nStyle == SalFrameStyleFlags::NONE) + return; + if (bVisible == m_bVisible) + { + if (m_bVisible && !bNoActivate) + GetFocus(); + return; + } + + if (bVisible) { // SAL_DEBUG("SvpSalFrame::Show: showing: " << this); m_bVisible = true; @@ -218,17 +231,12 @@ void SvpSalFrame::Show( bool bVisible, bool bNoActivate ) if( ! bNoActivate ) GetFocus(); } - else if( ! bVisible && m_bVisible ) + else { // SAL_DEBUG("SvpSalFrame::Show: hiding: " << this); m_bVisible = false; - m_pInstance->PostEvent( this, nullptr, SalEvent::Resize ); LoseFocus(); } - else - { - // SAL_DEBUG("SvpSalFrame::Show: nothing: " << this); - } } void SvpSalFrame::SetMinClientSize( tools::Long nWidth, tools::Long nHeight ) @@ -364,9 +372,14 @@ void SvpSalFrame::SetAlwaysOnTop( bool ) { } -void SvpSalFrame::ToTop( SalFrameToTop ) +void SvpSalFrame::ToTop(SalFrameToTop nFlags) { - GetFocus(); + if (m_nStyle == SalFrameStyleFlags::NONE) + return; + if (nFlags & SalFrameToTop::RestoreWhenMin) + Show(true, false); + else + GetFocus(); } void SvpSalFrame::SetPointer( PointerStyle ) _______________________________________________ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits