summaryrefslogtreecommitdiffstats
path: root/cui
diff options
context:
space:
mode:
authorSeth Chaiklin <sdc.blanco@youmail.dk>2020-01-21 16:38:25 +0100
committerCaolán McNamara <caolanm@redhat.com>2020-01-28 22:23:31 +0100
commitdfbf810ce521f1342dc1f13a6815762c2d7359ce (patch)
treebe29c2bb7e867efc620efedaffa018d3531d1b6d /cui
parentBreeze Dark: Fix for invisible icons (tdf#130205) (diff)
downloadcore-dfbf810ce521f1342dc1f13a6815762c2d7359ce.tar.gz
core-dfbf810ce521f1342dc1f13a6815762c2d7359ce.zip
tdf#127112 repair "sticky" levels in Customize numbering style dialog
Change-Id: Ifa841e7b63b28d6e0f84f5cd6b1800481b36425b Reviewed-on: https://gerrit.libreoffice.org/c/core/+/87645 Tested-by: Jenkins Reviewed-by: Caolán McNamara <caolanm@redhat.com>
Diffstat (limited to 'cui')
-rw-r--r--cui/source/inc/numpages.hxx3
-rw-r--r--cui/source/tabpages/numpages.cxx29
2 files changed, 27 insertions, 5 deletions
diff --git a/cui/source/inc/numpages.hxx b/cui/source/inc/numpages.hxx
index 56131e25c841..d03f44a868e2 100644
--- a/cui/source/inc/numpages.hxx
+++ b/cui/source/inc/numpages.hxx
@@ -203,6 +203,8 @@ class SvxNumOptionsTabPage : public SfxTabPage
Size aInitSize[SVX_MAX_NUM];
+ ImplSVEvent* m_pLevelHdlEvent;
+
bool bLastWidthModified : 1;
bool bModified : 1;
bool bPreset : 1;
@@ -262,6 +264,7 @@ class SvxNumOptionsTabPage : public SfxTabPage
DECL_LINK(NumberTypeSelectHdl_Impl, weld::ComboBox&, void);
DECL_LINK(LevelHdl_Impl, weld::TreeView&, void);
+ DECL_LINK(LevelHdl, void *, void);
DECL_LINK(PopupActivateHdl_Impl, weld::ToggleButton&, void);
DECL_LINK(GraphicHdl_Impl, const OString&, void);
DECL_LINK(BulletHdl_Impl, weld::Button&, void);
diff --git a/cui/source/tabpages/numpages.cxx b/cui/source/tabpages/numpages.cxx
index 03c431cfdd9e..fdbeb6f7cb4b 100644
--- a/cui/source/tabpages/numpages.cxx
+++ b/cui/source/tabpages/numpages.cxx
@@ -1014,6 +1014,7 @@ IMPL_LINK_NOARG(SvxBitmapPickTabPage, ClickAddBrowseHdl_Impl, weld::Button&, voi
SvxNumOptionsTabPage::SvxNumOptionsTabPage(weld::Container* pPage, weld::DialogController* pController,
const SfxItemSet& rSet)
: SfxTabPage(pPage, pController, "cui/ui/numberingoptionspage.ui", "NumberingOptionsPage", &rSet)
+ , m_pLevelHdlEvent(nullptr)
, bLastWidthModified(false)
, bModified(false)
, bPreset(false)
@@ -1110,6 +1111,11 @@ SvxNumOptionsTabPage::~SvxNumOptionsTabPage()
m_xBulColLB.reset();
pActNum.reset();
pSaveNum.reset();
+ if (m_pLevelHdlEvent)
+ {
+ Application::RemoveUserEvent(m_pLevelHdlEvent);
+ m_pLevelHdlEvent = nullptr;
+ }
}
void SvxNumOptionsTabPage::SetMetric(FieldUnit eMetric)
@@ -1152,6 +1158,7 @@ void SvxNumOptionsTabPage::ActivatePage(const SfxItemSet& rSet)
{
nActNumLvl = nTmpNumLvl;
sal_uInt16 nMask = 1;
+ m_xLevelLB->unselect_all();
if (nActNumLvl == SAL_MAX_UINT16)
m_xLevelLB->select(pActNum->GetLevelCount());
if(nActNumLvl != SAL_MAX_UINT16)
@@ -1547,17 +1554,29 @@ void SvxNumOptionsTabPage::SwitchNumberType( sal_uInt8 nType )
m_xOrientLB->set_sensitive(bEnableBitmap);
}
-IMPL_LINK(SvxNumOptionsTabPage, LevelHdl_Impl, weld::TreeView&, rBox, void)
+IMPL_LINK_NOARG(SvxNumOptionsTabPage, LevelHdl_Impl, weld::TreeView&, void)
{
+ if (m_pLevelHdlEvent)
+ return;
+ // tdf#127112 (borrowing tdf#127120 solution) multiselection may be implemented by deselect follow by select so
+ // fire off the handler to happen on next event loop and only process the
+ // final state
+ m_pLevelHdlEvent = Application::PostUserEvent(LINK(this, SvxNumOptionsTabPage, LevelHdl));
+}
+
+IMPL_LINK_NOARG(SvxNumOptionsTabPage, LevelHdl, void*, void)
+{
+ m_pLevelHdlEvent = nullptr;
+
sal_uInt16 nSaveNumLvl = nActNumLvl;
nActNumLvl = 0;
- auto aSelectedRows = rBox.get_selected_rows();
+ std::vector<int> aSelectedRows = m_xLevelLB->get_selected_rows();
if (std::find(aSelectedRows.begin(), aSelectedRows.end(), pActNum->GetLevelCount()) != aSelectedRows.end() &&
(aSelectedRows.size() == 1 || nSaveNumLvl != 0xffff))
{
nActNumLvl = 0xFFFF;
for( sal_uInt16 i = 0; i < pActNum->GetLevelCount(); i++ )
- rBox.unselect(i);
+ m_xLevelLB->unselect(i);
}
else if (!aSelectedRows.empty())
{
@@ -1568,7 +1587,7 @@ IMPL_LINK(SvxNumOptionsTabPage, LevelHdl_Impl, weld::TreeView&, rBox, void)
nActNumLvl |= nMask;
nMask <<= 1;
}
- rBox.unselect(pActNum->GetLevelCount());
+ m_xLevelLB->unselect(pActNum->GetLevelCount());
}
else
{
@@ -1578,7 +1597,7 @@ IMPL_LINK(SvxNumOptionsTabPage, LevelHdl_Impl, weld::TreeView&, rBox, void)
{
if(nActNumLvl & nMask)
{
- rBox.select(i);
+ m_xLevelLB->select(i);
break;
}
nMask <<=1;