diff options
author | Henry Castro <hcastro@collabora.com> | 2019-11-30 09:36:27 -0400 |
---|---|---|
committer | Henry Castro <hcastro@collabora.com> | 2019-12-11 03:25:57 +0100 |
commit | d5d8fa63282a433da9c49d811f04390b8d6ab9cc (patch) | |
tree | 51e7bd759def8d8dbcc50c0b4fe8027ef637ef45 | |
parent | 3bf5610d14a6dd5f093314016ba25038fe06fdf1 (diff) |
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/84215
Tested-by: Jenkins
Reviewed-by: Henry Castro <hcastro@collabora.com>
-rw-r--r-- | include/vcl/window.hxx | 1 | ||||
-rw-r--r-- | sfx2/source/view/viewfrm.cxx | 5 | ||||
-rw-r--r-- | sfx2/source/view/viewsh.cxx | 11 | ||||
-rw-r--r-- | vcl/source/window/window2.cxx | 6 |
4 files changed, 18 insertions, 5 deletions
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 223a02a7a8ab..96bdf69f0c89 100644 --- a/sfx2/source/view/viewfrm.cxx +++ b/sfx2/source/view/viewfrm.cxx @@ -1509,8 +1509,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 126a09e5ecad..baaceb0b6a73 100644 --- a/sfx2/source/view/viewsh.cxx +++ b/sfx2/source/view/viewsh.cxx @@ -1096,7 +1096,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); + } } @@ -1121,8 +1125,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 6f32ea52eafd..e3b27653ad8d 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; |