From bb3c789afca1fe82ea1a5d4be83cc70de4f07065 Mon Sep 17 00:00:00 2001 From: Caolán McNamara Date: Tue, 27 Nov 2018 15:13:33 +0000 Subject: Resolves: tdf#121743 set parent for dialog MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Change-Id: I174ec605f40e7cafbcb44e492941dfc36a4df3f2 Reviewed-on: https://gerrit.libreoffice.org/64120 Tested-by: Jenkins Reviewed-by: Caolán McNamara Tested-by: Caolán McNamara (cherry picked from commit 92c34111dd8095b97a3761ab10c3ac4a3c191310) Reviewed-on: https://gerrit.libreoffice.org/64128 --- .../libreoffice/report/SDBCReportDataFactory.java | 30 +++++++++++++++++++++- 1 file changed, 29 insertions(+), 1 deletion(-) diff --git a/reportbuilder/java/org/libreoffice/report/SDBCReportDataFactory.java b/reportbuilder/java/org/libreoffice/report/SDBCReportDataFactory.java index 26eb4950e248..463addc63e71 100644 --- a/reportbuilder/java/org/libreoffice/report/SDBCReportDataFactory.java +++ b/reportbuilder/java/org/libreoffice/report/SDBCReportDataFactory.java @@ -17,17 +17,24 @@ */ package org.libreoffice.report; +import com.sun.star.awt.XWindow; +import com.sun.star.beans.NamedValue; import com.sun.star.beans.PropertyVetoException; import com.sun.star.beans.UnknownPropertyException; import com.sun.star.beans.XPropertySet; import com.sun.star.container.NoSuchElementException; +import com.sun.star.container.XChild; import com.sun.star.container.XIndexAccess; import com.sun.star.container.XNameAccess; +import com.sun.star.frame.XController; +import com.sun.star.frame.XFrame; +import com.sun.star.frame.XModel; import com.sun.star.lang.IllegalArgumentException; import com.sun.star.lang.IndexOutOfBoundsException; import com.sun.star.lang.WrappedTargetException; import com.sun.star.sdb.CommandType; import com.sun.star.sdb.XCompletedExecution; +import com.sun.star.sdb.XDocumentDataSource; import com.sun.star.sdb.XParametersSupplier; import com.sun.star.sdb.XQueriesSupplier; import com.sun.star.sdb.XSingleSelectQueryComposer; @@ -159,6 +166,26 @@ public class SDBCReportDataFactory implements DataSourceFactory m_cmpCtx = cmpCtx; } + public XWindow getParentWindow() + { + final XChild child = UnoRuntime.queryInterface(XChild.class, connection); + if (child == null) + return null; + final XDocumentDataSource docSource = UnoRuntime.queryInterface(XDocumentDataSource.class, child.getParent()); + if (docSource == null) + return null; + final XModel model = UnoRuntime.queryInterface(XModel.class, docSource.getDatabaseDocument()); + if (model == null) + return null; + final XController controller = model.getCurrentController(); + if (controller == null) + return null; + final XFrame frame = controller.getFrame(); + if (frame == null) + return null; + return frame.getContainerWindow(); + } + public DataSource queryData(final String command, final Map parameters) throws DataSourceException { try @@ -201,7 +228,8 @@ public class SDBCReportDataFactory implements DataSourceFactory final XCompletedExecution execute = UnoRuntime.queryInterface(XCompletedExecution.class, rowSet); if (rowSetCreated && execute != null && paramDef.parameterCount > 0) { - final XInteractionHandler handler = UnoRuntime.queryInterface(XInteractionHandler.class, m_cmpCtx.getServiceManager().createInstanceWithContext("com.sun.star.sdb.InteractionHandler", m_cmpCtx)); + final XWindow window = getParentWindow(); + final XInteractionHandler handler = UnoRuntime.queryInterface(XInteractionHandler.class, m_cmpCtx.getServiceManager().createInstanceWithArgumentsAndContext("com.sun.star.sdb.InteractionHandler", new Object[] { new NamedValue("Parent", window) }, m_cmpCtx)); execute.executeWithCompletion(handler); } else -- cgit v1.2.3