sw/source/ui/dbui/dbinsdlg.cxx | 35 +++++++++++++++++++++++++++++------ 1 file changed, 29 insertions(+), 6 deletions(-)
New commits: commit 2a439e641890d81a6bb960ccc27135c040e3e991 Author: Michael Stahl <mst...@redhat.com> Date: Tue Sep 20 11:25:01 2016 +0200 tdf#101164 sw: Insert Database Columns dialog: expect selection ... as bookmarks, not raw row indexes. Bookmarks is what FmXGridPeer::getSelection() / FmGridControl::getSelectionBookmarks() always produce, and it's unclear to me if there even is a case where something other than a bookmark ends up pasted into Writer. The only case where dbaccess creates a selection that doesn't contain bookmarks is in SbaGridControl::implTransferSelectedRows() if no rows are selected but i haven't figured out how to reach that state. (regression in OOo 3.3) Change-Id: Ib45787bc002447338df775102790843f2cb1dd3b (cherry picked from commit bb0e9dd57e7ca0f346ac1102139edaec4e6b3790) Reviewed-on: https://gerrit.libreoffice.org/29090 Tested-by: Jenkins <c...@libreoffice.org> Reviewed-by: Lionel Elie Mamane <lio...@mamane.lu> diff --git a/sw/source/ui/dbui/dbinsdlg.cxx b/sw/source/ui/dbui/dbinsdlg.cxx index 2ccd096..c487cb1 100644 --- a/sw/source/ui/dbui/dbinsdlg.cxx +++ b/sw/source/ui/dbui/dbinsdlg.cxx @@ -28,6 +28,7 @@ #include <com/sun/star/sdbc/XRow.hpp> #include <com/sun/star/sdbcx/XTablesSupplier.hpp> #include <com/sun/star/sdbcx/XColumnsSupplier.hpp> +#include <com/sun/star/sdbcx/XRowLocate.hpp> #include <com/sun/star/sdb/XQueriesSupplier.hpp> #include <com/sun/star/sdb/CommandType.hpp> #include <com/sun/star/sdb/XColumn.hpp> @@ -989,6 +990,14 @@ void SwInsertDBColAutoPilot::DataToDoc( const Sequence<Any>& rSelection, Reference< XColumnsSupplier > xColsSupp( xResultSet, UNO_QUERY ); Reference <XNameAccess> xCols = xColsSupp->getColumns(); + static bool isSelectionBookmarks = true; // TODO is this always true here? + uno::Reference<sdbcx::XRowLocate> xRowLocate; + if (isSelectionBookmarks) + { + xRowLocate.set(xResultSet, uno::UNO_QUERY); + assert(xRowLocate.is()); + } + do{ // middle checked loop!! if( bAsTable ) // Daten als Tabelle einfuegen { @@ -1066,9 +1075,16 @@ void SwInsertDBColAutoPilot::DataToDoc( const Sequence<Any>& rSelection, { if(pSelection) { - sal_Int32 nPos = 0; - pSelection[i] >>= nPos; - bBreak = !xResultSet->absolute(nPos); + if (isSelectionBookmarks) + { + bBreak = !xRowLocate->moveToBookmark(pSelection[i]); + } + else + { + sal_Int32 nPos = 0; + pSelection[i] >>= nPos; + bBreak = !xResultSet->absolute(nPos); + } } else if(!i) bBreak = !xResultSet->first(); @@ -1259,9 +1275,16 @@ void SwInsertDBColAutoPilot::DataToDoc( const Sequence<Any>& rSelection, { if(pSelection) { - sal_Int32 nPos = 0; - pSelection[i] >>= nPos; - bBreak = !xResultSet->absolute(nPos); + if (isSelectionBookmarks) + { + bBreak = !xRowLocate->moveToBookmark(pSelection[i]); + } + else + { + sal_Int32 nPos = 0; + pSelection[i] >>= nPos; + bBreak = !xResultSet->absolute(nPos); + } } else if(!i) bBreak = !xResultSet->first(); _______________________________________________ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits