On Wed, Mar 27, 2013 at 09:46:44AM +0000, mcmurchy1917-libreoffice@yahoo.co.uk wrote:
In the bug report it was confirmed that a macro assigned to either
the Before Unloading or When Unloading events of a dataform are not
called when the form document is closed.
However, when editing a form and the "Design Mode" option is toggled
the events are called.
I completely missed that in my first reading of your mail:
The *same* event (namely "Before Unloading" on the FormData) is:
1) *not* called when closing the form document
2) *called* when switching normal mode to design mode
So we need to see *what* codepath calls it in case "2)" (with the
msgbox / ctrl-c in gdb trick I described). That's already more or less
done, with Noel's quote of:
FmFormView::ChangeDesignMode
258 // --- 4. load resp. unload the forms
259 FmFormPage* pCurPage = GetCurPage();
260 if ( pCurPage )
261 {
262 if ( pFormShell && pFormShell->GetImpl() )
263 pFormShell->GetImpl()->loadForms( pCurPage, ( bDesign ? FORMS_UNLOAD : FORMS_LOAD
) );
264 }
The operative call seems to be:
pFormShell->GetImpl()->loadForms(pCurPage, FORMS_UNLOAD)
And then, we need to find where we need to call
pFormShell->GetImpl()->loadForms(pCurPage, FORMS_UNLOAD)
in the case "1)". My idea for that is to see what triggers the *form*
*document* "before close" event (there does not seem to be a "before
unload" event for it). That codepath should call
pFormShell->GetImpl()->loadForms(pCurPage, FORMS_UNLOAD)
somewhere
I've taken a look, and this the relevant part of the backtrace:
#36 0x00007f745fce2226 in SfxObjectShell::PrepareClose
(this=0x3d2a1a0, bUI=<optimized out>,
bForBrowsing=<optimized out>)
at
/home/master/src/libreoffice/workdirs/libreoffice-4.0/sfx2/source/doc/objxtor.cxx:596
#37 0x00007f742c1e82a7 in SwDocShell::PrepareClose (this=0x3d2a1a0,
bUI=<optimized out>,
bForBrowsing=<optimized out>)
at
/home/master/src/libreoffice/workdirs/libreoffice-4.0/sw/source/ui/app/docsh2.cxx:317
#38 0x00007f745fd87500 in SfxBaseController::suspend (this=0x3e89980,
bSuspend=<optimized out>)
at
/home/master/src/libreoffice/workdirs/libreoffice-4.0/sfx2/source/view/sfxbasecontroller.cxx:650
#39 0x00007f743c5a1955 in dbaccess::ODocumentDefinition::prepareClose
(this=0x31dfe30)
at
/home/master/src/libreoffice/workdirs/libreoffice-4.0/dbaccess/source/core/dataaccess/documentdefinition.cxx:2058
#40 0x00007f743c5b4c74 in dbaccess::OInterceptor::OnDispatch
(this=0x2ca0990, _pDispatcher=0x3d680f0)
at
/home/master/src/libreoffice/workdirs/libreoffice-4.0/dbaccess/source/core/dataaccess/intercept.cxx:192
But frankly, at this point I'm not sure how to get the "pFormShell"
and "pCurPage" somewhere in this call stack; I think we need to do
that in SwDocShell::PrepareClose or SfxObjectShell::PrepareClose
somehow.
Mcmurchy1917, I've also seen your email looking at the
"m_aLoadListeners.notifyEach( &XLoadListener::unloading, aEvt );"
That looks like a promising avenue, too.
--
Lionel
Context
Privacy Policy |
Impressum (Legal Info) |
Copyright information: Unless otherwise specified, all text and images
on this website are licensed under the
Creative Commons Attribution-Share Alike 3.0 License.
This does not include the source code of LibreOffice, which is
licensed under the Mozilla Public License (
MPLv2).
"LibreOffice" and "The Document Foundation" are
registered trademarks of their corresponding registered owners or are
in actual use as trademarks in one or more countries. Their respective
logos and icons are also subject to international copyright laws. Use
thereof is explained in our
trademark policy.