Kaydet (Commit) 520cc667 authored tarafından Andre Fischer's avatar Andre Fischer

123276: Properly forward Deactivate() call and still don't broadcast context change.

üst 685921ea
...@@ -53,7 +53,6 @@ ...@@ -53,7 +53,6 @@
#include <svx/fmglob.hxx> #include <svx/fmglob.hxx>
#include <editeng/outliner.hxx> #include <editeng/outliner.hxx>
#include "misc.hxx" #include "misc.hxx"
#ifdef STARIMAGE_AVAILABLE #ifdef STARIMAGE_AVAILABLE
...@@ -148,7 +147,13 @@ void DrawViewShell::UIDeactivated( SfxInPlaceClient* pCli ) ...@@ -148,7 +147,13 @@ void DrawViewShell::UIDeactivated( SfxInPlaceClient* pCli )
void DrawViewShell::Deactivate(sal_Bool bIsMDIActivate) void DrawViewShell::Deactivate(sal_Bool bIsMDIActivate)
{ {
// Do not forward to ViewShell::Deactivate() to prevent a context change. // Temporarily disable context broadcasting while the Deactivate()
// call is forwarded to our base class.
const bool bIsContextBroadcasterEnabled (SfxShell::SetContextBroadcasterEnabled(false));
ViewShell::Deactivate(bIsMDIActivate);
SfxShell::SetContextBroadcasterEnabled(bIsContextBroadcasterEnabled);
} }
namespace namespace
......
...@@ -269,6 +269,10 @@ public: ...@@ -269,6 +269,10 @@ public:
*/ */
void BroadcastContextForActivation (const bool bIsActivated); void BroadcastContextForActivation (const bool bIsActivated);
/** Enabled or disable the context broadcaster. Returns the old state.
*/
bool SetContextBroadcasterEnabled (const bool bIsEnabled);
#ifndef _SFXSH_HXX #ifndef _SFXSH_HXX
SAL_DLLPRIVATE bool CanExecuteSlot_Impl( const SfxSlot &rSlot ); SAL_DLLPRIVATE bool CanExecuteSlot_Impl( const SfxSlot &rSlot );
SAL_DLLPRIVATE void DoActivate_Impl( SfxViewFrame *pFrame, sal_Bool bMDI); SAL_DLLPRIVATE void DoActivate_Impl( SfxViewFrame *pFrame, sal_Bool bMDI);
......
...@@ -44,9 +44,18 @@ public: ...@@ -44,9 +44,18 @@ public:
void Activate (const cssu::Reference<css::frame::XFrame>& rxFrame); void Activate (const cssu::Reference<css::frame::XFrame>& rxFrame);
void Deactivate (const cssu::Reference<css::frame::XFrame>& rxFrame); void Deactivate (const cssu::Reference<css::frame::XFrame>& rxFrame);
/** Enable or disable the broadcaster.
@param bIsEnabled
The new value of the "enabled" state.
@return
The old value of the "enabled" state is returned.
*/
bool SetBroadcasterEnabled (const bool bIsEnabled);
private: private:
rtl::OUString msContextName; rtl::OUString msContextName;
bool mbIsContextActive; bool mbIsContextActive;
bool mbIsBroadcasterEnabled;
void BroadcastContextChange ( void BroadcastContextChange (
const cssu::Reference<css::frame::XFrame>& rxFrame, const cssu::Reference<css::frame::XFrame>& rxFrame,
......
...@@ -1289,6 +1289,7 @@ void SfxShell::SetViewShell_Impl( SfxViewShell* pView ) ...@@ -1289,6 +1289,7 @@ void SfxShell::SetViewShell_Impl( SfxViewShell* pView )
void SfxShell::BroadcastContextForActivation (const bool bIsActivated) void SfxShell::BroadcastContextForActivation (const bool bIsActivated)
{ {
SfxViewFrame* pViewFrame = GetFrame(); SfxViewFrame* pViewFrame = GetFrame();
...@@ -1298,3 +1299,11 @@ void SfxShell::BroadcastContextForActivation (const bool bIsActivated) ...@@ -1298,3 +1299,11 @@ void SfxShell::BroadcastContextForActivation (const bool bIsActivated)
else else
pImp->maContextChangeBroadcaster.Deactivate(pViewFrame->GetFrame().GetFrameInterface()); pImp->maContextChangeBroadcaster.Deactivate(pViewFrame->GetFrame().GetFrameInterface());
} }
bool SfxShell::SetContextBroadcasterEnabled (const bool bIsEnabled)
{
return pImp->maContextChangeBroadcaster.SetBroadcasterEnabled(bIsEnabled);
}
...@@ -39,7 +39,8 @@ namespace sfx2 { namespace sidebar { ...@@ -39,7 +39,8 @@ namespace sfx2 { namespace sidebar {
ContextChangeBroadcaster::ContextChangeBroadcaster (void) ContextChangeBroadcaster::ContextChangeBroadcaster (void)
: msContextName(), : msContextName(),
mbIsContextActive(false) mbIsContextActive(false),
mbIsBroadcasterEnabled(true)
{ {
} }
...@@ -85,11 +86,24 @@ void ContextChangeBroadcaster::Deactivate (const cssu::Reference<css::frame::XFr ...@@ -85,11 +86,24 @@ void ContextChangeBroadcaster::Deactivate (const cssu::Reference<css::frame::XFr
bool ContextChangeBroadcaster::SetBroadcasterEnabled (const bool bIsEnabled)
{
const bool bWasEnabled (mbIsBroadcasterEnabled);
mbIsBroadcasterEnabled = bIsEnabled;
return bWasEnabled;
}
void ContextChangeBroadcaster::BroadcastContextChange ( void ContextChangeBroadcaster::BroadcastContextChange (
const cssu::Reference<css::frame::XFrame>& rxFrame, const cssu::Reference<css::frame::XFrame>& rxFrame,
const ::rtl::OUString& rsModuleName, const ::rtl::OUString& rsModuleName,
const ::rtl::OUString& rsContextName) const ::rtl::OUString& rsContextName)
{ {
if ( ! mbIsBroadcasterEnabled)
return;
if (rsContextName.getLength() == 0) if (rsContextName.getLength() == 0)
return; return;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment