diff options
Diffstat (limited to 'sw/source/uibase/app/apphdl.cxx')
-rw-r--r-- | sw/source/uibase/app/apphdl.cxx | 21 |
1 files changed, 21 insertions, 0 deletions
diff --git a/sw/source/uibase/app/apphdl.cxx b/sw/source/uibase/app/apphdl.cxx index 46b350c02c59..a0aead88a3ea 100644 --- a/sw/source/uibase/app/apphdl.cxx +++ b/sw/source/uibase/app/apphdl.cxx @@ -185,9 +185,27 @@ void SwModule::StateOther(SfxItemSet &rSet) { SwView* pView = ::GetActiveView(); std::shared_ptr<SwMailMergeConfigItem> xConfigItem; + bool bUnLockDispatcher = false; + SfxDispatcher* pDispatcher = nullptr; if (pView) + { xConfigItem = pView->EnsureMailMergeConfigItem(); + // tdf#121607 lock the dispatcher while processing + // this request, and release it afterwards, + // that means that if this request pops up a dialog + // any other pending requests will be deferred + // until this request is finished, i.e. they won't + // be dispatched by the dispatcher timeout until + // unlock is called, serializing the password dialogs + pDispatcher = pView->GetViewFrame()->GetDispatcher(); + if (!pDispatcher->IsLocked()) + { + pDispatcher->Lock(true); + bUnLockDispatcher = true; + } + } + // #i51949# hide e-Mail option if e-Mail is not supported // #i63267# printing might be disabled if (!xConfigItem || @@ -199,6 +217,9 @@ void SwModule::StateOther(SfxItemSet &rSet) { rSet.DisableItem(nWhich); } + + if (bUnLockDispatcher) + pDispatcher->Lock(false); } break; default: |