summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--sd/source/ui/framework/factories/ChildWindowPane.cxx4
-rw-r--r--sd/source/ui/inc/ViewShellManager.hxx5
-rw-r--r--sd/source/ui/view/ViewShellManager.cxx28
3 files changed, 36 insertions, 1 deletions
diff --git a/sd/source/ui/framework/factories/ChildWindowPane.cxx b/sd/source/ui/framework/factories/ChildWindowPane.cxx
index 1eaf0f0aeeb2..6e9e237c166f 100644
--- a/sd/source/ui/framework/factories/ChildWindowPane.cxx
+++ b/sd/source/ui/framework/factories/ChildWindowPane.cxx
@@ -48,7 +48,9 @@ ChildWindowPane::ChildWindowPane (
mpShell(std::move(pShell)),
mbHasBeenActivated(false)
{
- mrViewShellBase.GetViewShellManager()->ActivateShell(mpShell.get());
+ // ChildWindowPane shells don't implement dispatch slots, so activate them
+ // at the bottom of the shellstack.
+ mrViewShellBase.GetViewShellManager()->ActivateLowPriorityShell(mpShell.get());
SfxViewFrame& rViewFrame = mrViewShellBase.GetViewFrame();
diff --git a/sd/source/ui/inc/ViewShellManager.hxx b/sd/source/ui/inc/ViewShellManager.hxx
index 1ad4f138d8ae..1ea01466d58d 100644
--- a/sd/source/ui/inc/ViewShellManager.hxx
+++ b/sd/source/ui/inc/ViewShellManager.hxx
@@ -88,6 +88,11 @@ public:
*/
void ActivateShell(SfxShell* pShell);
+ /** Activate the given shell, putting it at the bottom of the stack instead of
+ the top.
+ */
+ void ActivateLowPriorityShell(SfxShell* pShell);
+
/** Deactivate the specified shell, i.e. take it and all of its
object bars from the shell stack.
@param pShell
diff --git a/sd/source/ui/view/ViewShellManager.cxx b/sd/source/ui/view/ViewShellManager.cxx
index f158e32e3296..d7e05a8d03c2 100644
--- a/sd/source/ui/view/ViewShellManager.cxx
+++ b/sd/source/ui/view/ViewShellManager.cxx
@@ -108,8 +108,10 @@ public:
ViewShell* pViewShell);
void DeactivateViewShell (const ViewShell& rShell);
void ActivateShell (SfxShell& rShell);
+ void ActivateLowPriorityShell (SfxShell& rShell);
void DeactivateShell (const SfxShell& rShell);
void ActivateShell (const ShellDescriptor& rDescriptor);
+ void ActivateLowPriorityShell (const ShellDescriptor& rDescriptor);
void SetFormShell (const ViewShell* pViewShell, FmFormShell* pFormShell, bool bAbove);
void ActivateSubShell (const SfxShell& rParentShell, ShellId nId);
void DeactivateSubShell (const SfxShell& rParentShell, ShellId nId);
@@ -317,6 +319,12 @@ void ViewShellManager::ActivateShell (SfxShell* pShell)
mpImpl->ActivateShell(*pShell);
}
+void ViewShellManager::ActivateLowPriorityShell (SfxShell* pShell)
+{
+ if (mbValid && pShell!=nullptr)
+ mpImpl->ActivateLowPriorityShell(*pShell);
+}
+
void ViewShellManager::DeactivateShell (const SfxShell* pShell)
{
if (mbValid && pShell!=nullptr)
@@ -496,6 +504,17 @@ void ViewShellManager::Implementation::ActivateShell (SfxShell& rShell)
ActivateShell(aDescriptor);
}
+void ViewShellManager::Implementation::ActivateLowPriorityShell (SfxShell& rShell)
+{
+ ::osl::MutexGuard aGuard (maMutex);
+
+ // Create a new shell or recycle on in the cache.
+ ShellDescriptor aDescriptor;
+ aDescriptor.mpShell = &rShell;
+
+ ActivateLowPriorityShell(aDescriptor);
+}
+
void ViewShellManager::Implementation::ActivateShell (const ShellDescriptor& rDescriptor)
{
// Put shell on top of the active view shells.
@@ -505,6 +524,15 @@ void ViewShellManager::Implementation::ActivateShell (const ShellDescriptor& rDe
}
}
+void ViewShellManager::Implementation::ActivateLowPriorityShell (const ShellDescriptor& rDescriptor)
+{
+ // Put shell on bottom of the active view shells.
+ if (rDescriptor.mpShell != nullptr)
+ {
+ maActiveViewShells.push_back( rDescriptor );
+ }
+}
+
void ViewShellManager::Implementation::DeactivateShell (const SfxShell& rShell)
{
::osl::MutexGuard aGuard (maMutex);