have just the one handler for ok/apply options
'apply' is only really working the first time it is pressed in a page, I want
to be able to apply to change e.g. notebookbar icon size and then change that
again and apply and get the expected display size
Change-Id: I7f051ad4063f0e99f822cc06fbe4a0ab49588fbd
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/105020
Tested-by: Jenkins
Reviewed-by: Caolán McNamara <caolanm@redhat.com>
diff --git a/cui/source/inc/treeopt.hxx b/cui/source/inc/treeopt.hxx
index 4c7bfe8..eb4b935 100644
--- a/cui/source/inc/treeopt.hxx
+++ b/cui/source/inc/treeopt.hxx
@@ -161,8 +161,8 @@ private:
DECL_LINK(ShowPageHdl_Impl, weld::TreeView&, void);
DECL_LINK(BackHdl_Impl, weld::Button&, void);
DECL_LINK(ApplyHdl_Impl, weld::Button&, void);
DECL_LINK(OKHdl_Impl, weld::Button&, void);
DECL_LINK(HelpHdl_Impl, weld::Widget&, bool);
void ResetCurrentPageFromConfig();
void SelectHdl_Impl();
virtual short run() override;
diff --git a/cui/source/options/treeopt.cxx b/cui/source/options/treeopt.cxx
index 7b53723..d425005 100644
--- a/cui/source/options/treeopt.cxx
+++ b/cui/source/options/treeopt.cxx
@@ -620,7 +620,7 @@ IMPL_LINK_NOARG(OfaTreeOptionsDialog, ShowPageHdl_Impl, weld::TreeView&, void)
SelectHdl_Impl();
}
IMPL_LINK_NOARG(OfaTreeOptionsDialog, BackHdl_Impl, weld::Button&, void)
void OfaTreeOptionsDialog::ResetCurrentPageFromConfig()
{
if (!(xCurrentPageEntry && xTreeLB->get_iter_depth(*xCurrentPageEntry)))
return;
@@ -638,6 +638,11 @@ IMPL_LINK_NOARG(OfaTreeOptionsDialog, BackHdl_Impl, weld::Button&, void)
pPageInfo->m_xExtPage->ResetPage();
}
IMPL_LINK_NOARG(OfaTreeOptionsDialog, BackHdl_Impl, weld::Button&, void)
{
ResetCurrentPageFromConfig();
}
void OfaTreeOptionsDialog::ApplyOptions()
{
std::unique_ptr<weld::TreeIter> xEntry = xTreeLB->make_iterator();
@@ -671,19 +676,6 @@ void OfaTreeOptionsDialog::ApplyOptions()
}
}
IMPL_LINK_NOARG(OfaTreeOptionsDialog, ApplyHdl_Impl, weld::Button&, void)
{
ApplyOptions();
if ( bNeedsRestart )
{
SolarMutexGuard aGuard;
if (svtools::executeRestartDialog(comphelper::getProcessComponentContext(),
m_xDialog.get(), eRestartReason))
m_xDialog->response(RET_OK);
}
}
IMPL_LINK_NOARG(OfaTreeOptionsDialog, HelpHdl_Impl, weld::Widget&, bool)
{
Help* pHelp = Application::GetHelp();
@@ -700,8 +692,10 @@ IMPL_LINK_NOARG(OfaTreeOptionsDialog, HelpHdl_Impl, weld::Widget&, bool)
return true;
}
IMPL_LINK_NOARG(OfaTreeOptionsDialog, OKHdl_Impl, weld::Button&, void)
IMPL_LINK(OfaTreeOptionsDialog, ApplyHdl_Impl, weld::Button&, rButton, void)
{
bool bOkPressed = &rButton == xOkPB.get();
if (xCurrentPageEntry && xTreeLB->get_iter_depth(*xCurrentPageEntry))
{
OptionsPageInfo* pPageInfo = reinterpret_cast<OptionsPageInfo*>(xTreeLB->get_id(*xCurrentPageEntry).toInt64());
@@ -717,17 +711,30 @@ IMPL_LINK_NOARG(OfaTreeOptionsDialog, OKHdl_Impl, weld::Button&, void)
DeactivateRC nLeave = pPageInfo->m_xPage->DeactivatePage(pGroupInfo->m_pOutItemSet.get());
if ( nLeave == DeactivateRC::KeepPage )
{
// the page mustn't be left
xTreeLB->select(*xCurrentPageEntry);
return;
// the page mustn't be left, so return early
assert(xTreeLB->is_selected(*xCurrentPageEntry)); // presumably this must be true here
if (bOkPressed)
return;
}
}
pPageInfo->m_xPage->set_visible(false);
}
}
ApplyOptions();
m_xDialog->response(RET_OK);
ApplyItemSets();
utl::ConfigManager::storeConfigItems();
if (bOkPressed)
m_xDialog->response(RET_OK);
else
{
// for the Apply case, now that the settings are saved to config,
// reload the current page so it knows what the config now states
ResetCurrentPageFromConfig();
// reselect it to undo possible DeactivatePage above
xCurrentPageEntry.reset();
SelectHdl_Impl();
}
if ( bNeedsRestart )
{
@@ -735,9 +742,6 @@ IMPL_LINK_NOARG(OfaTreeOptionsDialog, OKHdl_Impl, weld::Button&, void)
::svtools::executeRestartDialog(comphelper::getProcessComponentContext(),
m_pParent, eRestartReason);
}
ApplyItemSets();
utl::ConfigManager::storeConfigItems();
}
void OfaTreeOptionsDialog::ApplyItemSets()
@@ -767,7 +771,7 @@ void OfaTreeOptionsDialog::InitTreeAndHandler()
xTreeLB->connect_changed( LINK( this, OfaTreeOptionsDialog, ShowPageHdl_Impl ) );
xBackPB->connect_clicked( LINK( this, OfaTreeOptionsDialog, BackHdl_Impl ) );
xApplyPB->connect_clicked( LINK( this, OfaTreeOptionsDialog, ApplyHdl_Impl ) );
xOkPB->connect_clicked( LINK( this, OfaTreeOptionsDialog, OKHdl_Impl ) );
xOkPB->connect_clicked( LINK( this, OfaTreeOptionsDialog, ApplyHdl_Impl ) );
m_xDialog->connect_help( LINK( this, OfaTreeOptionsDialog, HelpHdl_Impl ) );
}
@@ -899,7 +903,8 @@ void OfaTreeOptionsDialog::SelectHdl_Impl()
if ( nLeave == DeactivateRC::KeepPage )
{
// we cannot leave this page
// we cannot leave this page, this is may be from a user clicking a different entry
// in the tree so reselect the current page
xTreeLB->select(*xCurrentPageEntry);
return;
}