summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--config_host.mk.in1
-rw-r--r--configure.ac6
-rw-r--r--connectivity/source/inc/java/tools.hxx2
-rw-r--r--desktop/inc/lib/init.hxx2
-rw-r--r--desktop/source/lib/init.cxx12
-rw-r--r--editeng/source/editeng/impedit.cxx6
-rw-r--r--external/python3/darwin.patch.012
-rw-r--r--filter/source/svg/presentation_engine.js291
-rw-r--r--filter/source/svg/svgexport.cxx6
-rw-r--r--include/sal/log.hxx2
-rw-r--r--include/vcl/BitmapBuffer.hxx2
-rw-r--r--include/vcl/customweld.hxx1
-rw-r--r--include/vcl/weld.hxx2
-rw-r--r--instsetoo_native/CustomTarget_install.mk83
-rw-r--r--oox/source/drawingml/fillproperties.cxx8
-rw-r--r--sc/source/ui/pagedlg/tphfedit.cxx2
-rw-r--r--sc/source/ui/view/gridwin4.cxx17
-rw-r--r--sfx2/source/appl/appserv.cxx8
-rw-r--r--sfx2/source/control/unoctitm.cxx4
-rw-r--r--sfx2/source/sidebar/SidebarController.cxx9
-rwxr-xr-xsolenv/bin/call_installer.sh58
-rw-r--r--sw/inc/docufld.hxx1
-rw-r--r--sw/qa/extras/tiledrendering/tiledrendering.cxx43
-rw-r--r--sw/source/core/fields/docufld.cxx16
-rw-r--r--sw/source/core/layout/pagechg.cxx16
-rw-r--r--sw/source/core/txtnode/thints.cxx4
-rw-r--r--sw/source/core/view/viewimp.cxx7
-rw-r--r--vcl/inc/salvtables.hxx2
-rw-r--r--vcl/jsdialog/executor.cxx17
-rw-r--r--vcl/jsdialog/jsdialogbuilder.cxx6
-rw-r--r--vcl/source/app/salvtables.cxx9
-rw-r--r--vcl/unx/gtk3/gtk3gtkinst.cxx2
-rw-r--r--xmlsecurity/source/gpg/SecurityEnvironment.hxx3
33 files changed, 562 insertions, 98 deletions
diff --git a/config_host.mk.in b/config_host.mk.in
index d00f868e2757..96723061447c 100644
--- a/config_host.mk.in
+++ b/config_host.mk.in
@@ -233,6 +233,7 @@ export GIO_LIBS=$(gb_SPACE)@GIO_LIBS@
export GIT_REFERENCE_SRC=@GIT_REFERENCE_SRC@
export GIT_LINK_SRC=@GIT_LINK_SRC@
export GIT_NEEDED_SUBMODULES=@GIT_NEEDED_SUBMODULES@
+export GNUPARALLEL=@GNUPARALLEL@
export EPOXY_CFLAGS=$(gb_SPACE)@EPOXY_CFLAGS@
export EPOXY_LIBS=$(gb_SPACE)@EPOXY_LIBS@
export GLM_CFLAGS=$(gb_SPACE)@GLM_CFLAGS@
diff --git a/configure.ac b/configure.ac
index db08a4da9bb6..7c80eca51db5 100644
--- a/configure.ac
+++ b/configure.ac
@@ -9,7 +9,7 @@ dnl in order to create a configure script.
# several non-alphanumeric characters, those are split off and used only for the
# ABOUTBOXPRODUCTVERSIONSUFFIX in openoffice.lst. Why that is necessary, no idea.
-AC_INIT([Collabora Office],[21.06.29.1],[],[],[https://collaboraoffice.com/])
+AC_INIT([Collabora Office],[21.06.31.1],[],[],[https://collaboraoffice.com/])
dnl libnumbertext needs autoconf 2.68, but that can pick up autoconf268 just fine if it is installed
dnl whereas aclocal (as run by autogen.sh) insists on using autoconf and fails hard
@@ -2824,6 +2824,10 @@ if test -z "$COMPRESSIONTOOL"; then
fi
AC_SUBST(COMPRESSIONTOOL)
+# use GNU parallel for packaging, if available
+AC_PATH_PROG(GNUPARALLEL, parallel)
+AC_SUBST(GNUPARALLEL)
+
AC_MSG_CHECKING([for GNU or BSD tar])
for a in $GNUTAR gtar gnutar bsdtar tar /usr/sfw/bin/gtar; do
$a --version 2> /dev/null | egrep "GNU|bsdtar" 2>&1 > /dev/null
diff --git a/connectivity/source/inc/java/tools.hxx b/connectivity/source/inc/java/tools.hxx
index aa7cb20cad9b..c6024c2a7fb9 100644
--- a/connectivity/source/inc/java/tools.hxx
+++ b/connectivity/source/inc/java/tools.hxx
@@ -20,6 +20,8 @@
#ifndef INCLUDED_CONNECTIVITY_SOURCE_INC_JAVA_TOOLS_HXX
#define INCLUDED_CONNECTIVITY_SOURCE_INC_JAVA_TOOLS_HXX
+#include <memory>
+
#include <com/sun/star/beans/PropertyValue.hpp>
#include <com/sun/star/uno/Sequence.h>
diff --git a/desktop/inc/lib/init.hxx b/desktop/inc/lib/init.hxx
index c19e4c5b0ac1..8b26e117c1fb 100644
--- a/desktop/inc/lib/init.hxx
+++ b/desktop/inc/lib/init.hxx
@@ -219,7 +219,7 @@ namespace desktop {
LibreOfficeKitCallback m_pCallback;
void *m_pData;
int m_nDisableCallbacks;
- std::mutex m_mutex;
+ std::recursive_mutex m_mutex;
class TimeoutIdle : public Timer
{
public:
diff --git a/desktop/source/lib/init.cxx b/desktop/source/lib/init.cxx
index 35bee204a24e..9d88234bdb21 100644
--- a/desktop/source/lib/init.cxx
+++ b/desktop/source/lib/init.cxx
@@ -1464,7 +1464,7 @@ void CallbackFlushHandler::libreOfficeKitViewInvalidateTilesCallback(const tools
void CallbackFlushHandler::libreOfficeKitViewUpdatedCallback(int nType)
{
assert(isUpdatedType( nType ));
- std::unique_lock<std::mutex> lock(m_mutex);
+ std::unique_lock<std::recursive_mutex> lock(m_mutex);
SAL_INFO("lok", "Updated: [" << nType << "]");
setUpdatedType(nType, true);
}
@@ -1472,7 +1472,7 @@ void CallbackFlushHandler::libreOfficeKitViewUpdatedCallback(int nType)
void CallbackFlushHandler::libreOfficeKitViewUpdatedCallbackPerViewId(int nType, int nViewId, int nSourceViewId)
{
assert(isUpdatedTypePerViewId( nType ));
- std::unique_lock<std::mutex> lock(m_mutex);
+ std::unique_lock<std::recursive_mutex> lock(m_mutex);
SAL_INFO("lok", "Updated: [" << nType << "]");
setUpdatedTypePerViewId(nType, nViewId, nSourceViewId, true);
}
@@ -1543,7 +1543,7 @@ void CallbackFlushHandler::queue(const int type, CallbackData& aCallbackData)
return;
}
- std::unique_lock<std::mutex> lock(m_mutex);
+ std::unique_lock<std::recursive_mutex> lock(m_mutex);
// Update types should be received via the updated callbacks for performance,
// getting them as normal callbacks is technically not wrong, but probably should be avoided.
@@ -2138,7 +2138,7 @@ void CallbackFlushHandler::Invoke()
viewShell->flushPendingLOKInvalidateTiles();
}
- std::scoped_lock<std::mutex> lock(m_mutex);
+ std::unique_lock<std::recursive_mutex> lock(m_mutex);
// Append messages for updated types, fetch them only now.
enqueueUpdatedTypes();
@@ -3203,7 +3203,9 @@ static void doc_iniUnoCommands ()
OUString(".uno:RunMacro"),
OUString(".uno:SpacePara1"),
OUString(".uno:SpacePara15"),
- OUString(".uno:SpacePara2")
+ OUString(".uno:SpacePara2"),
+ OUString(".uno:Protect"),
+ OUString(".uno:UnsetCellsReadOnly")
};
util::URL aCommandURL;
diff --git a/editeng/source/editeng/impedit.cxx b/editeng/source/editeng/impedit.cxx
index bb1a1ae00d47..c9131cd521d0 100644
--- a/editeng/source/editeng/impedit.cxx
+++ b/editeng/source/editeng/impedit.cxx
@@ -2175,9 +2175,6 @@ void ImpEditView::ShowDDCursor( const tools::Rectangle& rRect )
aSaveRect.AdjustRight(1 );
aSaveRect.AdjustBottom(1 );
-#ifdef DBG_UTIL
- Size aNewSzPx( aSaveRect.GetSize() );
-#endif
if ( !pDragAndDropInfo->pBackground )
{
pDragAndDropInfo->pBackground = VclPtr<VirtualDevice>::Create(rOutDev);
@@ -2187,14 +2184,13 @@ void ImpEditView::ShowDDCursor( const tools::Rectangle& rRect )
}
-#ifdef DBG_UTIL
+ Size aNewSzPx( aSaveRect.GetSize() );
Size aCurSzPx( pDragAndDropInfo->pBackground->GetOutputSizePixel() );
if ( ( aCurSzPx.Width() < aNewSzPx.Width() ) ||( aCurSzPx.Height() < aNewSzPx.Height() ) )
{
bool bDone = pDragAndDropInfo->pBackground->SetOutputSizePixel( aNewSzPx );
DBG_ASSERT( bDone, "Virtual Device broken?" );
}
-#endif
aSaveRect = rOutDev.PixelToLogic( aSaveRect );
diff --git a/external/python3/darwin.patch.0 b/external/python3/darwin.patch.0
index 139cdc9780bb..30d20ed57578 100644
--- a/external/python3/darwin.patch.0
+++ b/external/python3/darwin.patch.0
@@ -8,3 +8,15 @@
.text
/* ffi_call_unix64 (void *args, unsigned long bytes, unsigned flags,
+--- configure
++++ configure
+@@ -5167,7 +5167,9 @@
+ fi
+
+
++if test "$(uname -s)" = Darwin; then MULTIARCH=; else
+ MULTIARCH=$($CC --print-multiarch 2>/dev/null)
++fi
+
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for the platform triplet based on compiler characteristics" >&5
diff --git a/filter/source/svg/presentation_engine.js b/filter/source/svg/presentation_engine.js
index 0a8eb73e7c12..7e6de4282f98 100644
--- a/filter/source/svg/presentation_engine.js
+++ b/filter/source/svg/presentation_engine.js
@@ -7033,6 +7033,8 @@ function matrixToString( aSVGMatrix )
// eslint-disable-next-line no-unused-vars
function numberParser( sValue )
{
+ if( typeof sValue !== 'string' )
+ return undefined;
if( sValue === '.' )
return undefined;
var reFloatNumber = /^[+-]?[0-9]*[.]?[0-9]*$/;
@@ -7045,6 +7047,9 @@ function numberParser( sValue )
function booleanParser( sValue )
{
+ if( typeof sValue !== 'string' )
+ return undefined;
+
sValue = sValue.toLowerCase();
if( sValue === 'true' )
return true;
@@ -7056,6 +7061,9 @@ function booleanParser( sValue )
function colorParser( sValue )
{
+ if( typeof sValue !== 'string' )
+ return undefined;
+
// The following 3 color functions are used in evaluating sValue string
// so don't remove them.
@@ -7989,6 +7997,7 @@ var ENUM_PROPERTY = 2;
var COLOR_PROPERTY = 3;
var STRING_PROPERTY = 4;
var BOOL_PROPERTY = 5;
+var TUPLE_NUMBER_PROPERTY = 6;
var aValueTypeOutMap = [ 'unknown', 'number', 'enum', 'color', 'string', 'boolean' ];
@@ -8006,6 +8015,14 @@ var aAttributeMap =
'get': 'getOpacity',
'set': 'setOpacity' },
+ 'scale': { 'type': TUPLE_NUMBER_PROPERTY,
+ 'get': 'getSize',
+ 'set': 'setSize' },
+
+ 'translate': { 'type': TUPLE_NUMBER_PROPERTY,
+ 'get': 'getPos',
+ 'set': 'setPos' },
+
'rotate': { 'type': NUMBER_PROPERTY,
'get': 'getRotationAngle',
'set': 'setRotationAngle' },
@@ -11574,6 +11591,70 @@ PropertyAnimationNode.prototype.createActivity = function()
+function isValidTransformation( sType )
+{
+ return ( sType === 'translate' || sType === 'scale' || sType === 'rotate'
+ || sType === 'skewX' || sType === 'skewY' );
+}
+
+function AnimationTransformNode( aAnimElem, aParentNode, aNodeContext )
+{
+ AnimationTransformNode.superclass.constructor.call( this, aAnimElem, aParentNode, aNodeContext );
+
+ this.sClassName = 'AnimationTransformNode';
+}
+extend( AnimationTransformNode, AnimationBaseNode3 );
+
+
+AnimationTransformNode.prototype.parseElement = function()
+{
+ var bRet = AnimationTransformNode.superclass.parseElement.call(this);
+
+ var aAnimElem = this.aElement;
+
+ // transformation type
+ var sTransformType = aAnimElem.getAttribute( 'svg:type' );
+ if( !isValidTransformation( sTransformType ) )
+ {
+ this.eCurrentState = INVALID_NODE;
+ log( 'AnimationTransformNode.parseElement: transformation type not found: ' + sTransformType );
+ }
+ else
+ {
+ this.sAttributeName = sTransformType;
+ }
+
+ return bRet;
+}
+
+AnimationTransformNode.prototype.createActivity = function()
+{
+ var aActivityParamSet = this.fillActivityParams();
+ var aAnimation;
+
+ if( this.getAttributeName() === 'scale' || this.getAttributeName() === 'translate' )
+ {
+ aAnimation = createPairPropertyAnimation( this.getAttributeName(),
+ this.getAnimatedElement(),
+ this.aNodeContext.aSlideWidth,
+ this.aNodeContext.aSlideHeight );
+
+ }
+ else
+ {
+ aAnimation = createPropertyAnimation( this.getAttributeName(),
+ this.getAnimatedElement(),
+ this.aNodeContext.aSlideWidth,
+ this.aNodeContext.aSlideHeight );
+ }
+
+ var aInterpolator = null; // createActivity will compute it;
+ return createActivity( aActivityParamSet, this, aAnimation, aInterpolator );
+};
+
+
+
+
function AnimationSetNode( aAnimElem, aParentNode, aNodeContext )
{
AnimationSetNode.superclass.constructor.call( this, aAnimElem, aParentNode, aNodeContext );
@@ -11872,10 +11953,8 @@ function createAnimationNode( aElement, aParentNode, aNodeContext )
aCreatedNode = new AnimationColorNode( aElement, aParentNode, aNodeContext );
break;
case ANIMATION_NODE_ANIMATETRANSFORM:
- //aCreatedNode = new AnimationTransformNode( aElement, aParentNode, aNodeContext );
- //break;
- log( 'createAnimationNode: ANIMATETRANSFORM not implemented' );
- return null;
+ aCreatedNode = new AnimationTransformNode( aElement, aParentNode, aNodeContext );
+ break;
case ANIMATION_NODE_TRANSITIONFILTER:
aCreatedNode = new AnimationTransitionFilterNode( aElement, aParentNode, aNodeContext );
break;
@@ -11998,6 +12077,41 @@ function createPropertyAnimation( sAttrName, aAnimatedElement, nWidth, nHeight )
+function createPairPropertyAnimation( sTransformType, aAnimatedElement, nWidth, nHeight )
+{
+ var aFunctorSet = aAttributeMap[ sTransformType ];
+ var sGetValueMethod = aFunctorSet.get;
+ var sSetValueMethod = aFunctorSet.set;
+
+ var aDefaultValue = [];
+ var aSizeReference = [];
+ if( sTransformType === 'scale' )
+ {
+ aDefaultValue[0] = aSizeReference[0] = aAnimatedElement.getBaseBBox().width;
+ aDefaultValue[1] = aSizeReference[1] = aAnimatedElement.getBaseBBox().height;
+ }
+ else if( sTransformType === 'translate' )
+ {
+ aDefaultValue[0] = aAnimatedElement.getBaseCenterX();
+ aDefaultValue[1] = aAnimatedElement.getBaseCenterY();
+ aSizeReference[0] = nWidth;
+ aSizeReference[1] = nHeight;
+ }
+ else
+ {
+ log( 'createPairPropertyAnimation: transform type is not handled' );
+ return null;
+ }
+
+ return new TupleAnimation( bind( aAnimatedElement, aAnimatedElement[ sGetValueMethod ] ),
+ bind( aAnimatedElement, aAnimatedElement[ sSetValueMethod ] ),
+ aDefaultValue,
+ aSizeReference );
+}
+
+
+
+
/** createShapeTransition
*
* @param aActivityParamSet
@@ -12197,6 +12311,45 @@ GenericAnimation.prototype.getUnderlyingValue = function()
+function TupleAnimation( aGetValueFunc, aSetValueFunc, aDefaultValue, aReferenceSize )
+{
+ TupleAnimation.superclass.constructor.call( this, aGetValueFunc, aSetValueFunc );
+ assert( aDefaultValue && aReferenceSize,
+ 'TupleAnimation constructor: default value functor and/or reference size are not valid' );
+
+ this.aDefaultValue = aDefaultValue;
+ this.aReferenceSize = aReferenceSize;
+}
+extend( TupleAnimation, GenericAnimation );
+
+TupleAnimation.prototype.perform = function( aNormValue )
+{
+ assert(aNormValue.length === this.aReferenceSize.length);
+
+ var aValue = [];
+ for( var i = 0; i < aNormValue.length; ++i )
+ {
+ aValue.push( aNormValue[i] * this.aReferenceSize[i] );
+ }
+
+ this.aSetValueFunc( aValue );
+};
+
+TupleAnimation.prototype.getUnderlyingValue = function()
+{
+ var aValue = this.aGetValueFunc();
+ assert(aValue.length === this.aReferenceSize.length);
+
+ var aNormValue = [];
+ for( var i = 0; i < aValue.length; ++i )
+ {
+ aNormValue.push( aValue[i] / this.aReferenceSize[i] );
+ }
+
+ return aNormValue;
+};
+
+
function HSLAnimationWrapper( aColorAnimation )
{
@@ -14514,6 +14667,11 @@ AnimatedElement.prototype.getY = function()
return this.nCenterY;
};
+AnimatedElement.prototype.getPos = function()
+{
+ return [this.getX(), this.getY()];
+};
+
AnimatedElement.prototype.getWidth = function()
{
return this.nScaleFactorX * this.getBaseBBox().width;
@@ -14524,6 +14682,11 @@ AnimatedElement.prototype.getHeight = function()
return this.nScaleFactorY * this.getBaseBBox().height;
};
+AnimatedElement.prototype.getSize = function()
+{
+ return [this.getWidth(), this.getHeight()];
+};
+
AnimatedElement.prototype.updateTransformAttribute = function()
{
this.aTransformAttrList = this.aActiveElement.transform.baseVal;
@@ -14553,12 +14716,27 @@ AnimatedElement.prototype.setY = function( nNewCenterY )
this.nCenterY = nNewCenterY;
};
+AnimatedElement.prototype.setPos = function( aNewPos )
+{
+ var nNewCenterX = aNewPos[0];
+ var nNewCenterY = aNewPos[1];
+
+ if( nNewCenterX === this.nCenterX && nNewCenterY === this.nCenterY ) return;
+
+ this.aTransformAttrList = this.aActiveElement.transform.baseVal;
+ this.aTransformAttr = this.aTransformAttrList.getItem( 0 );
+ this.aTMatrix = this.aTransformAttr.matrix.translate( nNewCenterX - this.nCenterX, nNewCenterY - this.nCenterY );
+ this.aTransformAttr.setMatrix( this.aTMatrix );
+ this.nCenterX = nNewCenterX;
+ this.nCenterY = nNewCenterY;
+};
+
AnimatedElement.prototype.setWidth = function( nNewWidth )
{
ANIMDBG.print( 'AnimatedElement.setWidth: nNewWidth = ' + nNewWidth );
if( nNewWidth < 0 )
{
- log('AnimatedElement(' + this.getId() + ').setWidth: negative height!');
+ log('AnimatedElement(' + this.getId() + ').setWidth: negative width!');
nNewWidth = 0;
}
@@ -14603,6 +14781,43 @@ AnimatedElement.prototype.setHeight = function( nNewHeight )
this.nScaleFactorY = nScaleFactorY;
};
+AnimatedElement.prototype.setSize= function( aNewSize )
+{
+ var nNewWidth = aNewSize[0];
+ var nNewHeight = aNewSize[1];
+ ANIMDBG.print( 'AnimatedElement.setSize: = [' + nNewWidth + ',' + nNewHeight + ']');
+ if( nNewWidth < 0 )
+ {
+ log('AnimatedElement(' + this.getId() + ').setSize: negative width!');
+ nNewWidth = 0;
+ }
+ if( nNewHeight < 0 )
+ {
+ log('AnimatedElement(' + this.getId() + ').setSize: negative height!');
+ nNewHeight = 0;
+ }
+
+ var nBaseWidth = this.getBaseBBox().width;
+ var nScaleFactorX = nNewWidth / nBaseWidth;
+ if( nScaleFactorX < 1e-5 ) nScaleFactorX = 1e-5;
+
+ var nBaseHeight = this.getBaseBBox().height;
+ var nScaleFactorY = nNewHeight / nBaseHeight;
+ if( nScaleFactorY < 1e-5 ) nScaleFactorY = 1e-5;
+
+ if( nScaleFactorX == this.nScaleFactorX && nScaleFactorY == this.nScaleFactorY ) return;
+
+ this.aTMatrix = document.documentElement.createSVGMatrix()
+ .translate( this.nCenterX, this.nCenterY )
+ .rotate(this.nRotationAngle)
+ .scaleNonUniform( nScaleFactorX, nScaleFactorY )
+ .translate( -this.nBaseCenterX, -this.nBaseCenterY );
+ this.updateTransformAttribute();
+
+ this.nScaleFactorX = nScaleFactorX;
+ this.nScaleFactorY = nScaleFactorY;
+};
+
AnimatedElement.prototype.getOpacity = function()
{
return this.aActiveElement.getAttribute( 'opacity' );
@@ -16336,6 +16551,17 @@ aInterpolatorHandler.aLerpFunctorMap[ CALC_MODE_LINEAR ][ COLOR_PROPERTY ][ COLO
};
};
+aInterpolatorHandler.aLerpFunctorMap[ CALC_MODE_LINEAR ][ TUPLE_NUMBER_PROPERTY ] =
+ function ( aFrom, aTo, nT )
+ {
+ var aRes = [];
+ for( var i = 0; i < aFrom.length; ++i )
+ {
+ aRes.push( ( 1.0 - nT )* aFrom[i] + nT * aTo[i] );
+ }
+ return aRes;
+ };
+
@@ -16503,6 +16729,36 @@ aOperatorSetMap[ STRING_PROPERTY ] = aOperatorSetMap[ ENUM_PROPERTY ];
// bool operators
aOperatorSetMap[ BOOL_PROPERTY ] = aOperatorSetMap[ ENUM_PROPERTY ];
+// tuple number operators
+aOperatorSetMap[ TUPLE_NUMBER_PROPERTY ] = {};
+
+aOperatorSetMap[ TUPLE_NUMBER_PROPERTY ].equal = function( a, b )
+{
+ assert( a.length === b.length, 'Tuples length mismatch.' );
+ return ( a.toString() === b.toString() );
+};
+
+aOperatorSetMap[ TUPLE_NUMBER_PROPERTY ].add = function( a, b )
+{
+ assert( a.length === b.length, 'Tuples length mismatch.' );
+ var r = [];
+ for( var i = 0; i < a.length; ++i )
+ {
+ r.push(a[i] + b[i]);
+ }
+ return r;
+};
+
+aOperatorSetMap[ TUPLE_NUMBER_PROPERTY ].scale = function( k, v )
+{
+ var r = [];
+ for( var i = 0; i < v.length; ++i )
+ {
+ r.push(k * v[i]);
+ }
+ return r;
+};
+
@@ -17912,6 +18168,22 @@ function extractAttributeValues( eValueType, aValueList, aValueSet, aBBox, nSlid
aValueList.push( aValue );
}
break;
+ case TUPLE_NUMBER_PROPERTY :
+ for( i = 0; i < aValueSet.length; ++i )
+ {
+ if( typeof aValueSet[i] === 'string' )
+ {
+ var aTuple = aValueSet[i].split(',');
+ aValue = [];
+ evalValuesAttribute(aValue, aTuple, aBBox, nSlideWidth, nSlideHeight);
+ aValueList.push(aValue);
+ }
+ else
+ {
+ aValueList.push( undefined );
+ }
+ }
+ break;
default:
log( 'createValueListActivity: unexpected value type: ' + eValueType );
}
@@ -17934,9 +18206,12 @@ function evalValuesAttribute( aValueList, aValueSet, aBBox, nSlideWidth, nSlideH
for( var i = 0; i < aValueSet.length; ++i )
{
var sValue = aValueSet[i];
- sValue = sValue.replace(reMath, 'Math.$&');
- sValue = sValue.replace(/pi(?!\w)/g, 'Math.PI');
- sValue = sValue.replace(/e(?!\w)/g, 'Math.E');
+ if(sValue)
+ {
+ sValue = sValue.replace(reMath, 'Math.$&');
+ sValue = sValue.replace(/pi(?!\w)/g, 'Math.PI');
+ sValue = sValue.replace(/e(?!\w)/g, 'Math.E');
+ }
var aValue = eval( sValue );
aValueList.push( aValue );
}
diff --git a/filter/source/svg/svgexport.cxx b/filter/source/svg/svgexport.cxx
index d0eb6b9c6a8c..6022cb966c08 100644
--- a/filter/source/svg/svgexport.cxx
+++ b/filter/source/svg/svgexport.cxx
@@ -371,6 +371,11 @@ SVGExport::SVGExport(
// add namespaces
GetNamespaceMap_().Add(
+ GetXMLToken(XML_NP_SVG),
+ GetXMLToken(XML_N_SVG_COMPAT),
+ XML_NAMESPACE_SVG);
+
+ GetNamespaceMap_().Add(
GetXMLToken(XML_NP_PRESENTATION),
GetXMLToken(XML_N_PRESENTATION),
XML_NAMESPACE_PRESENTATION);
@@ -1054,6 +1059,7 @@ void SVGFilter::implExportDocumentHeaderImpressOrDraw(sal_Int32 nDocX, sal_Int32
mpSVGExport->AddAttribute( XML_NAMESPACE_NONE, "xmlns:presentation", "http://sun.com/xmlns/staroffice/presentation" );
mpSVGExport->AddAttribute( XML_NAMESPACE_NONE, "xmlns:smil", "http://www.w3.org/2001/SMIL20/" );
mpSVGExport->AddAttribute( XML_NAMESPACE_NONE, "xmlns:anim", "urn:oasis:names:tc:opendocument:xmlns:animation:1.0" );
+ mpSVGExport->AddAttribute( XML_NAMESPACE_NONE, "xmlns:svg", "urn:oasis:names:tc:opendocument:xmlns:svg-compatible:1.0" );
mpSVGExport->AddAttribute( XML_NAMESPACE_NONE, "xml:space", "preserve" );
mpSVGDoc = new SvXMLElementExport( *mpSVGExport, XML_NAMESPACE_NONE, "svg", true, true );
diff --git a/include/sal/log.hxx b/include/sal/log.hxx
index fd3bf56e0dd7..6f61d0c52a34 100644
--- a/include/sal/log.hxx
+++ b/include/sal/log.hxx
@@ -144,7 +144,7 @@ inline char const * unwrapStream(SAL_UNUSED_PARAMETER StreamIgnore const &) {
#define SAL_DETAIL_LOG_STREAM(condition, level, area, where, stream) \
do { \
- if (condition) \
+ if (SAL_UNLIKELY(condition)) \
{ \
switch (sal_detail_log_report(level, area)) \
{ \
diff --git a/include/vcl/BitmapBuffer.hxx b/include/vcl/BitmapBuffer.hxx
index 4a4ec8404a08..c7516dc52e78 100644
--- a/include/vcl/BitmapBuffer.hxx
+++ b/include/vcl/BitmapBuffer.hxx
@@ -20,6 +20,8 @@
#ifndef INCLUDED_VCL_BITMAPBUFFER_HXX
#define INCLUDED_VCL_BITMAPBUFFER_HXX
+#include <memory>
+
#include <vcl/dllapi.h>
#include <vcl/BitmapPalette.hxx>
#include <vcl/ColorMask.hxx>
diff --git a/include/vcl/customweld.hxx b/include/vcl/customweld.hxx
index 64f980732dfb..e5166bae0fd9 100644
--- a/include/vcl/customweld.hxx
+++ b/include/vcl/customweld.hxx
@@ -63,6 +63,7 @@ public:
}
virtual void Show() { m_pDrawingArea->show(); }
virtual void Hide() { m_pDrawingArea->hide(); }
+ void SetCursor(void * pData) { m_pDrawingArea->set_cursor_data(pData); }
void GrabFocus() { m_pDrawingArea->grab_focus(); }
bool HasFocus() const { return m_pDrawingArea->has_focus(); }
bool IsVisible() const { return m_pDrawingArea->get_visible(); }
diff --git a/include/vcl/weld.hxx b/include/vcl/weld.hxx
index 70d91ee6ca96..c2922048e0a8 100644
--- a/include/vcl/weld.hxx
+++ b/include/vcl/weld.hxx
@@ -206,6 +206,8 @@ public:
virtual void set_tooltip_text(const OUString& rTip) = 0;
virtual OUString get_tooltip_text() const = 0;
+ virtual void set_cursor_data(void * pData) = 0;
+
virtual void connect_focus_in(const Link<Widget&, void>& rLink)
{
assert(!m_aFocusInHdl.IsSet() || !rLink.IsSet());
diff --git a/instsetoo_native/CustomTarget_install.mk b/instsetoo_native/CustomTarget_install.mk
index 0974240be1fb..2edb9ef365fa 100644
--- a/instsetoo_native/CustomTarget_install.mk
+++ b/instsetoo_native/CustomTarget_install.mk
@@ -62,41 +62,18 @@ export LOCAL_COMMON_OUT := $(instsetoo_OUT)
instsetoo_native_WITH_LANG := en-US $(filter-out en-US,$(gb_WITH_LANG))
-PRODUCTNAME_no_spaces := $(subst $(WHITESPACE),,$(PRODUCTNAME))
-
-ifeq (WNT,$(OS))
-define instsetoo_native_msitemplates
-
-TEMPLATE_DIR=$(dir $@)msi_templates \
-&& rm -rf $${TEMPLATE_DIR} \
-&& mkdir -p $${TEMPLATE_DIR}/Binary \
-&& for I in $(SRCDIR)/instsetoo_native/inc_$(1)/windows/msi_templates/*.* ; do $(GREP) -v '^#' "$$I" > $${TEMPLATE_DIR}/`basename $$I` || true ; done \
-&& $(GNUCOPY) $(SRCDIR)/instsetoo_native/inc_common/windows/msi_templates/Binary/*.* $${TEMPLATE_DIR}/Binary
-endef
-else
-instsetoo_native_msitemplates :=
-endif
-
define instsetoo_native_install_command
-$(call instsetoo_native_msitemplates,$(1))
-$(call gb_Helper_print_on_error, \
-cd $(dir $@) \
-$(foreach pkgformat,$(5),\
-&& $(PERL) -w $< \
- -f $(BUILDDIR)/instsetoo_native/util/openoffice.lst \
- -l $(subst $(WHITESPACE),$(COMMA),$(strip $(2))) \
- -p $(PRODUCTNAME_no_spaces)$(3) \
- -u $(instsetoo_OUT) \
- -packer $(COMPRESSIONTOOL) \
- -buildid $(if $(filter deb0 rpm0,$(pkgformat)$(LIBO_VERSION_PATCH)),1,$(LIBO_VERSION_PATCH)) \
- $(if $(filter WNT,$(OS)), \
- -msitemplate $(dir $@)msi_templates \
- -msilanguage $(dir $@)win_ulffiles \
- ) \
- $(4) \
- -format $(pkgformat) \
- $(if $(verbose),-verbose,-quiet) \
-),$@.log)
+$(if $(GNUPARALLEL), \
+ $(call gb_Helper_print_on_error, \
+ cd $(dir $@) && \
+ $(GNUPARALLEL) -j $(PARALLELISM) $(SRCDIR)/solenv/bin/call_installer.sh $(if $(verbose),-verbose,-quiet) -- $(1) \
+ ,$@.log) \
+, \
+ $(call gb_Helper_print_on_error, \
+ cd $(dir $@) \
+ $(foreach curpkg,$(1),\
+ && $(SRCDIR)/solenv/bin/call_installer.sh $(if $(verbose),-verbose,-quiet) $(curpkg) \
+ ),$@.log))
endef
$(call gb_CustomTarget_get_workdir,instsetoo_native/install)/install.phony:
@@ -104,32 +81,38 @@ $(call gb_CustomTarget_get_workdir,instsetoo_native/install)/install.phony:
$(call gb_Trace_StartRange,$(subst $(WORKDIR)/,,$@),PRL)
rm -rf $(instsetoo_OUT)
ifeq (TRUE,$(LIBO_TEST_INSTALL))
- $(call instsetoo_native_install_command,openoffice,en-US,,,archive)
- unzip -q -d $(TESTINSTALLDIR) $(instsetoo_OUT)/$(PRODUCTNAME_no_spaces)/archive/install/en-US/LibreOffice*_archive.zip
+ $(call instsetoo_native_install_command, "openoffice:en-US:::archive:nostrip")
+ unzip -q -d $(TESTINSTALLDIR) $(instsetoo_OUT)/$(PRODUCTNAME_WITHOUT_SPACES)/archive/install/en-US/LibreOffice*_archive.zip
mv $(TESTINSTALLDIR)/LibreOffice*_archive/LibreOffice*/* $(TESTINSTALLDIR)/
rmdir $(TESTINSTALLDIR)/LibreOffice*_archive/LibreOffice*
rmdir $(TESTINSTALLDIR)/LibreOffice*_archive
ifeq (ODK,$(filter ODK,$(BUILD_TYPE)))
- $(call instsetoo_native_install_command,sdkoo,en-US,_SDK,,archive)
- unzip -q -d $(TESTINSTALLDIR) $(instsetoo_OUT)/$(PRODUCTNAME_no_spaces)_SDK/archive/install/en-US/LibreOffice*_archive_sdk.zip
+ $(call instsetoo_native_install_command, "sdkoo:en-US:_SDK::archive:nostrip")
+ unzip -q -d $(TESTINSTALLDIR) $(instsetoo_OUT)/$(PRODUCTNAME_WITHOUT_SPACES)_SDK/archive/install/en-US/LibreOffice*_archive_sdk.zip
mv $(TESTINSTALLDIR)/LibreOffice*_archive_sdk/LibreOffice*_SDK/sdk \
$(TESTINSTALLDIR)/
rmdir $(TESTINSTALLDIR)/LibreOffice*_archive_sdk/LibreOffice*_SDK
rmdir $(TESTINSTALLDIR)/LibreOffice*_archive_sdk
endif
else # LIBO_TEST_INSTALL
- $(call instsetoo_native_install_command,openoffice,$(if $(filter WNT MACOSX,$(OS)),$(instsetoo_native_WITH_LANG),en-US),,,$(PKGFORMAT))
-ifeq (ODK,$(filter ODK,$(BUILD_TYPE)))
- $(call instsetoo_native_install_command,sdkoo,en-US,_SDK,,$(PKGFORMAT))
-endif
-ifeq (HELP,$(filter HELP,$(BUILD_TYPE))$(filter MACOSX,$(OS)))
- $(foreach lang,$(gb_HELP_LANGS),\
- $(call instsetoo_native_install_command,ooohelppack,$(lang),,-helppack,$(PKGFORMAT)))
-endif
-ifeq (,$(filter WNT MACOSX,$(OS)))
- $(foreach lang,$(instsetoo_native_WITH_LANG),\
- $(call instsetoo_native_install_command,ooolangpack,$(lang),,-languagepack,$(PKGFORMAT)))
-endif
+ $(call instsetoo_native_install_command, \
+ $(foreach pkgformat,$(PKGFORMAT),\
+ $(if $(filter WNT,$(OS)), \
+ "openoffice:$(subst $(WHITESPACE),$(COMMA),$(strip $(instsetoo_native_WITH_LANG))):::$(pkgformat):$(if $(filter-out archive,$(pkgformat)),strip,nostrip)" \
+ $(if $(filter ODK,$(BUILD_TYPE)), \
+ "sdkoo:en-US:_SDK::$(pkgformat):nostrip") \
+ $(if $(filter HELP,$(BUILD_TYPE)), \
+ $(foreach lang,$(gb_HELP_LANGS), \
+ "ooohelppack:$(lang)::-helppack:$(pkgformat):nostrip" )) \
+ , \
+ ":en-US:::$(pkgformat):$(if $(filter-out archive,$(pkgformat)),strip,nostrip)" \
+ $(if $(filter ODK,$(BUILD_TYPE)), \
+ ":en-US:_SDK::$(pkgformat):nostrip") \
+ $(if $(and $(filter HELP,$(BUILD_TYPE)), $(filter-out MACOSX,$(OS))), \
+ $(foreach lang,$(gb_HELP_LANGS), \
+ ":$(lang)::-helppack:$(pkgformat):nostrip" )) \
+ $(foreach lang,$(instsetoo_native_WITH_LANG), \
+ ":$(lang)::-languagepack:$(pkgformat):nostrip" ) )))
endif # LIBO_TEST_INSTALL
touch $@
$(call gb_Trace_EndRange,$(subst $(WORKDIR)/,,$@),PRL)
diff --git a/oox/source/drawingml/fillproperties.cxx b/oox/source/drawingml/fillproperties.cxx
index 21c7d84d1309..f10be4556610 100644
--- a/oox/source/drawingml/fillproperties.cxx
+++ b/oox/source/drawingml/fillproperties.cxx
@@ -98,7 +98,15 @@ void lclCalculateCropPercentage(uno::Reference<graphic::XGraphic> const & xGraph
sal_Int32 nScaledHeight = aBitmapEx.GetSizePixel().Height();
sal_Int32 nOrigWidth = (nScaledWidth * (100000 - aFillRect.X1 - aFillRect.X2)) / 100000;
+ if (nOrigWidth == 0)
+ {
+ nOrigWidth = 1;
+ }
sal_Int32 nOrigHeight = (nScaledHeight * (100000 - aFillRect.Y1 - aFillRect.Y2)) / 100000;
+ if (nOrigHeight == 0)
+ {
+ nOrigHeight = 1;
+ }
sal_Int32 nLeftPercentage = nScaledWidth * aFillRect.X1 / nOrigWidth;
sal_Int32 nRightPercentage = nScaledWidth * aFillRect.X2 / nOrigWidth;
diff --git a/sc/source/ui/pagedlg/tphfedit.cxx b/sc/source/ui/pagedlg/tphfedit.cxx
index acf8333d246d..964b022eb943 100644
--- a/sc/source/ui/pagedlg/tphfedit.cxx
+++ b/sc/source/ui/pagedlg/tphfedit.cxx
@@ -111,6 +111,8 @@ void ScEditWindow::SetDrawingArea(weld::DrawingArea* pDrawingArea)
pAcc->InitAcc(nullptr, m_xEditView.get(), nullptr, nullptr,
sName, pDrawingArea->get_tooltip_text());
+
+ SetCursor(m_xEditView->GetCursor());
}
ScEditWindow::~ScEditWindow()
diff --git a/sc/source/ui/view/gridwin4.cxx b/sc/source/ui/view/gridwin4.cxx
index 2580b25fafd2..0c697bf085ef 100644
--- a/sc/source/ui/view/gridwin4.cxx
+++ b/sc/source/ui/view/gridwin4.cxx
@@ -1571,13 +1571,16 @@ void ScGridWindow::PaintTile( VirtualDevice& rDevice,
{
bool bPrintTwipsMsgs = comphelper::LibreOfficeKit::isCompatFlagSet(
comphelper::LibreOfficeKit::Compat::scPrintTwipsMsgs);
- mpLOKDrawView.reset(bPrintTwipsMsgs ?
- new ScLOKDrawView(
- &rDevice,
- mrViewData) :
- new FmFormView(
- *pModel,
- &rDevice));
+ if (!mpLOKDrawView)
+ {
+ mpLOKDrawView.reset(bPrintTwipsMsgs ?
+ new ScLOKDrawView(
+ &rDevice,
+ mrViewData) :
+ new FmFormView(
+ *pModel,
+ &rDevice));
+ }
mpLOKDrawView->SetNegativeX(bLayoutRTL);
mpLOKDrawView->ShowSdrPage(mpLOKDrawView->GetModel()->GetPage(nTab));
diff --git a/sfx2/source/appl/appserv.cxx b/sfx2/source/appl/appserv.cxx
index 2e41b999cf70..6dec63520128 100644
--- a/sfx2/source/appl/appserv.cxx
+++ b/sfx2/source/appl/appserv.cxx
@@ -813,6 +813,14 @@ void SfxApplication::MiscExec_Impl( SfxRequest& rReq )
pViewFrame = SfxViewFrame::GetFirst();
while( pViewFrame )
{
+ // in LOK case we want to apply changes only to the current view
+ if (comphelper::LibreOfficeKit::isActive() &&
+ pViewFrame != SfxViewShell::Current()->GetViewFrame())
+ {
+ pViewFrame = SfxViewFrame::GetNext( *pViewFrame );
+ continue;
+ }
+
Reference<XFrame> xFrame = pViewFrame->GetFrame().GetFrameInterface();
// We want to change mode only for a current app module, ignore other apps
diff --git a/sfx2/source/control/unoctitm.cxx b/sfx2/source/control/unoctitm.cxx
index 025dace91506..aeffcc9ab2b4 100644
--- a/sfx2/source/control/unoctitm.cxx
+++ b/sfx2/source/control/unoctitm.cxx
@@ -1220,7 +1220,9 @@ static void InterceptLOKStateChangeEvent(sal_uInt16 nSID, SfxViewFrame* pViewFra
aEvent.FeatureURL.Path == "DecrementIndent" ||
aEvent.FeatureURL.Path == "EditHeaderAndFooter" ||
aEvent.FeatureURL.Path == "NumberFormatDecDecimals" ||
- aEvent.FeatureURL.Path == "NumberFormatIncDecimals")
+ aEvent.FeatureURL.Path == "NumberFormatIncDecimals" ||
+ aEvent.FeatureURL.Path == "Protect" ||
+ aEvent.FeatureURL.Path == "UnsetCellsReadOnly")
{
aBuffer.append(aEvent.IsEnabled ? std::u16string_view(u"enabled") : std::u16string_view(u"disabled"));
}
diff --git a/sfx2/source/sidebar/SidebarController.cxx b/sfx2/source/sidebar/SidebarController.cxx
index ba1c968d022f..db4f9679e34a 100644
--- a/sfx2/source/sidebar/SidebarController.cxx
+++ b/sfx2/source/sidebar/SidebarController.cxx
@@ -332,9 +332,8 @@ void SAL_CALL SidebarController::notifyContextChangeEvent (const css::ui::Contex
maContextChangeUpdate.RequestCall(); // async call, not a prob
// calling with held
// solarmutex
- if (comphelper::LibreOfficeKit::isActive())
- maContextChangeUpdate.Sync();
- else // TODO: this call is redundant but mandatory for unit test to update context on document loading
+ // TODO: this call is redundant but mandatory for unit test to update context on document loading
+ if (!comphelper::LibreOfficeKit::isActive())
UpdateConfigurations();
}
}
@@ -374,8 +373,6 @@ void SAL_CALL SidebarController::statusChanged (const css::frame::FeatureStateEv
mnRequestedForceFlags |= SwitchFlag_ForceSwitch;
maContextChangeUpdate.RequestCall(); // async call, ok to call
// with held solarmutex
- if (comphelper::LibreOfficeKit::isActive())
- maContextChangeUpdate.Sync();
}
}
@@ -1031,8 +1028,6 @@ IMPL_LINK(SidebarController, WindowEventHandler, VclWindowEvent&, rEvent, void)
mpParentWindow->Invalidate();
mnRequestedForceFlags |= SwitchFlag_ForceNewDeck | SwitchFlag_ForceNewPanels;
maContextChangeUpdate.RequestCall();
- if (comphelper::LibreOfficeKit::isActive())
- maContextChangeUpdate.Sync();
break;
case VclEventId::ObjectDying:
diff --git a/solenv/bin/call_installer.sh b/solenv/bin/call_installer.sh
new file mode 100755
index 000000000000..f1db809f7faf
--- /dev/null
+++ b/solenv/bin/call_installer.sh
@@ -0,0 +1,58 @@
+#!/bin/sh
+
+# unpack parameters
+VERBOSITY=$1; shift
+MSITEMPL=$(echo "$@" | cut -d ':' -f 1)
+LANG=$(echo "$@" | cut -d ':' -f 2)
+PRODNAME=$(echo "$@" | cut -d ':' -f 3)
+EXTENSION=$(echo "$@" | cut -d ':' -f 4)
+PKGFORMAT=$(echo "$@" | cut -d ':' -f 5)
+STRIP=$(echo "$@" | cut -d ':' -f 6)
+
+# need to hack buildid?
+if [ "${PKGFORMAT}${LIBO_VERSION_PATCH}" = "deb0" ] || \
+ [ "${PKGFORMAT}${LIBO_VERSION_PATCH}" = "rpm0" ] ; then
+ LIBO_VERSION_PATCH=1
+fi
+
+# switch to verbose?
+if [ "${VERBOSITY}" = "-verbose" ] ; then
+ set -x
+fi
+
+# populate MSI template dirs for Windows
+if [ -n "${MSITEMPL}" ]; then
+ TEMPLATE_DIR="${WORKDIR}/CustomTarget/instsetoo_native/install/msi_templates"
+ rm -rf "${TEMPLATE_DIR}" && \
+ mkdir -p "${TEMPLATE_DIR}/Binary" && \
+ for I in "${SRCDIR}/instsetoo_native/inc_${MSITEMPL}/windows/msi_templates/"*.* ; do \
+ "${GREP}" -v '^#' "$I" > "${TEMPLATE_DIR}/$(basename "$I")" || true ; \
+ done && \
+ "${GNUCOPY}" "${SRCDIR}/instsetoo_native/inc_common/windows/msi_templates/Binary/"*.* "${TEMPLATE_DIR}/Binary" || exit 1
+fi
+
+# add extra params for Windows
+EXTRA_PARAMS=
+if [ "${OS}" = "WNT" ] ; then
+ EXTRA_PARAMS="${EXTRA_PARAMS} -msitemplate ${WORKDIR}/CustomTarget/instsetoo_native/install/msi_templates"
+ EXTRA_PARAMS="${EXTRA_PARAMS} -msilanguage ${WORKDIR}/CustomTarget/instsetoo_native/install/win_ulffiles"
+fi
+
+# need to strip?
+if [ "${STRIP}" = "strip" ] ; then
+ export ENABLE_STRIP=1
+fi
+
+# shellcheck disable=SC2086
+# shellcheck disable=SC2154
+${PERL} -w "${SRCDIR}"/solenv/bin/make_installer.pl \
+ -f "${BUILDDIR}"/instsetoo_native/util/openoffice.lst \
+ -l "${LANG}" \
+ -p "${PRODUCTNAME_WITHOUT_SPACES}${PRODNAME}" \
+ -u "${instsetoo_OUT}" \
+ -packer "${COMPRESSIONTOOL}" \
+ -buildid "${LIBO_VERSION_PATCH}" \
+ ${EXTRA_PARAMS:+$EXTRA_PARAMS} \
+ ${EXTENSION:+"$EXTENSION"} \
+ -format "${PKGFORMAT}" \
+ "${VERBOSITY}"
diff --git a/sw/inc/docufld.hxx b/sw/inc/docufld.hxx
index b4fe720970b6..f7bc73bad0db 100644
--- a/sw/inc/docufld.hxx
+++ b/sw/inc/docufld.hxx
@@ -474,6 +474,7 @@ public:
Date GetDate() const { return Date(m_aDateTime.GetDate()); }
tools::Time GetTime() const { return tools::Time(m_aDateTime.GetTime()); }
sal_uInt32 GetPostItId() const { return m_nPostItId; }
+ void SetPostItId(const sal_uInt32 nPostItId = 0);
/// Author
virtual OUString GetPar1() const override;
diff --git a/sw/qa/extras/tiledrendering/tiledrendering.cxx b/sw/qa/extras/tiledrendering/tiledrendering.cxx
index 8ac5fcc83e02..f0b8e3923158 100644
--- a/sw/qa/extras/tiledrendering/tiledrendering.cxx
+++ b/sw/qa/extras/tiledrendering/tiledrendering.cxx
@@ -18,6 +18,8 @@
#include <com/sun/star/frame/XStorable.hpp>
#include <com/sun/star/frame/Desktop.hpp>
#include <com/sun/star/text/XTextViewCursorSupplier.hpp>
+#include <com/sun/star/text/XTextField.hpp>
+#include <com/sun/star/text/AuthorDisplayFormat.hpp>
#include <com/sun/star/datatransfer/XTransferable2.hpp>
#include <test/helper/transferable.hxx>
@@ -165,6 +167,7 @@ public:
void testCondCollCopy();
void testMoveShapeHandle();
void testRedlinePortions();
+ void testAuthorField();
CPPUNIT_TEST_SUITE(SwTiledRenderingTest);
CPPUNIT_TEST(testRegisterCallback);
@@ -251,6 +254,7 @@ public:
CPPUNIT_TEST(testCondCollCopy);
CPPUNIT_TEST(testMoveShapeHandle);
CPPUNIT_TEST(testRedlinePortions);
+ CPPUNIT_TEST(testAuthorField);
CPPUNIT_TEST_SUITE_END();
private:
@@ -3570,6 +3574,45 @@ void SwTiledRenderingTest::testRedlinePortions()
assertXPath(pXmlDoc, "//Text[4]", "Portion", " after");
}
+void SwTiledRenderingTest::testAuthorField()
+{
+ SwXTextDocument* pXTextDocument = createDoc();
+ const OUString sAuthor("Abcd Xyz");
+
+ uno::Sequence<beans::PropertyValue> aPropertyValues1(comphelper::InitPropertySequence(
+ {
+ {".uno:Author", uno::makeAny(sAuthor)},
+ }));
+ pXTextDocument->initializeForTiledRendering(aPropertyValues1);
+
+ auto insertAuthorField = [this]()
+ {
+ uno::Reference<lang::XMultiServiceFactory> const xMSF(mxComponent, uno::UNO_QUERY_THROW);
+ uno::Reference<text::XTextDocument> const xTD(mxComponent, uno::UNO_QUERY_THROW);
+
+ auto const xText = xTD->getText();
+ auto const xTextCursor = xText->createTextCursor();
+ CPPUNIT_ASSERT(xTextCursor.is());
+
+ xTextCursor->gotoEnd(false);
+
+ uno::Reference<text::XTextField> const xTextField(
+ xMSF->createInstance("com.sun.star.text.textfield.Author"), uno::UNO_QUERY_THROW);
+
+ uno::Reference<beans::XPropertySet> xTextFieldProps(xTextField, uno::UNO_QUERY_THROW);
+ xTextFieldProps->setPropertyValue("FullName", uno::Any(true));
+
+ xText->insertTextContent(xTextCursor, xTextField, false);
+ };
+
+ insertAuthorField();
+ Scheduler::ProcessEventsToIdle();
+
+ xmlDocUniquePtr pXmlDoc = parseLayoutDump();
+
+ assertXPath(pXmlDoc, "/root/page[1]/body/txt[1]/Special[1]", "rText", sAuthor);
+}
+
CPPUNIT_TEST_SUITE_REGISTRATION(SwTiledRenderingTest);
CPPUNIT_PLUGIN_IMPLEMENT();
diff --git a/sw/source/core/fields/docufld.cxx b/sw/source/core/fields/docufld.cxx
index b32c4937ed1e..4a99b8353e82 100644
--- a/sw/source/core/fields/docufld.cxx
+++ b/sw/source/core/fields/docufld.cxx
@@ -312,7 +312,16 @@ OUString SwAuthorFieldType::Expand(sal_uLong nFormat)
{
SvtUserOptions& rOpt = SW_MOD()->GetUserOptions();
if((nFormat & 0xff) == AF_NAME)
- return rOpt.GetFullName();
+ {
+ // Prefer the view's redline author name.
+ // (set in SwXTextDocument::initializeForTiledRendering)
+ std::size_t nAuthor = SW_MOD()->GetRedlineAuthor();
+ OUString sAuthor = SW_MOD()->GetRedlineAuthor(nAuthor);
+ if (sAuthor.isEmpty())
+ return rOpt.GetFullName();
+
+ return sAuthor;
+ }
return rOpt.GetID();
}
@@ -1829,6 +1838,11 @@ sal_Int32 SwPostItField::GetNumberOfParagraphs() const
return mpText ? mpText->Count() : 1;
}
+void SwPostItField::SetPostItId(const sal_uInt32 nPostItId)
+{
+ m_nPostItId = nPostItId == 0 ? s_nLastPostItId++ : nPostItId;
+}
+
bool SwPostItField::QueryValue( uno::Any& rAny, sal_uInt16 nWhichId ) const
{
switch( nWhichId )
diff --git a/sw/source/core/layout/pagechg.cxx b/sw/source/core/layout/pagechg.cxx
index 7b885474f135..20423f85b19d 100644
--- a/sw/source/core/layout/pagechg.cxx
+++ b/sw/source/core/layout/pagechg.cxx
@@ -255,13 +255,19 @@ SwPageFrame::SwPageFrame( SwFrameFormat *pFormat, SwFrame* pSib, SwPageDesc *pPg
void SwPageFrame::DestroyImpl()
{
- // Cleanup the header-footer controls in the SwEditWin
+ // Cleanup the header-footer controls in all SwEditWins
SwViewShell* pSh = getRootFrame()->GetCurrShell();
- SwWrtShell* pWrtSh = dynamic_cast< SwWrtShell* >( pSh );
- if ( pWrtSh )
+ if (pSh)
{
- SwEditWin& rEditWin = pWrtSh->GetView().GetEditWin();
- rEditWin.GetFrameControlsManager( ).RemoveControls( this );
+ for (SwViewShell& rSh : pSh->GetRingContainer())
+ {
+ SwWrtShell* pWrtSh = dynamic_cast< SwWrtShell* >( &rSh );
+ if ( pWrtSh )
+ {
+ SwEditWin& rEditWin = pWrtSh->GetView().GetEditWin();
+ rEditWin.GetFrameControlsManager( ).RemoveControls( this );
+ }
+ }
}
// empty FlyContainer, deletion of the Flys is done by the anchor (in base class SwFrame)
diff --git a/sw/source/core/txtnode/thints.cxx b/sw/source/core/txtnode/thints.cxx
index af1f220fa448..f0a784f6fc42 100644
--- a/sw/source/core/txtnode/thints.cxx
+++ b/sw/source/core/txtnode/thints.cxx
@@ -1080,7 +1080,9 @@ SwTextAttr* MakeTextAttr(
// the relation to its annotation mark (relation established via annotation field's name).
// If the annotation mark is also copied, the relation and thus the annotated text range will be reestablished,
// when the annotation mark is created and inserted into the document.
- const_cast<SwPostItField&>(dynamic_cast<const SwPostItField&>(*(pNew->GetFormatField().GetField()))).SetName(OUString());
+ auto& pField = const_cast<SwPostItField&>(dynamic_cast<const SwPostItField&>(*(pNew->GetFormatField().GetField())));
+ pField.SetName(OUString());
+ pField.SetPostItId();
}
}
break;
diff --git a/sw/source/core/view/viewimp.cxx b/sw/source/core/view/viewimp.cxx
index d86c06e23593..c8cacafca5ea 100644
--- a/sw/source/core/view/viewimp.cxx
+++ b/sw/source/core/view/viewimp.cxx
@@ -134,12 +134,13 @@ bool SwViewShellImp::AddPaintRect( const SwRect &rRect )
if(!m_pRegion->empty())
{
// This function often gets called with rectangles that line up vertically.
- // Try to extend the last one downwards to include the new one.
+ // Try to extend the last one downwards to include the new one (use Union()
+ // in case the new one is actually already contained in the last one).
SwRect& last = m_pRegion->back();
if(last.Left() == rRect.Left() && last.Width() == rRect.Width()
&& last.Bottom() + 1 >= rRect.Top() && last.Bottom() <= rRect.Bottom())
{
- last = SwRect( last.TopLeft(), rRect.BottomRight());
+ last.Union(rRect);
// And these rectangles lined up vertically often come up in groups
// that line up horizontally. Try to extend the previous rectangle
// to the right to include the last one.
@@ -149,7 +150,7 @@ bool SwViewShellImp::AddPaintRect( const SwRect &rRect )
if(last2.Top() == last.Top() && last2.Height() == last.Height()
&& last2.Right() + 1 >= last.Left() && last2.Right() <= last2.Right())
{
- last2 = SwRect( last.TopLeft(), rRect.BottomRight());
+ last2.Union(last);
m_pRegion->pop_back();
return true;
}
diff --git a/vcl/inc/salvtables.hxx b/vcl/inc/salvtables.hxx
index aeb1e7bc4e0f..cb57115a73b9 100644
--- a/vcl/inc/salvtables.hxx
+++ b/vcl/inc/salvtables.hxx
@@ -300,6 +300,8 @@ public:
virtual OUString get_tooltip_text() const override;
+ virtual void set_cursor_data(void * pData) override;
+
virtual void connect_focus_in(const Link<Widget&, void>& rLink) override;
virtual void connect_mnemonic_activate(const Link<Widget&, bool>& rLink) override;
diff --git a/vcl/jsdialog/executor.cxx b/vcl/jsdialog/executor.cxx
index 8662b246e5f9..1b13cbeafe79 100644
--- a/vcl/jsdialog/executor.cxx
+++ b/vcl/jsdialog/executor.cxx
@@ -243,8 +243,21 @@ bool ExecuteAction(const std::string& nWindowId, const OString& rWidget, StringM
}
else if (sAction == "togglemenu")
{
- pToolbar->set_menu_item_active(
- OUStringToOString(rData["data"], RTL_TEXTENCODING_ASCII_US), true);
+ OString sId = OUStringToOString(rData["data"], RTL_TEXTENCODING_ASCII_US);
+ bool bIsActive = pToolbar->get_menu_item_active(sId);
+ pToolbar->set_menu_item_active(sId, !bIsActive);
+ return true;
+ }
+ else if (sAction == "closemenu")
+ {
+ OString sId = OUStringToOString(rData["data"], RTL_TEXTENCODING_ASCII_US);
+ pToolbar->set_menu_item_active(sId, false);
+ return true;
+ }
+ else if (sAction == "openmenu")
+ {
+ OString sId = OUStringToOString(rData["data"], RTL_TEXTENCODING_ASCII_US);
+ pToolbar->set_menu_item_active(sId, true);
return true;
}
}
diff --git a/vcl/jsdialog/jsdialogbuilder.cxx b/vcl/jsdialog/jsdialogbuilder.cxx
index ff543ca60be8..ac66f669c239 100644
--- a/vcl/jsdialog/jsdialogbuilder.cxx
+++ b/vcl/jsdialog/jsdialogbuilder.cxx
@@ -517,7 +517,10 @@ JSInstanceBuilder::JSInstanceBuilder(weld::Widget* pParent, const OUString& rUIR
{
// when it is a popup we initialize sender in weld_popover
if (bPopup)
+ {
+ m_sTypeOfJSON = "popup";
return;
+ }
vcl::Window* pRoot = m_xBuilder->get_widget_root();
@@ -666,6 +669,9 @@ JSInstanceBuilder* JSInstanceBuilder::CreatePopupBuilder(weld::Widget* pParent,
JSInstanceBuilder::~JSInstanceBuilder()
{
+ if (m_sTypeOfJSON == "popup")
+ sendClosePopup(m_nWindowId);
+
if (m_aWindowToRelease)
{
m_aWindowToRelease->ReleaseLOKNotifier();
diff --git a/vcl/source/app/salvtables.cxx b/vcl/source/app/salvtables.cxx
index 97330df96b58..f3797237e1fa 100644
--- a/vcl/source/app/salvtables.cxx
+++ b/vcl/source/app/salvtables.cxx
@@ -391,6 +391,15 @@ void SalInstanceWidget::set_tooltip_text(const OUString& rTip)
OUString SalInstanceWidget::get_tooltip_text() const { return m_xWidget->GetQuickHelpText(); }
+void SalInstanceWidget::set_cursor_data(void * pData)
+{
+ vcl::Cursor * pCursor = static_cast<vcl::Cursor *>(pData);
+ if (!pCursor)
+ return;
+
+ m_xWidget->SetCursor(pCursor);
+}
+
void SalInstanceWidget::connect_focus_in(const Link<Widget&, void>& rLink)
{
ensure_event_listener();
diff --git a/vcl/unx/gtk3/gtk3gtkinst.cxx b/vcl/unx/gtk3/gtk3gtkinst.cxx
index 9fd92aa39b9c..292cd3bb764b 100644
--- a/vcl/unx/gtk3/gtk3gtkinst.cxx
+++ b/vcl/unx/gtk3/gtk3gtkinst.cxx
@@ -2874,6 +2874,8 @@ public:
return OUString(pStr, pStr ? strlen(pStr) : 0, RTL_TEXTENCODING_UTF8);
}
+ virtual void set_cursor_data(void * /*pData*/) override {};
+
virtual std::unique_ptr<weld::Container> weld_parent() const override;
virtual OString get_buildable_name() const override
diff --git a/xmlsecurity/source/gpg/SecurityEnvironment.hxx b/xmlsecurity/source/gpg/SecurityEnvironment.hxx
index c815e0e1f5d2..548d76597f56 100644
--- a/xmlsecurity/source/gpg/SecurityEnvironment.hxx
+++ b/xmlsecurity/source/gpg/SecurityEnvironment.hxx
@@ -11,6 +11,9 @@
#define INCLUDED_XMLSECURITY_SOURCE_GPG_SECURITYENVIRONMENT_HXX
#include <sal/config.h>
+
+#include <memory>
+
#include <rtl/ustring.hxx>
#include <cppuhelper/implbase.hxx>