diff options
author | Gabriel Masei <gabriel.masei@1and1.ro> | 2021-06-16 09:41:12 +0300 |
---|---|---|
committer | Michael Meeks <michael.meeks@collabora.com> | 2021-06-16 10:16:50 +0200 |
commit | bf6dabe0ebad3cc5bc0edc04ae74fba0190b6203 (patch) | |
tree | d0807dbc845034a2d1b3c4495753b8f2fdd5b65e /vcl/source/window/winproc.cxx | |
parent | 01e4acd1dc3bfedb9c37b4b9bb93be1201b475a5 (diff) |
vcl: check mpWindowImpl for nullptr
Change-Id: I492c7d5c1846df7507b1f043b80de4e61ff8ca86
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/117282
Tested-by: Jenkins
Reviewed-by: Michael Meeks <michael.meeks@collabora.com>
Diffstat (limited to 'vcl/source/window/winproc.cxx')
-rw-r--r-- | vcl/source/window/winproc.cxx | 34 |
1 files changed, 22 insertions, 12 deletions
diff --git a/vcl/source/window/winproc.cxx b/vcl/source/window/winproc.cxx index 0504ab4c7df1..3361b0d77858 100644 --- a/vcl/source/window/winproc.cxx +++ b/vcl/source/window/winproc.cxx @@ -1866,6 +1866,9 @@ IMPL_LINK_NOARG(vcl::Window, ImplAsyncFocusHdl, void*, void) static void ImplHandleGetFocus( vcl::Window* pWindow ) { + if (!pWindow || !pWindow->ImplGetWindowImpl() || !pWindow->ImplGetWindowImpl()->mpFrameData) + return; + pWindow->ImplGetWindowImpl()->mpFrameData->mbHasFocus = true; // execute Focus-Events after a delay, such that SystemChildWindows @@ -1882,6 +1885,9 @@ static void ImplHandleGetFocus( vcl::Window* pWindow ) static void ImplHandleLoseFocus( vcl::Window* pWindow ) { + if (!pWindow) + return; + ImplSVData* pSVData = ImplGetSVData(); // Abort the autoscroll if the frame loses focus @@ -1891,23 +1897,27 @@ static void ImplHandleLoseFocus( vcl::Window* pWindow ) // Abort tracking if the frame loses focus if (pSVData->mpWinData->mpTrackWin) { - if (pSVData->mpWinData->mpTrackWin->ImplGetWindowImpl()->mpFrameWindow == pWindow) + if (pSVData->mpWinData->mpTrackWin->ImplGetWindowImpl() && + pSVData->mpWinData->mpTrackWin->ImplGetWindowImpl()->mpFrameWindow == pWindow) pSVData->mpWinData->mpTrackWin->EndTracking(TrackingEventFlags::Cancel); } - pWindow->ImplGetWindowImpl()->mpFrameData->mbHasFocus = false; - - // execute Focus-Events after a delay, such that SystemChildWindows - // do not flicker when they receive focus - if ( !pWindow->ImplGetWindowImpl()->mpFrameData->mnFocusId ) + if (pWindow->ImplGetWindowImpl() && pWindow->ImplGetWindowImpl()->mpFrameData) { - pWindow->ImplGetWindowImpl()->mpFrameData->mbStartFocusState = !pWindow->ImplGetWindowImpl()->mpFrameData->mbHasFocus; - pWindow->ImplGetWindowImpl()->mpFrameData->mnFocusId = Application::PostUserEvent( LINK( pWindow, vcl::Window, ImplAsyncFocusHdl ), nullptr, true ); - } + pWindow->ImplGetWindowImpl()->mpFrameData->mbHasFocus = false; + + // execute Focus-Events after a delay, such that SystemChildWindows + // do not flicker when they receive focus + if ( !pWindow->ImplGetWindowImpl()->mpFrameData->mnFocusId ) + { + pWindow->ImplGetWindowImpl()->mpFrameData->mbStartFocusState = !pWindow->ImplGetWindowImpl()->mpFrameData->mbHasFocus; + pWindow->ImplGetWindowImpl()->mpFrameData->mnFocusId = Application::PostUserEvent( LINK( pWindow, vcl::Window, ImplAsyncFocusHdl ), nullptr, true ); + } - vcl::Window* pFocusWin = pWindow->ImplGetWindowImpl()->mpFrameData->mpFocusWin; - if ( pFocusWin && pFocusWin->ImplGetWindowImpl()->mpCursor ) - pFocusWin->ImplGetWindowImpl()->mpCursor->ImplHide(); + vcl::Window* pFocusWin = pWindow->ImplGetWindowImpl()->mpFrameData->mpFocusWin; + if ( pFocusWin && pFocusWin->ImplGetWindowImpl()->mpCursor ) + pFocusWin->ImplGetWindowImpl()->mpCursor->ImplHide(); + } // Make sure that no menu is visible when a toplevel window loses focus. VclPtr<FloatingWindow> pFirstFloat = pSVData->mpWinData->mpFirstFloat; |