instsetoo_native/util/openoffice.lst.in | 2 sc/inc/types.hxx | 8 ++ sc/source/core/data/bcaslot.cxx | 36 +++++++++++-- sc/source/core/data/documen7.cxx | 2 sc/source/core/data/table3.cxx | 67 ++++++++++++++++++++++++- sc/source/core/inc/bcaslot.hxx | 6 +- sc/source/core/tool/token.cxx | 2 sd/source/ui/view/DocumentRenderer.cxx | 33 ++++++++++-- solenv/bin/modules/installer.pm | 2 solenv/bin/modules/installer/windows/msp.pm | 15 ++--- solenv/bin/modules/installer/windows/update.pm | 6 +- 11 files changed, 149 insertions(+), 30 deletions(-)
New commits: commit 84584cc237b2eb93f7684d8fcd063bb37e87b5fb Author: Eike Rathke <er...@redhat.com> Date: Thu Aug 14 23:36:47 2014 +0200 correct references after sort, fdo#79441 5c6ee09126631342939ae8766fe36083d8c011e3 introduced a different algorithm for reference handling during sort. Unfortunately that clashed with the SC_CLONECELL_ADJUST3DREL introduced a little earlier resulting in relative 3D references effectively being "adjusted" twice. Furthermore, in-sort-range range references to one row (or column) were not adapted to the move at all if the formula within the range listened only to ranges and not a single cell. Added collecting and adjusting area listeners for this. Last but not least, external (relative) references need to be treated the same as internal 3D references, making them point to the same location after the sort. (cherry picked from commit 69adec3ec051ff94f600ab899506ca9d645a8b56) Conflicts: sc/inc/types.hxx sc/source/core/data/bcaslot.cxx Plus necessary parts of 27182231acd3a0c9898a8dba78b76dc8a827b4c0 related to bcaslot changes. Change-Id: I492768b525f95f1c43d1c6e7a63a36cce093fa5a Reviewed-on: https://gerrit.libreoffice.org/10930 Reviewed-by: Kohei Yoshida <libreoff...@kohei.us> Tested-by: Kohei Yoshida <libreoff...@kohei.us> diff --git a/sc/inc/types.hxx b/sc/inc/types.hxx index 732ff19..5226463 100644 --- a/sc/inc/types.hxx +++ b/sc/inc/types.hxx @@ -100,6 +100,14 @@ struct RangeMatrix typedef boost::unordered_map<SCCOLROW,SCCOLROW> ColRowReorderMapType; +enum AreaOverlapType +{ + AreaInside, + AreaPartialOverlap, + OneRowInsideArea, + OneColumnInsideArea +}; + } #endif diff --git a/sc/source/core/data/bcaslot.cxx b/sc/source/core/data/bcaslot.cxx index 2dfc9a7..1eff597 100644 --- a/sc/source/core/data/bcaslot.cxx +++ b/sc/source/core/data/bcaslot.cxx @@ -446,7 +446,8 @@ void ScBroadcastAreaSlot::EraseArea( ScBroadcastAreas::iterator& rIter ) } } -void ScBroadcastAreaSlot::GetAllListeners( const ScRange& rRange, std::vector<sc::AreaListener>& rListeners ) +void ScBroadcastAreaSlot::GetAllListeners( + const ScRange& rRange, std::vector<sc::AreaListener>& rListeners, sc::AreaOverlapType eType ) { for (ScBroadcastAreas::const_iterator aIter( aBroadcastAreaTbl.begin()), aIterEnd( aBroadcastAreaTbl.end()); aIter != aIterEnd; ++aIter ) @@ -456,8 +457,32 @@ void ScBroadcastAreaSlot::GetAllListeners( const ScRange& rRange, std::vector<sc ScBroadcastArea* pArea = (*aIter).mpArea; const ScRange& rAreaRange = pArea->GetRange(); - if (!rRange.In(rAreaRange)) - continue; + + switch (eType) + { + case sc::AreaInside: + if (!rRange.In(rAreaRange)) + // The range needs to be fully inside specified range. + continue; + break; + case sc::AreaPartialOverlap: + if (!rRange.Intersects(rAreaRange) || rRange.In(rAreaRange)) + // The range needs to be only partially overlapping. + continue; + break; + case sc::OneRowInsideArea: + if (rAreaRange.aStart.Row() != rAreaRange.aEnd.Row() || !rRange.In(rAreaRange)) + // The range needs to be one single row and fully inside + // specified range. + continue; + break; + case sc::OneColumnInsideArea: + if (rAreaRange.aStart.Col() != rAreaRange.aEnd.Col() || !rRange.In(rAreaRange)) + // The range needs to be one single column and fully inside + // specified range. + continue; + break; + } SvtBroadcaster::ListenersType& rLst = pArea->GetBroadcaster().GetAllListeners(); SvtBroadcaster::ListenersType::iterator itLst = rLst.begin(), itLstEnd = rLst.end(); @@ -1000,7 +1025,8 @@ void ScBroadcastAreaSlotMachine::FinallyEraseAreas( ScBroadcastAreaSlot* pSlot ) maAreasToBeErased.swap( aCopy); } -std::vector<sc::AreaListener> ScBroadcastAreaSlotMachine::GetAllListeners( const ScRange& rRange ) +std::vector<sc::AreaListener> ScBroadcastAreaSlotMachine::GetAllListeners( + const ScRange& rRange, sc::AreaOverlapType eType ) { std::vector<sc::AreaListener> aRet; @@ -1017,7 +1043,7 @@ std::vector<sc::AreaListener> ScBroadcastAreaSlotMachine::GetAllListeners( const while ( nOff <= nEnd ) { ScBroadcastAreaSlot* p = *pp; - p->GetAllListeners(rRange, aRet); + p->GetAllListeners(rRange, aRet, eType); ComputeNextSlot( nOff, nBreak, pp, nStart, ppSlots, nRowBreak); } } diff --git a/sc/source/core/data/documen7.cxx b/sc/source/core/data/documen7.cxx index a960c5a..581da65 100644 --- a/sc/source/core/data/documen7.cxx +++ b/sc/source/core/data/documen7.cxx @@ -156,7 +156,7 @@ void ScDocument::BroadcastRefMoved( const sc::RefMovedHint& rHint ) const ScAddress& rDelta = rHint.getDelta(); // Get all area listeners that listens on the old range, and end their listening. - std::vector<sc::AreaListener> aAreaListeners = pBASM->GetAllListeners(rSrcRange); + std::vector<sc::AreaListener> aAreaListeners = pBASM->GetAllListeners(rSrcRange, sc::AreaInside); { std::vector<sc::AreaListener>::iterator it = aAreaListeners.begin(), itEnd = aAreaListeners.end(); for (; it != itEnd; ++it) diff --git a/sc/source/core/data/table3.cxx b/sc/source/core/data/table3.cxx index 3b63f7e..a719f85 100644 --- a/sc/source/core/data/table3.cxx +++ b/sc/source/core/data/table3.cxx @@ -62,6 +62,7 @@ #include <sharedformula.hxx> #include <refhint.hxx> #include <listenerquery.hxx> +#include <bcaslot.hxx> #include "svl/sharedstringpool.hxx" @@ -721,6 +722,21 @@ void ScTable::SortReorderByColumn( // Collect all listeners within sorted range ahead of time. std::vector<SvtListener*> aListeners; + + // Get all area listeners that listen on one column within the range and + // end their listening. + ScRange aMoveRange( nStart, nRow1, nTab, nLast, nRow2, nTab); + std::vector<sc::AreaListener> aAreaListeners = pDocument->GetBASM()->GetAllListeners( + aMoveRange, sc::OneColumnInsideArea); + { + std::vector<sc::AreaListener>::iterator it = aAreaListeners.begin(), itEnd = aAreaListeners.end(); + for (; it != itEnd; ++it) + { + pDocument->EndListeningArea(it->maArea, it->mpListener); + aListeners.push_back( it->mpListener); + } + } + for (SCCOL nCol = nStart; nCol <= nLast; ++nCol) aCol[nCol].CollectListeners(aListeners, nRow1, nRow2); @@ -732,6 +748,22 @@ void ScTable::SortReorderByColumn( ColReorderNotifier aFunc(aColMap, nTab, nRow1, nRow2); std::for_each(aListeners.begin(), aListeners.end(), aFunc); + // Re-start area listeners on the reordered columns. + { + std::vector<sc::AreaListener>::iterator it = aAreaListeners.begin(), itEnd = aAreaListeners.end(); + for (; it != itEnd; ++it) + { + ScRange aNewRange = it->maArea; + sc::ColRowReorderMapType::const_iterator itCol = aColMap.find( aNewRange.aStart.Col()); + if (itCol != aColMap.end()) + { + aNewRange.aStart.SetCol( itCol->second); + aNewRange.aEnd.SetCol( itCol->second); + } + pDocument->StartListeningArea(aNewRange, it->mpListener); + } + } + // Re-join formulas at row boundaries now that all the references have // been adjusted for column reordering. for (SCCOL nCol = nStart; nCol <= nLast; ++nCol) @@ -807,8 +839,7 @@ void ScTable::SortReorderByRow( assert(rCell.mpAttr); ScAddress aOldPos = rCell.maCell.mpFormula->aPos; - ScFormulaCell* pNew = rCell.maCell.mpFormula->Clone( - aCellPos, SC_CLONECELL_DEFAULT | SC_CLONECELL_ADJUST3DREL); + ScFormulaCell* pNew = rCell.maCell.mpFormula->Clone( aCellPos, SC_CLONECELL_DEFAULT); pNew->CopyAllBroadcasters(*rCell.maCell.mpFormula); pNew->GetCode()->AdjustReferenceOnMovedOrigin(aOldPos, aCellPos); @@ -948,6 +979,22 @@ void ScTable::SortReorderByRow( // Collect all listeners within sorted range ahead of time. std::vector<SvtListener*> aListeners; + + // Get all area listeners that listen on one row within the range and end + // their listening. + ScRange aMoveRange( nCol1, nRow1, nTab, nCol2, nRow2, nTab); + std::vector<sc::AreaListener> aAreaListeners = pDocument->GetBASM()->GetAllListeners( + aMoveRange, sc::OneRowInsideArea); + { + std::vector<sc::AreaListener>::iterator it = aAreaListeners.begin(), itEnd = aAreaListeners.end(); + for (; it != itEnd; ++it) + { + pDocument->EndListeningArea(it->maArea, it->mpListener); + aListeners.push_back( it->mpListener); + } + } + + // Collect listeners of cell broadcasters. for (SCCOL nCol = nCol1; nCol <= nCol2; ++nCol) aCol[nCol].CollectListeners(aListeners, nRow1, nRow2); @@ -980,6 +1027,22 @@ void ScTable::SortReorderByRow( RowReorderNotifier aFunc(aRowMap, nTab, nCol1, nCol2); std::for_each(aListeners.begin(), aListeners.end(), aFunc); + // Re-start area listeners on the reordered rows. + { + std::vector<sc::AreaListener>::iterator it = aAreaListeners.begin(), itEnd = aAreaListeners.end(); + for (; it != itEnd; ++it) + { + ScRange aNewRange = it->maArea; + sc::ColRowReorderMapType::const_iterator itRow = aRowMap.find( aNewRange.aStart.Row()); + if (itRow != aRowMap.end()) + { + aNewRange.aStart.SetRow( itRow->second); + aNewRange.aEnd.SetRow( itRow->second); + } + pDocument->StartListeningArea(aNewRange, it->mpListener); + } + } + // Re-group formulas in affected columns. for (itGroupTab = rGroupTabs.begin(); itGroupTab != itGroupTabEnd; ++itGroupTab) { diff --git a/sc/source/core/inc/bcaslot.hxx b/sc/source/core/inc/bcaslot.hxx index b8587d6..b4b57e9 100644 --- a/sc/source/core/inc/bcaslot.hxx +++ b/sc/source/core/inc/bcaslot.hxx @@ -221,7 +221,8 @@ public: */ void EraseArea( ScBroadcastAreas::iterator& rIter ); - void GetAllListeners( const ScRange& rRange, std::vector<sc::AreaListener>& rListeners ); + void GetAllListeners( + const ScRange& rRange, std::vector<sc::AreaListener>& rListeners, sc::AreaOverlapType eType ); }; @@ -317,7 +318,8 @@ public: // only for ScBroadcastAreaSlot void FinallyEraseAreas( ScBroadcastAreaSlot* pSlot ); - std::vector<sc::AreaListener> GetAllListeners( const ScRange& rRange ); + std::vector<sc::AreaListener> GetAllListeners( + const ScRange& rRange, sc::AreaOverlapType eType ); }; diff --git a/sc/source/core/tool/token.cxx b/sc/source/core/tool/token.cxx index d392550..24f0343 100644 --- a/sc/source/core/tool/token.cxx +++ b/sc/source/core/tool/token.cxx @@ -3469,6 +3469,7 @@ void ScTokenArray::AdjustReferenceOnMovedOrigin( const ScAddress& rOldPos, const switch ((*p)->GetType()) { case svSingleRef: + case svExternalSingleRef: { ScToken* pToken = static_cast<ScToken*>(*p); ScSingleRefData& rRef = pToken->GetSingleRef(); @@ -3477,6 +3478,7 @@ void ScTokenArray::AdjustReferenceOnMovedOrigin( const ScAddress& rOldPos, const } break; case svDoubleRef: + case svExternalDoubleRef: { ScToken* pToken = static_cast<ScToken*>(*p); ScComplexRefData& rRef = pToken->GetDoubleRef(); commit 8ecff2710f0ea19c9048900e7d5399471e262c47 Author: Eilidh McAdam <eil...@lanedo.com> Date: Mon Jun 23 20:55:21 2014 +0100 Make Draw use paper size when printing - fdo#63905 Previously, Draw/Impress use the default size from the printer. Now Draw uses the paper size (specified in page formatting). Impress still uses the old method - not sure if this is correct but printing handouts etc probably complicate print/paper size. Reviewed-on: https://gerrit.libreoffice.org/9866 Reviewed-by: Matúš Kukan <matus.ku...@collabora.com> Tested-by: Matúš Kukan <matus.ku...@collabora.com> (cherry picked from commit 7b31e45ec7106d2cfbdbb7915d97667ba710f81c) Conflicts: sd/source/ui/view/DocumentRenderer.cxx Change-Id: If90bae4ac59cd95dd50fcd8deb25fd900756193e diff --git a/sd/source/ui/view/DocumentRenderer.cxx b/sd/source/ui/view/DocumentRenderer.cxx index 4136e89d8..52aa9c5 100644 --- a/sd/source/ui/view/DocumentRenderer.cxx +++ b/sd/source/ui/view/DocumentRenderer.cxx @@ -1418,7 +1418,19 @@ private: else if (rInfo.maPageSize.Width() < rInfo.maPageSize.Height()) rInfo.meOrientation = ORIENTATION_LANDSCAPE; - const Size aPaperSize (rInfo.mpPrinter->GetPaperSize()); + // Draw should abide by specified paper size + Size aPaperSize; + if (mpOptions->IsDraw()) + { + aPaperSize.setWidth(rInfo.maPageSize.Width()); + aPaperSize.setHeight(rInfo.maPageSize.Height()); + } + else + { + aPaperSize.setWidth(rInfo.mpPrinter->GetPaperSize().Width()); + aPaperSize.setHeight(rInfo.mpPrinter->GetPaperSize().Height()); + } + if( (rInfo.meOrientation == ORIENTATION_LANDSCAPE && (aPaperSize.Width() < aPaperSize.Height())) || @@ -1483,10 +1495,21 @@ private: if (mpOptions->IsTime()) aInfo.msTimeDate += GetSdrGlobalData().GetLocaleData()->getTime( Time( Time::SYSTEM ), sal_False, sal_False ); - aInfo.maPrintSize = aInfo.mpPrinter->GetOutputSize(); - maPrintSize = awt::Size( - aInfo.mpPrinter->GetPaperSize().Width(), - aInfo.mpPrinter->GetPaperSize().Height()); + + // Draw should use specified paper size when printing + if (mpOptions->IsDraw()) + { + aInfo.maPrintSize = mrBase.GetDocument()->GetSdPage(0, PK_STANDARD)->GetSize(); + maPrintSize = awt::Size(aInfo.maPrintSize.Width(), + aInfo.maPrintSize.Height()); + } + else + { + aInfo.maPrintSize = aInfo.mpPrinter->GetOutputSize(); + maPrintSize = awt::Size( + aInfo.mpPrinter->GetPaperSize().Width(), + aInfo.mpPrinter->GetPaperSize().Height()); + } switch (mpOptions->GetOutputQuality()) { commit 4d2ac2d24e3ad85733928e48e34885eb038720bc Author: Andras Timar <andras.ti...@collabora.com> Date: Mon Jan 13 00:26:17 2014 -0800 MSP patchsequence fix Change-Id: Iaf4a6e5eb8291d78835a391894ba1b1cc675390a diff --git a/solenv/bin/modules/installer/windows/msp.pm b/solenv/bin/modules/installer/windows/msp.pm index 01052fc..1bbeea8 100644 --- a/solenv/bin/modules/installer/windows/msp.pm +++ b/solenv/bin/modules/installer/windows/msp.pm @@ -877,19 +877,14 @@ sub get_patchsequence my $packageversion = $allvariables->{'PACKAGEVERSION'}; - if ( $packageversion =~ /^\s*(\d+)\.(\d+)\.(\d+)\s*$/ ) + if ( $packageversion =~ /^\s*(\d+)\.(\d+)\.(\d+)\.(\d+)\s*$/ ) { my $major = $1; my $minor = $2; my $micro = $3; - my $concat = 100 * $minor + $micro; - $packageversion = $major . "\." . $concat; + my $patch = $4; + $patchsequence = $major . "\." . $minor . "\." . $micro . "\." . $patch; } - my $vendornumber = 0; - if ( $allvariables->{'VENDORPATCHVERSION'} ) { $vendornumber = $allvariables->{'VENDORPATCHVERSION'}; } - $patchsequence = $packageversion . "\." . $installer::globals::buildid . "\." . $vendornumber; - - if ( $allvariables->{'PATCHSEQUENCE'} ) { $patchsequence = $allvariables->{'PATCHSEQUENCE'}; } return $patchsequence; } commit 3a12769091a03341257b5b36567ae9890420875d Author: Andras Timar <andras.ti...@collabora.com> Date: Sun Jan 12 11:04:41 2014 -0800 fixes related to MSP digital signature Change-Id: I06bcf0d2cc8c4915eff3658905087be6a2eadca6 diff --git a/solenv/bin/modules/installer.pm b/solenv/bin/modules/installer.pm index 237947d..6957a66 100644 --- a/solenv/bin/modules/installer.pm +++ b/solenv/bin/modules/installer.pm @@ -1651,7 +1651,7 @@ sub run { if ( $allvariableshashref->{'OOODOWNLOADNAME'} ) { $$downloadname = installer::download::set_download_filename($languagestringref, $allvariableshashref); } else { $$downloadname = installer::download::resolve_variables_in_downloadname($allvariableshashref, $$downloadname, $languagestringref); } installer::systemactions::rename_one_file( $finalinstalldir . $installer::globals::separator . $installer::globals::shortmsidatabasename, $finalinstalldir . $installer::globals::separator . $$downloadname . ".msi" ); - if ( defined($ENV{'WINDOWS_BUILD_SIGNING'}) && ($ENV{'WINDOWS_BUILD_SIGNING'} eq 'TRUE') ) + if ( defined($ENV{'WINDOWS_BUILD_SIGNING'}) && ($ENV{'WINDOWS_BUILD_SIGNING'} eq 'TRUE') && ( $allvariableshashref->{'CREATE_MSP_INSTALLSET'} eq '0')) { my $systemcall = "signtool.exe sign "; if ( defined($ENV{'PFXFILE'}) ) { $systemcall .= "-f $ENV{'PFXFILE'} "; } diff --git a/solenv/bin/modules/installer/windows/msp.pm b/solenv/bin/modules/installer/windows/msp.pm index 9441559..01052fc 100644 --- a/solenv/bin/modules/installer/windows/msp.pm +++ b/solenv/bin/modules/installer/windows/msp.pm @@ -1194,12 +1194,14 @@ sub create_msp_patch # Sign .msp file if ( defined($ENV{'WINDOWS_BUILD_SIGNING'}) && ($ENV{'WINDOWS_BUILD_SIGNING'} eq 'TRUE') ) { + my $localmspfilename = $mspfilename; + $localmspfilename =~ s/\\/\\\\/g; my $systemcall = "signtool.exe sign "; if ( defined($ENV{'PFXFILE'}) ) { $systemcall .= "-f $ENV{'PFXFILE'} "; } if ( defined($ENV{'PFXPASSWORD'}) ) { $systemcall .= "-p $ENV{'PFXPASSWORD'} "; } if ( defined($ENV{'TIMESTAMPURL'}) ) { $systemcall .= "-t $ENV{'TIMESTAMPURL'} "; } else { $systemcall .= "-t http://timestamp.globalsign.com/scripts/timestamp.dll "; } $systemcall .= "-d \"" . $allvariables->{'PRODUCTNAME'} . " " . $allvariables->{'PRODUCTVERSION'} . " Patch " . $allvariables->{'WINDOWSPATCHLEVEL'} . "\" "; - $systemcall .= $mspfilename; + $systemcall .= $localmspfilename; installer::logger::print_message( "... code signing and timestamping with signtool.exe ...\n" ); my $returnvalue = system($systemcall); commit b66c3f05933329a3cafadf11103f22e6fe751d2a Author: Andras Timar <andras.ti...@collabora.com> Date: Fri Aug 22 06:41:57 2014 -0700 use MSM directly from MSVC dir Change-Id: I62ebf7f7bc10a81a3949b0aad6e6353619ef6b22 diff --git a/solenv/bin/modules/installer/windows/update.pm b/solenv/bin/modules/installer/windows/update.pm index d49625a..0edaaf2 100644 --- a/solenv/bin/modules/installer/windows/update.pm +++ b/solenv/bin/modules/installer/windows/update.pm @@ -423,10 +423,10 @@ sub readmergedatabase foreach my $mergemodule ( @{$mergemodules} ) { my $filename = $mergemodule->{'Name'}; - my $mergefile = installer::scriptitems::get_sourcepath_from_filename_and_includepath(\$filename, $includepatharrayref, 1); + my $mergefile = $ENV{'MSM_PATH'} . $filename; - if ( $$mergefile eq "" ) { installer::exiter::exit_program("ERROR: msm file not found: $filename !", "readmergedatabase"); } - my $completesource = $$mergefile; + if ( ! -f $mergefile ) { installer::exiter::exit_program("ERROR: msm file not found: $filename !", "readmergedatabase"); } + my $completesource = $mergefile; my $mergegid = $mergemodule->{'gid'}; my $workdir = $mergemoduledir . $installer::globals::separator . $mergegid; commit 823249e2b5b4c86baf429b768e552ce6f28228d4 Author: Andras Timar <andras.ti...@collabora.com> Date: Sat Aug 23 03:48:56 2014 -0700 Revert "--with-lang=ALL build exceeds maximum # of files in CAB" This reverts commit 3bfac473a1b1dfb2210ec07245e649697679bd83. With Matus Kukan's work, which packs .ui files into .zip archives, file count is reduced dramatically. Multiple .cab files won't be a problem in theory, but unfortunately both .cab files had the same disk id 'DISK1' and it caused problems with MSP patch generation. diff --git a/instsetoo_native/util/openoffice.lst.in b/instsetoo_native/util/openoffice.lst.in index 2cc10a2..d15ee3b 100644 --- a/instsetoo_native/util/openoffice.lst.in +++ b/instsetoo_native/util/openoffice.lst.in @@ -71,7 +71,6 @@ LibreOffice STARTCENTER_TEMPLREP_URL http://templates.libreoffice.org/ DICT_REPO_URL http://extensions.libreoffice.org/dictionaries/ STARTCENTER_HIDE_EXTERNAL_LINKS 0 - CABFILENUMBER 2 } active 1 compression 5 @@ -125,7 +124,6 @@ LibreOffice_Dev STARTCENTER_TEMPLREP_URL http://templates.libreoffice.org/ DICT_REPO_URL http://extensions.libreoffice.org/dictionaries/ STARTCENTER_HIDE_EXTERNAL_LINKS 0 - CABFILENUMBER 2 } active 1 compression 5
_______________________________________________ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/libreoffice-commits