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

Reply via email to