include/vcl/window.hxx | 1 + sfx2/source/view/viewfrm.cxx | 5 +++-- sfx2/source/view/viewsh.cxx | 11 ++++++++--- vcl/source/window/window2.cxx | 6 ++++++ 4 files changed, 18 insertions(+), 5 deletions(-)
New commits: commit 29b90f114b986e0d089a65d27fef50c43cbe29a0 Author: Henry Castro <[email protected]> AuthorDate: Sat Nov 30 09:36:27 2019 -0400 Commit: Henry Castro <[email protected]> CommitDate: Thu May 21 00:33:44 2020 +0200 lok: fix welded dialogs In the tiled rendering case the dialogs, run asynchronous due to multiple user access. In order to send the messages to the client side, the dialog has to hook a LOKNotifier in the constructor of the SfxViewShell. However, the new weld wrapper classes use the Frame Window, (i.e. Window::GetFarmeWeld()), as a parent of the dialogs. On the other hand, in order to avoid getting the interface implementation inside implementation classes, it has been created a new method Window::GetFrameWindow(), otherwise I have to do a bureaucratic conversion between Interfaces to Implementations ( i.e. UnoWrapperBase::GetUnoWrapper() ) Change-Id: I32c34d82a89211a025250e65a05ce47d30efa0b8 Reviewed-on: https://gerrit.libreoffice.org/84117 Tested-by: Jenkins CollaboraOffice <[email protected]> Reviewed-by: Jan Holesovsky <[email protected]> Reviewed-on: https://gerrit.libreoffice.org/c/core/+/94505 Tested-by: Henry Castro <[email protected]> Reviewed-by: Henry Castro <[email protected]> diff --git a/include/vcl/window.hxx b/include/vcl/window.hxx index f090fef97203..8c87a78510cb 100644 --- a/include/vcl/window.hxx +++ b/include/vcl/window.hxx @@ -527,6 +527,7 @@ public: SAL_DLLPRIVATE vcl::Window* ImplGetFrameWindow() const; weld::Window* GetFrameWeld() const; + vcl::Window* GetFrameWindow() const; SalFrame* ImplGetFrame() const; SAL_DLLPRIVATE ImplFrameData* ImplGetFrameData(); diff --git a/sfx2/source/view/viewfrm.cxx b/sfx2/source/view/viewfrm.cxx index 7c0efa142fda..082c77aeba5a 100644 --- a/sfx2/source/view/viewfrm.cxx +++ b/sfx2/source/view/viewfrm.cxx @@ -1460,8 +1460,9 @@ void SfxViewFrame::Notify( SfxBroadcaster& /*rBC*/, const SfxHint& rHint ) case SfxHintId::Deinitializing: { - if (GetWindow().GetLOKNotifier()) - GetWindow().ReleaseLOKNotifier(); + vcl::Window* pFrameWin = GetWindow().GetFrameWindow(); + if (pFrameWin && pFrameWin->GetLOKNotifier()) + pFrameWin->ReleaseLOKNotifier(); GetFrame().DoClose(); break; diff --git a/sfx2/source/view/viewsh.cxx b/sfx2/source/view/viewsh.cxx index 8a199623fa58..e62a87b06b14 100644 --- a/sfx2/source/view/viewsh.cxx +++ b/sfx2/source/view/viewsh.cxx @@ -1094,7 +1094,11 @@ SfxViewShell::SfxViewShell rViewArr.push_back(this); if (comphelper::LibreOfficeKit::isActive()) - pViewFrame->GetWindow().SetLOKNotifier(this, true); + { + vcl::Window* pFrameWin = pViewFrame->GetWindow().GetFrameWindow(); + if (pFrameWin) + pFrameWin->SetLOKNotifier(this, true); + } } @@ -1119,8 +1123,9 @@ SfxViewShell::~SfxViewShell() pImpl->m_pController.clear(); } - if (GetViewFrame()->GetWindow().GetLOKNotifier()) - GetViewFrame()->GetWindow().ReleaseLOKNotifier(); + vcl::Window* pFrameWin = GetViewFrame()->GetWindow().GetFrameWindow(); + if (pFrameWin && pFrameWin->GetLOKNotifier()) + pFrameWin->ReleaseLOKNotifier(); } bool SfxViewShell::PrepareClose diff --git a/vcl/source/window/window2.cxx b/vcl/source/window/window2.cxx index 4b0c7e8f571d..2ad4bfcb4571 100644 --- a/vcl/source/window/window2.cxx +++ b/vcl/source/window/window2.cxx @@ -856,6 +856,12 @@ weld::Window* Window::GetFrameWeld() const return pFrame ? pFrame->GetFrameWeld() : nullptr; } +vcl::Window* Window::GetFrameWindow() const +{ + SalFrame* pFrame = ImplGetFrame(); + return pFrame ? pFrame->GetWindow() : nullptr; +} + vcl::Window* Window::ImplGetParent() const { return mpWindowImpl ? mpWindowImpl->mpParent.get() : nullptr; _______________________________________________ Libreoffice-commits mailing list [email protected] https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits
