diff options
author | Caolán McNamara <caolanm@redhat.com> | 2020-11-06 11:47:50 +0000 |
---|---|---|
committer | Caolán McNamara <caolanm@redhat.com> | 2020-11-06 16:42:05 +0100 |
commit | 427d1355fd909b12c71d82e504cc200db6e55aa5 (patch) | |
tree | 65b1d13f8d7018155f85c582b407b4b95aa7ed49 /sw/source/uibase/uiview/viewdraw.cxx | |
parent | e5721d002f7bb2edd43aebc58341574b4ec03252 (diff) |
disentangle writer's SID_FM_CONTROL_IDENTIFIER handling
a) make m_nFormSfxId simply follow the slotid, like its sibling m_nDrawSfxId
b) move the previously selected form object into a variable of its own
as m_eFormObjKind instead of ~abusing m_nFormSfxId to do that
c) pass which form object a ConstFormControl creates as an explicit ctor arg
instead of providing that information by overwriting the slotid that
its ::Activate gets passed
making it follow the equivalent calc pattern and separating these very
different slot ids and object identifiers
In testing, with the form controls toolbar, clicking on a toolbaritem
toggles it on, and drawing in writer gives the expected control via
ConstFormControl ctor, and clicking the same toolbaritem toggles it off
hitting the expected SID_FM_LEAVE_CREATE case.
Change-Id: I514f6adc38f706c82f0268abf5c5e73cef5b902c
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/105405
Tested-by: Jenkins
Reviewed-by: Caolán McNamara <caolanm@redhat.com>
Diffstat (limited to 'sw/source/uibase/uiview/viewdraw.cxx')
-rw-r--r-- | sw/source/uibase/uiview/viewdraw.cxx | 25 |
1 files changed, 13 insertions, 12 deletions
diff --git a/sw/source/uibase/uiview/viewdraw.cxx b/sw/source/uibase/uiview/viewdraw.cxx index 85f9082b977f..7a8cacfaad41 100644 --- a/sw/source/uibase/uiview/viewdraw.cxx +++ b/sw/source/uibase/uiview/viewdraw.cxx @@ -81,21 +81,24 @@ void SwView::ExecDraw(SfxRequest& rReq) if(pArgs && SfxItemState::SET == pArgs->GetItemState(GetPool().GetWhich(nSlotId), false, &pItem)) pStringItem = dynamic_cast< const SfxStringItem*>(pItem); + sal_uInt16 eNewFormObjKind = 0; + if (nSlotId == SID_FM_CREATE_CONTROL) + { + const SfxUInt16Item* pIdentifierItem = rReq.GetArg<SfxUInt16Item>(SID_FM_CONTROL_IDENTIFIER); + if (pIdentifierItem) + eNewFormObjKind = pIdentifierItem->GetValue(); + } + if (nSlotId == SID_OBJECT_SELECT && m_nFormSfxId == nSlotId) { bDeselect = true; } else if (nSlotId == SID_FM_CREATE_CONTROL) { - const SfxUInt16Item* pIdentifierItem = rReq.GetArg<SfxUInt16Item>(SID_FM_CONTROL_IDENTIFIER); - if( pIdentifierItem ) + if (eNewFormObjKind == m_eFormObjKind || eNewFormObjKind == 0) { - sal_uInt16 nNewId = pIdentifierItem->GetValue(); - if (nNewId == m_nFormSfxId) - { - bDeselect = true; - GetViewFrame()->GetDispatcher()->Execute(SID_FM_LEAVE_CREATE); // Button should popping out - } + bDeselect = true; + GetViewFrame()->GetDispatcher()->Execute(SID_FM_LEAVE_CREATE); // Button should popping out } } else if (nSlotId == SID_FM_CREATE_FIELDCONTROL) @@ -279,11 +282,9 @@ void SwView::ExecDraw(SfxRequest& rReq) case SID_FM_CREATE_CONTROL: { - const SfxUInt16Item* pIdentifierItem = rReq.GetArg<SfxUInt16Item>(SID_FM_CONTROL_IDENTIFIER); - if( pIdentifierItem ) - nSlotId = pIdentifierItem->GetValue(); - pFuncPtr.reset( new ConstFormControl(m_pWrtShell.get(), m_pEditWin, this) ); + pFuncPtr.reset(new ConstFormControl(m_pWrtShell.get(), m_pEditWin, this, eNewFormObjKind)); m_nFormSfxId = nSlotId; + m_eFormObjKind = eNewFormObjKind; } break; |