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>
diff --git a/cui/source/options/treeopt.cxx b/cui/source/options/treeopt.cxx
index 0a2aa20..435fd0a 100644
--- a/cui/source/options/treeopt.cxx
+++ b/cui/source/options/treeopt.cxx
@@ -696,8 +696,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 27f756b..932a032 100644
--- a/include/svtools/restartdialog.hxx
+++ b/include/svtools/restartdialog.hxx
@@ -63,8 +63,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 460267c..4ec3356 100644
--- a/svtools/source/dialogs/restartdialog.cxx
+++ b/svtools/source/dialogs/restartdialog.cxx
@@ -93,18 +93,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: */