tdf#121180: close Options dialog when restart is confirmed

Change-Id: Ieb6e62ca83921abed6b6432d70c6717dadfaaa34
Reviewed-on: https://gerrit.libreoffice.org/65090
Reviewed-by: Caolán McNamara <caolanm@redhat.com>
Tested-by: Jenkins
Reviewed-by: Mike Kaganski <mike.kaganski@collabora.com>
(cherry picked from commit 0fa14d58457e9418ff756a0efd66e365c4403a67)
Reviewed-on: https://gerrit.libreoffice.org/65184
Reviewed-by: Xisco Faulí <xiscofauli@libreoffice.org>
diff --git a/cui/source/options/treeopt.cxx b/cui/source/options/treeopt.cxx
index a0ced4f..cebb553 100644
--- a/cui/source/options/treeopt.cxx
+++ b/cui/source/options/treeopt.cxx
@@ -697,8 +697,9 @@ IMPL_LINK_NOARG(OfaTreeOptionsDialog, ApplyHdl_Impl, Button*, void)
    if ( bNeedsRestart )
    {
        SolarMutexGuard aGuard;
        ::svtools::executeRestartDialog(comphelper::getProcessComponentContext(),
                                        GetFrameWeld(), eRestartReason);
        if (svtools::executeRestartDialog(comphelper::getProcessComponentContext(),
                                        GetFrameWeld(), eRestartReason))
            EndDialog(RET_OK);
    }
}

diff --git a/include/svtools/restartdialog.hxx b/include/svtools/restartdialog.hxx
index 750542a..f29366c 100644
--- a/include/svtools/restartdialog.hxx
+++ b/include/svtools/restartdialog.hxx
@@ -58,8 +58,8 @@ enum RestartReason {
    RESTART_REASON_NONE
};

// Must be called with the solar mutex locked:
SVT_DLLPUBLIC void executeRestartDialog(
// Must be called with the solar mutex locked; returns if restart was initiated:
SVT_DLLPUBLIC bool executeRestartDialog(
    css::uno::Reference< css::uno::XComponentContext > const & context,
    weld::Window* parent, RestartReason reason);

diff --git a/svtools/source/dialogs/restartdialog.cxx b/svtools/source/dialogs/restartdialog.cxx
index 1de2e09..079cc5e 100644
--- a/svtools/source/dialogs/restartdialog.cxx
+++ b/svtools/source/dialogs/restartdialog.cxx
@@ -90,18 +90,20 @@ IMPL_LINK_NOARG(RestartDialog, hdlNo, weld::Button&, void)

}

void svtools::executeRestartDialog(
bool svtools::executeRestartDialog(
    css::uno::Reference< css::uno::XComponentContext > const & context,
    weld::Window* parent, RestartReason reason)
{
    auto xRestartManager = css::task::OfficeRestartManager::get(context);
    if (xRestartManager->isRestartRequested(false))
        return; // don't try to show another dialog when restart is already in progress
        return true; // don't try to show another dialog when restart is already in progress
    RestartDialog aDlg(parent, reason);
    if (aDlg.run()) {
        xRestartManager->requestRestart(
            css::uno::Reference< css::task::XInteractionHandler >());
        return true;
    }
    return false;
}

/* vim:set shiftwidth=4 softtabstop=4 expandtab: */