include/svtools/restartdialog.hxx        |    5 ++-
 svtools/source/dialogs/restartdialog.cxx |    3 ++
 svtools/uiconfig/ui/restartdialog.ui     |   15 ++++++++++
 sw/source/uibase/app/apphdl.cxx          |   45 ++++++++++++++++++++++++++++++-
 4 files changed, 66 insertions(+), 2 deletions(-)

New commits:
commit 76c61ced4eaa5f69b948dca7537028eaa88225b3
Author: Bjoern Michaelsen <bjoern.michael...@canonical.com>
Date:   Tue May 19 13:58:13 2015 +0200

    check for and handle missing base in mail merge (related: fdo#33266)
    
    Change-Id: I3e362a873c28026cbecf005c07def1295aa920e0

diff --git a/include/svtools/restartdialog.hxx 
b/include/svtools/restartdialog.hxx
index 48aa5b2..bede9ed 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 1e99d16..7bef797 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 0782ff4..78e4d7d 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 cccc8b7..9b32ae7 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!" );
_______________________________________________
Libreoffice-commits mailing list
libreoffice-comm...@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/libreoffice-commits

Reply via email to