Hi, all!

I believe I found the cause of fdo#49859 "FORMATTING, UI: numbering
alignment or
indentation is not applied in Impress"

When the "Position" tab is deactivated,
SvxNumPositionTabPage::DeactivatePage()
is called. This call serves two purposes:

1: To check whether the Tab Page may be deactivated (answer: sal_True)
2: To retrieve the user input from this Tab Page

The Position tab contains two MetricFields: aDistBorderMF and aIndentMF. The
processing of input in these fields is triggered when they lose focus, by:

    SvxNumPositionTabPage::DistanceHdl_Impl()

When either aDistBorderMF or aIndentMF has focus when the Position tab is
deactivated, it faithfully triggers a call to DistanceHdl_Impl(). But this
happens AFTER the call to DeactivatePage(). Therefore, the user input
retrieved from DeactivatePage() doesn't reflect the last changes made
in aDistBorderMF or aIndentMF.

I propose an addition to DeactivatePage():

int  SvxNumPositionTabPage::DeactivatePage(SfxItemSet *_pSet)
{
    if(_pSet)
    {
        if(aDistBorderMF.IsEnabled())
            DistanceHdl_Impl(&aDistBorderMF);
        DistanceHdl_Impl(&aIndentMF);
        FillItemSet(*_pSet);
    }
    return sal_True;
}

Question:

Ideally, I would wrap the DistanceHdl_Impl() calls in ..MF.HasFocus() checks
to prevent unnecessary calls:

        if(aDistBorderMF.HasFocus() && aDistBorderMF.IsEnabled())
            DistanceHdl_Impl(&aDistBorderMF);
        if(aIndentMF.HasFocus())
            DistanceHdl_Impl(&aIndentMF);
        FillItemSet(*_pSet);

But both aDistBorderMF.HasFocus() and aIndentMF.HasFocus() always seem to
return
false! Is this intentional, or a bug?
_______________________________________________
LibreOffice mailing list
LibreOffice@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/libreoffice

Reply via email to