diff options
-rw-r--r-- | include/svtools/restartdialog.hxx | 5 | ||||
-rw-r--r-- | svtools/source/dialogs/restartdialog.cxx | 3 | ||||
-rw-r--r-- | svtools/uiconfig/ui/restartdialog.ui | 15 | ||||
-rw-r--r-- | sw/source/uibase/app/apphdl.cxx | 45 |
4 files changed, 66 insertions, 2 deletions
diff --git a/include/svtools/restartdialog.hxx b/include/svtools/restartdialog.hxx index 48aa5b2bcf3f..bede9ed58fbe 100644 --- a/include/svtools/restartdialog.hxx +++ b/include/svtools/restartdialog.hxx @@ -29,9 +29,12 @@ enum RestartReason { RESTART_REASON_PDF_AS_STANDARD_JOB_FORMAT, // For the modified default print job format to take effect, // %PRODUCTNAME must be restarted. - RESTART_REASON_BIBLIOGRAPHY_INSTALL + RESTART_REASON_BIBLIOGRAPHY_INSTALL, // "For the bibliography to work properly, // %PRODUCTNAME must be restarted." + RESTART_REASON_MAILMERGE_INSTALL + // "For the mail merge to work properly, + // %PRODUCTNAME must be restarted." }; // Must be called with the solar mutex locked: diff --git a/svtools/source/dialogs/restartdialog.cxx b/svtools/source/dialogs/restartdialog.cxx index 1e99d16c3d36..7bef79758c47 100644 --- a/svtools/source/dialogs/restartdialog.cxx +++ b/svtools/source/dialogs/restartdialog.cxx @@ -40,6 +40,9 @@ public: case svtools::RESTART_REASON_BIBLIOGRAPHY_INSTALL: get(reason_, "reason_bibliography_install"); break; + case svtools::RESTART_REASON_MAILMERGE_INSTALL: + get(reason_, "reason_mailmerge_install"); + break; default: assert(false); // this cannot happen } diff --git a/svtools/uiconfig/ui/restartdialog.ui b/svtools/uiconfig/ui/restartdialog.ui index 0782ff4a7987..78e4d7d3318d 100644 --- a/svtools/uiconfig/ui/restartdialog.ui +++ b/svtools/uiconfig/ui/restartdialog.ui @@ -106,6 +106,21 @@ </packing> </child> <child> + <object class="GtkLabel" id="reason_mailmerge_install"> + <property name="can_focus">False</property> + <property name="no_show_all">True</property> + <property name="xalign">0</property> + <property name="label" translatable="yes">For the mail merge to work properly, %PRODUCTNAME must be restarted.</property> + <property name="wrap">True</property> + <property name="max_width_chars">50</property> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">True</property> + <property name="position">2</property> + </packing> + </child> + <child> <object class="GtkLabel" id="label"> <property name="visible">True</property> <property name="can_focus">False</property> diff --git a/sw/source/uibase/app/apphdl.cxx b/sw/source/uibase/app/apphdl.cxx index cccc8b7bd8a0..9b32ae77e7d0 100644 --- a/sw/source/uibase/app/apphdl.cxx +++ b/sw/source/uibase/app/apphdl.cxx @@ -21,17 +21,19 @@ #include <hintids.hxx> +#include <comphelper/processfactory.hxx> #include <osl/diagnose.h> #include <tools/link.hxx> #include <svl/urihelper.hxx> #include <unotools/pathoptions.hxx> -#include <svtools/accessibilityoptions.hxx> #include <sfx2/dispatch.hxx> #include <sfx2/event.hxx> #include <sfx2/objitem.hxx> #include <svx/dataaccessdescriptor.hxx> #include <svl/srchitem.hxx> +#include <svtools/accessibilityoptions.hxx> #include <svtools/colorcfg.hxx> +#include <svtools/restartdialog.hxx> #include <svl/eitem.hxx> #include <svl/whiter.hxx> #include <svl/isethint.hxx> @@ -92,7 +94,9 @@ #include <com/sun/star/beans/XPropertyContainer.hpp> #include <com/sun/star/container/XChild.hpp> #include <com/sun/star/sdbc/XConnection.hpp> +#include <com/sun/star/sdb/TextConnectionSettings.hpp> #include <com/sun/star/sdbc/XDataSource.hpp> +#include <org/freedesktop/PackageKit/SyncDbusSessionHelper.hpp> #include <swabstdlg.hxx> #include <vcl/status.hxx> @@ -115,6 +119,24 @@ using namespace ::com::sun::star; #include <shells.hrc> +namespace +{ + static bool lcl_hasAllComponentsAvailable() + { + try + { + return css::sdb::TextConnectionSettings::create(comphelper::getProcessComponentContext()).is(); + } + catch (css::uno::Exception & e) + { + SAL_INFO( + "sw.core", + "assuming Base to be missing; caught " << e.Message); + return false; + } + } +} + SFX_IMPL_INTERFACE(SwModule, SfxModule) void SwModule::InitInterface_Impl() @@ -278,6 +300,27 @@ SwMailMergeWizardExecutor::~SwMailMergeWizardExecutor() void SwMailMergeWizardExecutor::ExecuteMailMergeWizard( const SfxItemSet * pArgs ) { + if(!lcl_hasAllComponentsAvailable()) + { + try + { + using namespace org::freedesktop::PackageKit; + using namespace svtools; + css::uno::Reference< XSyncDbusSessionHelper > xSyncDbusSessionHelper(SyncDbusSessionHelper::create(comphelper::getProcessComponentContext())); + const css::uno::Sequence< OUString > vPackages{ "libreoffice-base" }; + OUString sInteraction; + xSyncDbusSessionHelper->InstallPackageNames(0, vPackages, sInteraction); + SolarMutexGuard aGuard; + executeRestartDialog(comphelper::getProcessComponentContext(), NULL, RESTART_REASON_MAILMERGE_INSTALL); + } + catch (const css::uno::Exception & e) + { + SAL_INFO( + "sw.core", + "trying to install LibreOffice Base, caught " << e.Message); + } + return; + } if ( m_pView ) { OSL_FAIL("SwMailMergeWizardExecutor::ExecuteMailMergeWizard: Already executing the wizard!" ); |