canvas/source/cairo/cairo_canvashelper.cxx | 5 drawinglayer/source/processor2d/vclhelperbufferdevice.cxx | 1 include/svx/svdundo.hxx | 14 -- reportdesign/source/core/inc/ReportUndoFactory.hxx | 2 reportdesign/source/core/sdr/ReportUndoFactory.cxx | 4 sc/inc/rangelst.hxx | 2 sc/inc/textuno.hxx | 21 +-- sc/source/core/data/attrib.cxx | 9 + sc/source/core/data/drwlayer.cxx | 2 sc/source/core/tool/rangelst.cxx | 22 +++ sc/source/filter/xml/celltextparacontext.cxx | 9 + sc/source/filter/xml/celltextparacontext.hxx | 3 sc/source/filter/xml/xmlcelli.cxx | 6 - sc/source/filter/xml/xmlcelli.hxx | 2 sc/source/filter/xml/xmlexprt.cxx | 6 - sc/source/filter/xml/xmlimprt.cxx | 1 sc/source/filter/xml/xmlimprt.hxx | 1 sc/source/ui/undo/undoblk3.cxx | 2 sc/source/ui/unoobj/fielduno.cxx | 12 +- sc/source/ui/unoobj/textuno.cxx | 38 ++++-- sd/source/core/drawdoc3.cxx | 20 --- sd/source/ui/annotations/annotationwindow.cxx | 4 sd/source/ui/func/undoback.cxx | 43 ------- sd/source/ui/inc/undoback.hxx | 6 - svx/source/dialog/frmsel.cxx | 1 svx/source/svdraw/svdundo.cxx | 84 -------------- sw/qa/extras/odfimport/data/tdf103025.odt |binary sw/qa/extras/odfimport/odfimport.cxx | 9 + sw/source/core/layout/pagechg.cxx | 16 -- vcl/inc/unx/gtk/gtkframe.hxx | 6 - vcl/inc/unx/gtk/gtkinst.hxx | 3 vcl/unx/gtk/gtkinst.cxx | 21 +++ vcl/unx/gtk/gtksalframe.cxx | 16 ++ vcl/unx/gtk3/gtk3gtkframe.cxx | 27 ++-- 34 files changed, 184 insertions(+), 234 deletions(-)
New commits: commit 6c787e4a7a28d84b8a3f2ad5fa84d9d66ad4594e Author: Michael Stahl <mst...@redhat.com> Date: Wed Oct 5 23:09:25 2016 +0200 tdf#103025 sw: don't format header/footer in SwPageFrame::PreparePage() This has always been dead code because it used wrong constants FRMTYPE_HEADER|FRMTYPE_FOOTER which is actually Page|Column and SwPageFrame and SwColumnFrame are not direct children of SwPageFrame. Then commit 901e5c3a21a1299d10c44bc844246fe8c329bb82 fixed the constants but somehow the early formatting of header/footer results in wrong expansion of variable text fields, so just remove this code. (cherry picked from commit f933da55797566cf725e35ab0df17e91c7d5598f) Reviewed-on: https://gerrit.libreoffice.org/29558 Tested-by: Jenkins <c...@libreoffice.org> Reviewed-by: Miklos Vajna <vmik...@collabora.co.uk> (cherry picked from commit 63ba0dc9e12169e9a929231a01172c85fab2f628) Change-Id: I0af13168970f26355a1b247e071235166d08b7a4 diff --git a/sw/qa/extras/odfimport/data/tdf103025.odt b/sw/qa/extras/odfimport/data/tdf103025.odt new file mode 100644 index 0000000..bd1e573 Binary files /dev/null and b/sw/qa/extras/odfimport/data/tdf103025.odt differ diff --git a/sw/qa/extras/odfimport/odfimport.cxx b/sw/qa/extras/odfimport/odfimport.cxx index 79dae52..3a8e2a5 100644 --- a/sw/qa/extras/odfimport/odfimport.cxx +++ b/sw/qa/extras/odfimport/odfimport.cxx @@ -631,6 +631,15 @@ DECLARE_ODFIMPORT_TEST(testBnc800714, "bnc800714.fodt") CPPUNIT_ASSERT(getProperty<bool>(getParagraph(2), "ParaKeepTogether")); } +DECLARE_ODFIMPORT_TEST(testTdf103025, "tdf103025.odt") +{ + CPPUNIT_ASSERT_EQUAL(OUString("2014-01"), parseDump("/root/page[1]/header/tab[2]/row[2]/cell[3]/txt/Special", "rText")); + CPPUNIT_ASSERT_EQUAL(OUString("2014-01"), parseDump("/root/page[2]/header/tab[2]/row[2]/cell[3]/txt/Special", "rText")); + CPPUNIT_ASSERT_EQUAL(OUString("2014-02"), parseDump("/root/page[3]/header/tab[2]/row[2]/cell[3]/txt/Special", "rText")); + CPPUNIT_ASSERT_EQUAL(OUString("2014-03"), parseDump("/root/page[4]/header/tab[2]/row[2]/cell[3]/txt/Special", "rText")); + CPPUNIT_ASSERT_EQUAL(OUString("2014-03"), parseDump("/root/page[5]/header/tab[2]/row[2]/cell[3]/txt/Special", "rText")); +} + DECLARE_ODFIMPORT_TEST(testTdf76322_columnBreakInHeader, "tdf76322_columnBreakInHeader.docx") { // column breaks were ignored. First line should start in column 2 diff --git a/sw/source/core/layout/pagechg.cxx b/sw/source/core/layout/pagechg.cxx index b9babcb..b9861b2 100644 --- a/sw/source/core/layout/pagechg.cxx +++ b/sw/source/core/layout/pagechg.cxx @@ -465,22 +465,6 @@ void SwPageFrame::PreparePage( bool bFootnote ) if ( GetPrev() && static_cast<SwPageFrame*>(GetPrev())->IsEmptyPage() ) lcl_MakeObjs( *pDoc->GetSpzFrameFormats(), static_cast<SwPageFrame*>(GetPrev()) ); lcl_MakeObjs( *pDoc->GetSpzFrameFormats(), this ); - - // format footer/ header - SwLayoutFrame *pLow = static_cast<SwLayoutFrame*>(Lower()); - while ( pLow ) - { - if ( pLow->GetType() & (FRM_HEADER|FRM_FOOTER) ) - { - SwContentFrame *pContent = pLow->ContainsContent(); - while ( pContent && pLow->IsAnLower( pContent ) ) - { - pContent->OptCalc(); // not the predecessors - pContent = pContent->GetNextContentFrame(); - } - } - pLow = static_cast<SwLayoutFrame*>(pLow->GetNext()); - } } } commit 44bac1d70b8f267fa4ac938078927ad9d79d64f2 Author: Markus Mohrhard <markus.mohrh...@googlemail.com> Date: Wed Oct 5 21:10:12 2016 +0100 tdf#93967 - better fix for leak around calc header-footer UNO objects Change-Id: I950479e8e1c634aa9ad13bf3e0e9d24485a1e6b2 (cherry picked from commit 052f98d0b1a6b0607069f0a50d4e03fcd4a1d52a) diff --git a/sc/inc/textuno.hxx b/sc/inc/textuno.hxx index 9a64157..fb51b01 100644 --- a/sc/inc/textuno.hxx +++ b/sc/inc/textuno.hxx @@ -29,6 +29,7 @@ #include <com/sun/star/lang/XServiceInfo.hpp> #include <com/sun/star/lang/XUnoTunnel.hpp> #include <cppuhelper/implbase.hxx> +#include <cppuhelper/weakref.hxx> #include <rtl/ref.hxx> #include "scdllapi.h" @@ -66,12 +67,8 @@ private: rtl::Reference<ScHeaderFooterTextObj> mxCenterText; rtl::Reference<ScHeaderFooterTextObj> mxRightText; - ScHeaderFooterContentObj(); // disabled - public: - ScHeaderFooterContentObj( const EditTextObject* pLeft, - const EditTextObject* pCenter, - const EditTextObject* pRight ); + ScHeaderFooterContentObj(); virtual ~ScHeaderFooterContentObj(); // for ScPageHFItem (using getImplementation) @@ -79,6 +76,10 @@ public: const EditTextObject* GetCenterEditObject() const; const EditTextObject* GetRightEditObject() const; + void Init( const EditTextObject* pLeft, + const EditTextObject* pCenter, + const EditTextObject* pRight); + // XHeaderFooterContent virtual css::uno::Reference< css::text::XText > SAL_CALL getLeftText() throw(css::uno::RuntimeException, std::exception) override; @@ -110,15 +111,15 @@ class ScHeaderFooterTextData : boost::noncopyable { private: EditTextObject* mpTextObj; - rtl::Reference<ScHeaderFooterContentObj> rContentObj; - sal_uInt16 nPart; + css::uno::WeakReference<css::sheet::XHeaderFooterContent> xContentObj; + sal_uInt16 nPart; ScEditEngineDefaulter* pEditEngine; SvxEditEngineForwarder* pForwarder; bool bDataValid; public: ScHeaderFooterTextData( - rtl::Reference<ScHeaderFooterContentObj> const & rContent, sal_uInt16 nP, const EditTextObject* pTextObj); + css::uno::WeakReference<css::sheet::XHeaderFooterContent> xContent, sal_uInt16 nP, const EditTextObject* pTextObj); ~ScHeaderFooterTextData(); // helper functions @@ -128,7 +129,7 @@ public: ScEditEngineDefaulter* GetEditEngine() { GetTextForwarder(); return pEditEngine; } sal_uInt16 GetPart() const { return nPart; } - rtl::Reference<ScHeaderFooterContentObj> GetContentObj() const { return rContentObj; } + const css::uno::Reference<css::sheet::XHeaderFooterContent> GetContentObj() const { return xContentObj; } const EditTextObject* GetTextObject() const { return mpTextObj;} }; @@ -154,7 +155,7 @@ private: public: ScHeaderFooterTextObj( - rtl::Reference<ScHeaderFooterContentObj> const & rContent, sal_uInt16 nP, const EditTextObject* pTextObj); + css::uno::WeakReference<css::sheet::XHeaderFooterContent> xContent, sal_uInt16 nP, const EditTextObject* pTextObj); virtual ~ScHeaderFooterTextObj(); const EditTextObject* GetTextObject() const; diff --git a/sc/source/core/data/attrib.cxx b/sc/source/core/data/attrib.cxx index c84b0cb..a4412eb 100644 --- a/sc/source/core/data/attrib.cxx +++ b/sc/source/core/data/attrib.cxx @@ -565,10 +565,13 @@ ScPageHFItem::~ScPageHFItem() bool ScPageHFItem::QueryValue( uno::Any& rVal, sal_uInt8 /* nMemberId */ ) const { - uno::Reference<sheet::XHeaderFooterContent> xContent = - new ScHeaderFooterContentObj( pLeftArea, pCenterArea, pRightArea ); + rtl::Reference<ScHeaderFooterContentObj> xContent = + new ScHeaderFooterContentObj(); + xContent->Init(pLeftArea, pCenterArea, pRightArea); - rVal <<= xContent; + uno::Reference<sheet::XHeaderFooterContent> xCont(xContent.get()); + + rVal <<= xCont; return true; } diff --git a/sc/source/ui/unoobj/fielduno.cxx b/sc/source/ui/unoobj/fielduno.cxx index b9a80c9..0e0b719 100644 --- a/sc/source/ui/unoobj/fielduno.cxx +++ b/sc/source/ui/unoobj/fielduno.cxx @@ -505,15 +505,19 @@ uno::Reference<text::XTextField> ScHeaderFieldsObj::GetObjectByIndex_Impl(sal_In // Get the parent text range instance. uno::Reference<text::XTextRange> xTextRange; - rtl::Reference<ScHeaderFooterContentObj> rContentObj = mrData.GetContentObj(); + uno::Reference<sheet::XHeaderFooterContent> xContentObj = mrData.GetContentObj(); + if (!xContentObj.is()) + throw uno::RuntimeException(""); + + rtl::Reference<ScHeaderFooterContentObj> pContentObj = ScHeaderFooterContentObj::getImplementation(xContentObj); uno::Reference<text::XText> xText; sal_uInt16 nPart = mrData.GetPart(); if (nPart == SC_HDFT_LEFT) - xText = rContentObj->getLeftText(); + xText = pContentObj->getLeftText(); else if (nPart == SC_HDFT_CENTER) - xText = rContentObj->getCenterText(); + xText = pContentObj->getCenterText(); else - xText = rContentObj->getRightText(); + xText = pContentObj->getRightText(); uno::Reference<text::XTextRange> xTemp(xText, uno::UNO_QUERY); xTextRange = xTemp; diff --git a/sc/source/ui/unoobj/textuno.cxx b/sc/source/ui/unoobj/textuno.cxx index 3758fe1..3366640 100644 --- a/sc/source/ui/unoobj/textuno.cxx +++ b/sc/source/ui/unoobj/textuno.cxx @@ -88,15 +88,20 @@ static const SvxItemPropertySet * lcl_GetHdFtPropertySet() SC_SIMPLE_SERVICE_INFO( ScHeaderFooterContentObj, "ScHeaderFooterContentObj", "com.sun.star.sheet.HeaderFooterContent" ) SC_SIMPLE_SERVICE_INFO( ScHeaderFooterTextObj, "ScHeaderFooterTextObj", "stardiv.one.Text.Text" ) -ScHeaderFooterContentObj::ScHeaderFooterContentObj( const EditTextObject* pLeft, - const EditTextObject* pCenter, - const EditTextObject* pRight ) : - mxLeftText(new ScHeaderFooterTextObj(this, SC_HDFT_LEFT, pLeft)), - mxCenterText(new ScHeaderFooterTextObj(this, SC_HDFT_CENTER, pCenter)), - mxRightText(new ScHeaderFooterTextObj(this, SC_HDFT_RIGHT, pRight)) +ScHeaderFooterContentObj::ScHeaderFooterContentObj() { } +void ScHeaderFooterContentObj::Init( const EditTextObject* pLeft, + const EditTextObject* pCenter, + const EditTextObject* pRight ) +{ + uno::Reference<css::sheet::XHeaderFooterContent> xThis(this); + mxLeftText = rtl::Reference<ScHeaderFooterTextObj>(new ScHeaderFooterTextObj(xThis, SC_HDFT_LEFT, pLeft)); + mxCenterText = rtl::Reference<ScHeaderFooterTextObj>(new ScHeaderFooterTextObj(xThis, SC_HDFT_CENTER, pCenter)); + mxRightText = rtl::Reference<ScHeaderFooterTextObj>(new ScHeaderFooterTextObj(xThis, SC_HDFT_RIGHT, pRight)); +} + ScHeaderFooterContentObj::~ScHeaderFooterContentObj() {} const EditTextObject* ScHeaderFooterContentObj::GetLeftEditObject() const @@ -175,9 +180,9 @@ rtl::Reference<ScHeaderFooterContentObj> ScHeaderFooterContentObj::getImplementa } ScHeaderFooterTextData::ScHeaderFooterTextData( - rtl::Reference<ScHeaderFooterContentObj> const & rContent, sal_uInt16 nP, const EditTextObject* pTextObj) : + uno::WeakReference<sheet::XHeaderFooterContent> xContent, sal_uInt16 nP, const EditTextObject* pTextObj) : mpTextObj(pTextObj ? pTextObj->Clone() : nullptr), - rContentObj( rContent ), + xContentObj( xContent ), nPart( nP ), pEditEngine( nullptr ), pForwarder( nullptr ), @@ -253,8 +258,8 @@ void ScHeaderFooterTextData::UpdateData(EditEngine& rEditEngine) } ScHeaderFooterTextObj::ScHeaderFooterTextObj( - rtl::Reference<ScHeaderFooterContentObj> const & rContent, sal_uInt16 nP, const EditTextObject* pTextObj) : - aTextData(rContent, nP, pTextObj) + uno::WeakReference<sheet::XHeaderFooterContent> xContent, sal_uInt16 nP, const EditTextObject* pTextObj) : + aTextData(xContent, nP, pTextObj) { // ScHeaderFooterTextData acquires rContent // pUnoText is created on demand (getString/setString work without it) @@ -321,15 +326,20 @@ OUString SAL_CALL ScHeaderFooterTextObj::getString() throw(uno::RuntimeException OUString aRet; const EditTextObject* pData; + uno::Reference<css::sheet::XHeaderFooterContent> xContentObj = aTextData.GetContentObj(); + if (!xContentObj.is()) + throw css::uno::RuntimeException(""); + + rtl::Reference<ScHeaderFooterContentObj> pContentObj = ScHeaderFooterContentObj::getImplementation(xContentObj); + sal_uInt16 nPart = aTextData.GetPart(); - rtl::Reference<ScHeaderFooterContentObj> rContentObj = aTextData.GetContentObj(); if (nPart == SC_HDFT_LEFT) - pData = rContentObj->GetLeftEditObject(); + pData = pContentObj->GetLeftEditObject(); else if (nPart == SC_HDFT_CENTER) - pData = rContentObj->GetCenterEditObject(); + pData = pContentObj->GetCenterEditObject(); else - pData = rContentObj->GetRightEditObject(); + pData = pContentObj->GetRightEditObject(); if (pData) { // for pure text, no font info is needed in pool defaults commit f7c78ad2ea504ade0232337c56d4774b62ffaa19 Author: Caolán McNamara <caol...@redhat.com> Date: Thu Oct 6 09:56:29 2016 +0100 Resolves: tdf#103026 invalid dash causes CAIRO_STATUS_INVALID_DASH state (cherry picked from commit c5d355e9c9cbc94eede8f438895e192d834f7096) Change-Id: I072635ff7c67022ebfd5bdb475e390f3aab7a51c Reviewed-on: https://gerrit.libreoffice.org/29553 Tested-by: Jenkins <c...@libreoffice.org> Reviewed-by: Michael Stahl <mst...@redhat.com> (cherry picked from commit 91e0a73984f72e0f04e6087524332f6354f627d0) diff --git a/canvas/source/cairo/cairo_canvashelper.cxx b/canvas/source/cairo/cairo_canvashelper.cxx index 8d974af..1e41b3a 100644 --- a/canvas/source/cairo/cairo_canvashelper.cxx +++ b/canvas/source/cairo/cairo_canvashelper.cxx @@ -1209,7 +1209,10 @@ namespace cairocanvas break; } - if( strokeAttributes.DashArray.getLength() > 0 ) + //tdf#103026 If the w scaling is 0, then all dashes become zero so + //cairo will set the cairo_t status to CAIRO_STATUS_INVALID_DASH + //and no further drawing will occur + if (strokeAttributes.DashArray.getLength() > 0 && w > 0.0) { double* pDashArray = new double[ strokeAttributes.DashArray.getLength() ]; for( sal_Int32 i=0; i<strokeAttributes.DashArray.getLength(); i++ ) commit 5a052d8a792fb1a5156030cf827c6f8cf15344c7 Author: Caolán McNamara <caol...@redhat.com> Date: Sat Oct 1 21:09:48 2016 +0100 Engine() return mpOutliner, so can crash if Engine() used post delete if Deactivate called during ::dispose (cherry picked from commit 86617760eb8bc6c0b2713b9496ade9203d1077a5) Change-Id: I066dcc52278f12442de0281c8d783353aed5a186 Reviewed-on: https://gerrit.libreoffice.org/29444 Reviewed-by: Michael Stahl <mst...@redhat.com> Tested-by: jan iversen <j...@documentfoundation.org> Tested-by: Jenkins <c...@libreoffice.org> (cherry picked from commit 0570ddd7377c825e6cff7e71d07452223d230b6b) diff --git a/sd/source/ui/annotations/annotationwindow.cxx b/sd/source/ui/annotations/annotationwindow.cxx index dcbeb22..1b2fd38 100644 --- a/sd/source/ui/annotations/annotationwindow.cxx +++ b/sd/source/ui/annotations/annotationwindow.cxx @@ -298,6 +298,7 @@ void AnnotationWindow::dispose() mpMeta.disposeAndClear(); delete mpOutlinerView; delete mpOutliner; + mpOutliner = nullptr; mpVScrollbar.disposeAndClear(); mpTextWindow.disposeAndClear(); FloatingWindow::dispose(); @@ -613,6 +614,9 @@ void AnnotationWindow::SetColor() void AnnotationWindow::Deactivate() { + if (!mpOutliner) //in dispose + return; + Reference< XAnnotation > xAnnotation( mxAnnotation ); // write changed text back to annotation commit 058c92aaee400815877d29bb9b20781e121f003e Author: Markus Mohrhard <markus.mohrh...@googlemail.com> Date: Sun Oct 2 18:27:32 2016 +0200 support TargetFrame in url field import/export code, tdf#77873 Change-Id: Id09ecbd10b8ee60371f223d62f2dd6fe1c2296ca Reviewed-on: https://gerrit.libreoffice.org/29459 Tested-by: Jenkins <c...@libreoffice.org> Reviewed-by: Markus Mohrhard <markus.mohrh...@googlemail.com> (cherry picked from commit b11ad787372c4b833cc58a3738e375af26309b8d) Reviewed-on: https://gerrit.libreoffice.org/29482 Reviewed-by: Eike Rathke <er...@redhat.com> Tested-by: Eike Rathke <er...@redhat.com> (cherry picked from commit 0d60b0dc1208b01b659fd1af4b33d1a7f6ee737d) diff --git a/sc/source/filter/xml/celltextparacontext.cxx b/sc/source/filter/xml/celltextparacontext.cxx index 3f6c64b..dc89e14 100644 --- a/sc/source/filter/xml/celltextparacontext.cxx +++ b/sc/source/filter/xml/celltextparacontext.cxx @@ -94,9 +94,9 @@ void ScXMLCellTextParaContext::PushFieldTitle(const OUString& rStyleName) } void ScXMLCellTextParaContext::PushFieldURL( - const OUString& rURL, const OUString& rRep, const OUString& rStyleName) + const OUString& rURL, const OUString& rRep, const OUString& rStyleName, const OUString& rTargetFrame) { - mrParentCxt.PushParagraphFieldURL(rURL, rRep, rStyleName); + mrParentCxt.PushParagraphFieldURL(rURL, rRep, rStyleName, rTargetFrame); } ScXMLCellTextSpanContext::ScXMLCellTextSpanContext( @@ -325,6 +325,9 @@ void ScXMLCellFieldURLContext::StartElement(const uno::Reference<xml::sax::XAttr case XML_TOK_CELL_TEXT_URL_ATTR_TYPE: // Ignored for now. break; + case XML_TOK_CELL_TEXT_URL_TARGET_FRAME: + maTargetFrame = rAttrValue; + break; default: ; } @@ -333,7 +336,7 @@ void ScXMLCellFieldURLContext::StartElement(const uno::Reference<xml::sax::XAttr void ScXMLCellFieldURLContext::EndElement() { - mrParentCxt.PushFieldURL(maURL, maRep, maStyleName); + mrParentCxt.PushFieldURL(maURL, maRep, maStyleName, maTargetFrame); } void ScXMLCellFieldURLContext::Characters(const OUString& rChars) diff --git a/sc/source/filter/xml/celltextparacontext.hxx b/sc/source/filter/xml/celltextparacontext.hxx index 65487b8..f6b8e2c 100644 --- a/sc/source/filter/xml/celltextparacontext.hxx +++ b/sc/source/filter/xml/celltextparacontext.hxx @@ -35,7 +35,7 @@ public: void PushFieldSheetName(const OUString& rStyleName); void PushFieldDate(const OUString& rStyleName); void PushFieldTitle(const OUString& rStyleName); - void PushFieldURL(const OUString& rURL, const OUString& rRep, const OUString& rStyleName); + void PushFieldURL(const OUString& rURL, const OUString& rRep, const OUString& rStyleName, const OUString& rTargetFrame); }; /** @@ -122,6 +122,7 @@ class ScXMLCellFieldURLContext : public ScXMLImportContext OUString maStyleName; OUString maURL; OUString maRep; + OUString maTargetFrame; public: ScXMLCellFieldURLContext(ScXMLImport& rImport, sal_uInt16 nPrefix, const OUString& rLName, ScXMLCellTextParaContext& rParent); diff --git a/sc/source/filter/xml/xmlcelli.cxx b/sc/source/filter/xml/xmlcelli.cxx index b3d830b..111af44 100644 --- a/sc/source/filter/xml/xmlcelli.cxx +++ b/sc/source/filter/xml/xmlcelli.cxx @@ -629,10 +629,12 @@ void ScXMLTableRowCellContext::PushParagraphFieldDocTitle(const OUString& rStyle } void ScXMLTableRowCellContext::PushParagraphFieldURL( - const OUString& rURL, const OUString& rRep, const OUString& rStyleName) + const OUString& rURL, const OUString& rRep, const OUString& rStyleName, const OUString& rTargetFrame) { OUString aAbsURL = GetScImport().GetAbsoluteReference(rURL); - PushParagraphField(new SvxURLField(aAbsURL, rRep, SVXURLFORMAT_REPR), rStyleName); + SvxURLField* pURLField = new SvxURLField(aAbsURL, rRep, SVXURLFORMAT_REPR); + pURLField->SetTargetFrame(rTargetFrame); + PushParagraphField(pURLField, rStyleName); } void ScXMLTableRowCellContext::PushParagraphEnd() diff --git a/sc/source/filter/xml/xmlcelli.hxx b/sc/source/filter/xml/xmlcelli.hxx index 56090ca..d72bc20 100644 --- a/sc/source/filter/xml/xmlcelli.hxx +++ b/sc/source/filter/xml/xmlcelli.hxx @@ -143,7 +143,7 @@ public: void PushParagraphFieldDate(const OUString& rStyleName); void PushParagraphFieldSheetName(const OUString& rStyleName); void PushParagraphFieldDocTitle(const OUString& rStyleName); - void PushParagraphFieldURL(const OUString& rURL, const OUString& rRep, const OUString& rStyleName); + void PushParagraphFieldURL(const OUString& rURL, const OUString& rRep, const OUString& rStyleName, const OUString& rTargetFrame); void PushParagraphEnd(); void SetAnnotation( const ScAddress& rPosition ); diff --git a/sc/source/filter/xml/xmlexprt.cxx b/sc/source/filter/xml/xmlexprt.cxx index 25eb603..aa8ec4a 100644 --- a/sc/source/filter/xml/xmlexprt.cxx +++ b/sc/source/filter/xml/xmlexprt.cxx @@ -2951,9 +2951,13 @@ void writeContent( { // <text:a xlink:href="url" xlink:type="simple">value</text:a> - OUString aURL = static_cast<const SvxURLField*>(pField)->GetURL(); + const SvxURLField* pURLField = static_cast<const SvxURLField*>(pField); + OUString aURL = pURLField->GetURL(); rExport.AddAttribute(XML_NAMESPACE_XLINK, XML_HREF, rExport.GetRelativeReference(aURL)); rExport.AddAttribute(XML_NAMESPACE_XLINK, XML_TYPE, "simple"); + OUString aTargetFrame = pURLField->GetTargetFrame(); + if (!aTargetFrame.isEmpty()) + rExport.AddAttribute(XML_NAMESPACE_OFFICE, XML_TARGET_FRAME_NAME, aTargetFrame); OUString aElemName = rExport.GetNamespaceMap().GetQNameByKey( XML_NAMESPACE_TEXT, GetXMLToken(XML_A)); diff --git a/sc/source/filter/xml/xmlimprt.cxx b/sc/source/filter/xml/xmlimprt.cxx index 2a7d485..897f66f 100644 --- a/sc/source/filter/xml/xmlimprt.cxx +++ b/sc/source/filter/xml/xmlimprt.cxx @@ -1893,6 +1893,7 @@ const SvXMLTokenMap& ScXMLImport::GetCellTextURLAttrTokenMap() { { XML_NAMESPACE_XLINK, XML_HREF, XML_TOK_CELL_TEXT_URL_ATTR_UREF }, { XML_NAMESPACE_XLINK, XML_TYPE, XML_TOK_CELL_TEXT_URL_ATTR_TYPE }, + { XML_NAMESPACE_OFFICE, XML_TARGET_FRAME_NAME, XML_TOK_CELL_TEXT_URL_TARGET_FRAME }, XML_TOKEN_MAP_END }; diff --git a/sc/source/filter/xml/xmlimprt.hxx b/sc/source/filter/xml/xmlimprt.hxx index 882f1f0..6fc09d1 100644 --- a/sc/source/filter/xml/xmlimprt.hxx +++ b/sc/source/filter/xml/xmlimprt.hxx @@ -739,6 +739,7 @@ enum ScXMLCellTextURLAttrTokens { XML_TOK_CELL_TEXT_URL_ATTR_UREF, XML_TOK_CELL_TEXT_URL_ATTR_TYPE, + XML_TOK_CELL_TEXT_URL_TARGET_FRAME }; /** commit 549b11618a0dad1318d7cb1a244f5ad590ee9f46 Author: Markus Mohrhard <markus.mohrh...@googlemail.com> Date: Sat Oct 1 01:31:09 2016 +0200 tdf#101910, mark ScRangeList updated when DeleteArea was used Change-Id: I98390b28c5a1bbbd391ff054b2f574951c7c00c4 Reviewed-on: https://gerrit.libreoffice.org/29422 Reviewed-by: Markus Mohrhard <markus.mohrh...@googlemail.com> Tested-by: Jenkins <c...@libreoffice.org> (cherry picked from commit 5f658dc87794036182aa1f8586d82c5ee997cd8b) Reviewed-on: https://gerrit.libreoffice.org/29425 Reviewed-by: Eike Rathke <er...@redhat.com> Tested-by: Eike Rathke <er...@redhat.com> (cherry picked from commit ab80caf6359ac1bcf95b113b6c3b543dee0ed105) diff --git a/sc/inc/rangelst.hxx b/sc/inc/rangelst.hxx index 9eae5b9..9d72596 100644 --- a/sc/inc/rangelst.hxx +++ b/sc/inc/rangelst.hxx @@ -62,7 +62,7 @@ public: /** For now this method assumes that nTab1 == nTab2 * The algorithm will be much more complicated if nTab1 != nTab2 */ - void DeleteArea( SCCOL nCol1, SCROW nRow1, SCTAB nTab1, SCCOL nCol2, + bool DeleteArea( SCCOL nCol1, SCROW nRow1, SCTAB nTab1, SCCOL nCol2, SCROW nRow2, SCTAB nTab2 ); const ScRange* Find( const ScAddress& ) const; diff --git a/sc/source/core/tool/rangelst.cxx b/sc/source/core/tool/rangelst.cxx index 10e7952..e26f18a 100644 --- a/sc/source/core/tool/rangelst.cxx +++ b/sc/source/core/tool/rangelst.cxx @@ -398,11 +398,11 @@ bool ScRangeList::UpdateReference( { if(nDx < 0) { - DeleteArea(nCol1+nDx, nRow1, nTab1, nCol1-1, nRow2, nTab2); + bChanged = DeleteArea(nCol1+nDx, nRow1, nTab1, nCol1-1, nRow2, nTab2); } if(nDy < 0) { - DeleteArea(nCol1, nRow1+nDy, nTab1, nCol2, nRow1-1, nTab2); + bChanged = DeleteArea(nCol1, nRow1+nDy, nTab1, nCol2, nRow1-1, nTab2); } SAL_WARN_IF(nDx < 0 && nDy < 0, "sc", "nDx and nDy are negative, check why"); } @@ -940,9 +940,10 @@ bool handleFourRanges( const ScRange& rDelRange, ScRange* p, std::vector<ScRange } -void ScRangeList::DeleteArea( SCCOL nCol1, SCROW nRow1, SCTAB nTab1, +bool ScRangeList::DeleteArea( SCCOL nCol1, SCROW nRow1, SCTAB nTab1, SCCOL nCol2, SCROW nRow2, SCTAB nTab2 ) { + bool bChanged = false; ScRange aRange( nCol1, nRow1, nTab1, nCol2, nRow2, nTab2 ); for(size_t i = 0; i < maRanges.size();) { @@ -950,6 +951,7 @@ void ScRangeList::DeleteArea( SCCOL nCol1, SCROW nRow1, SCTAB nTab1, { ScRange* pRange = Remove(i); delete pRange; + bChanged = true; } else ++i; @@ -975,12 +977,18 @@ void ScRangeList::DeleteArea( SCCOL nCol1, SCROW nRow1, SCTAB nTab1, // r.aStart.X() <= p.aStart.X() && r.aEnd.X() >= p.aEnd.X() // && ( r.aStart.Y() <= p.aStart.Y() || r.aEnd.Y() >= r.aEnd.Y() ) if(handleOneRange( aRange, *itr )) + { + bChanged = true; continue; + } // getting two ranges // r.aStart.X() else if(handleTwoRanges( aRange, *itr, aNewRanges )) + { + bChanged = true; continue; + } // getting 3 ranges // r.aStart.X() > p.aStart.X() && r.aEnd.X() >= p.aEnd.X() @@ -989,16 +997,24 @@ void ScRangeList::DeleteArea( SCCOL nCol1, SCROW nRow1, SCTAB nTab1, // r.aStart.X() <= p.aStart.X() && r.aEnd.X() < p.aEnd.X() // && r.aStart.Y() > p.aStart.Y() && r.aEnd.Y() < p.aEnd.Y() else if(handleThreeRanges( aRange, *itr, aNewRanges )) + { + bChanged = true; continue; + } // getting 4 ranges // r.aStart.X() > p.aStart.X() && r.aEnd().X() < p.aEnd.X() // && r.aStart.Y() > p.aStart.Y() && r.aEnd().Y() < p.aEnd.Y() else if(handleFourRanges( aRange, *itr, aNewRanges )) + { + bChanged = true; continue; + } } for(vector<ScRange>::iterator itr = aNewRanges.begin(); itr != aNewRanges.end(); ++itr) Join( *itr); + + return bChanged; } const ScRange* ScRangeList::Find( const ScAddress& rAdr ) const commit 6d8fb426b1fcea2af8a64ca02ce06b9baab52feb Author: Markus Mohrhard <markus.mohrh...@googlemail.com> Date: Wed Sep 28 03:55:01 2016 +0200 tdf#99386, broadcast that cell content changed after merge cells undo/redo Change-Id: Idf41d1b07e26af66d9eefd18e5d5b582edc205e9 Reviewed-on: https://gerrit.libreoffice.org/29370 Tested-by: Jenkins <c...@libreoffice.org> Reviewed-by: Markus Mohrhard <markus.mohrh...@googlemail.com> (cherry picked from commit f6f213bed507d1d7547f6098a67b6e460d46bce6) Reviewed-on: https://gerrit.libreoffice.org/29377 Reviewed-by: jan iversen <j...@documentfoundation.org> (cherry picked from commit 47d1aa87cbe8390f9c6190b13733f8c1fd240e30) diff --git a/sc/source/ui/undo/undoblk3.cxx b/sc/source/ui/undo/undoblk3.cxx index 9dfa81a..c1dbd34 100644 --- a/sc/source/ui/undo/undoblk3.cxx +++ b/sc/source/ui/undo/undoblk3.cxx @@ -725,6 +725,8 @@ void ScUndoMerge::DoChange( bool bUndo ) const if (!bDidPaint) ScUndoUtil::PaintMore(pDocShell, aRange); + + rDoc.BroadcastCells(aRange, SC_HINT_DATACHANGED); } ShowTable(aCurRange); commit 718280fa3383952afaa7a2a6cd6d3129af27d5d4 Author: Caolán McNamara <caol...@redhat.com> Date: Thu Sep 29 14:16:20 2016 +0100 Resolves: tdf#101433 reset RasterOpMode on cached virtual device before reuse (cherry picked from commit 17f912c5bb63426f0758dccbc3357a73f56f3137) Change-Id: I178aa499b080b0b684d41fdd4115a6398f944c43 Reviewed-on: https://gerrit.libreoffice.org/29390 Tested-by: Jenkins <c...@libreoffice.org> Reviewed-by: jan iversen <j...@documentfoundation.org> (cherry picked from commit 0537b554fd4ac56c1ac1c81e268ef1713c992cbd) diff --git a/drawinglayer/source/processor2d/vclhelperbufferdevice.cxx b/drawinglayer/source/processor2d/vclhelperbufferdevice.cxx index a86ebe1..c1255d1 100644 --- a/drawinglayer/source/processor2d/vclhelperbufferdevice.cxx +++ b/drawinglayer/source/processor2d/vclhelperbufferdevice.cxx @@ -196,6 +196,7 @@ namespace { // reused, reset some values pRetval->SetMapMode(); + pRetval->SetRasterOp(ROP_OVERPAINT); } // remember allocated buffer commit 37daee34ad85cd9d2c69a44b470755ef346d645f Author: Caolán McNamara <caol...@redhat.com> Date: Fri Sep 16 11:19:52 2016 +0100 Resolves: rhbz#1373933 gtk 3.21 emits a lot more "style-set" signals also deb#837356 since gtk3 commit of... commit 0f116135f4a5033ce4e9dfa19f10624701fa615c Author: Matthias Clasen <mcla...@redhat.com> Date: Fri May 6 10:12:14 2016 -0400 Avoid emitting ::style-set by name GtkStyle is deprecated, but we still emit ::style-set quite a bit, so lets at least not be slow while doing it. docs say... 'GtkWidget::style-set has been deprecated since version 3.0 and should not be used in newly-written code. Use the âstyle-updatedâ signal' and this code just came over from gtk2 without any thought about it at the time, so change it over to the "style-updated" which makes everything happy again gtk3 still emits a lot of style-updateds signals so don't throw away font settings every time, check if the font settings changed and only emit FontChanged if they differ from the last seen settings. (cherry picked from commit ef7abe81df10cb8a8c04afbb1fbe700f94e73f04) Change-Id: I9e920d2fb2d820ff1b1b5a9ecb228484df3d6146 Reviewed-on: https://gerrit.libreoffice.org/28946 Tested-by: Jenkins <c...@libreoffice.org> Reviewed-by: jan iversen <j...@documentfoundation.org> (cherry picked from commit 243698b5520e70b54f28eed8e29bdbd551bba793) diff --git a/vcl/inc/unx/gtk/gtkframe.hxx b/vcl/inc/unx/gtk/gtkframe.hxx index 3b81c54..0793b52 100644 --- a/vcl/inc/unx/gtk/gtkframe.hxx +++ b/vcl/inc/unx/gtk/gtkframe.hxx @@ -241,7 +241,11 @@ class GtkSalFrame : public SalFrame // signals static gboolean signalButton( GtkWidget*, GdkEventButton*, gpointer ); - static void signalStyleSet( GtkWidget*, GtkStyle* pPrevious, gpointer ); +#if GTK_CHECK_VERSION(3,0,0) + static void signalStyleUpdated(GtkWidget*, gpointer); +#else + static void signalStyleSet(GtkWidget*, GtkStyle* pPrevious, gpointer); +#endif #if GTK_CHECK_VERSION(3,0,0) static gboolean signalDraw( GtkWidget*, cairo_t *cr, gpointer ); static void sizeAllocated(GtkWidget*, GdkRectangle *pAllocation, gpointer frame); diff --git a/vcl/inc/unx/gtk/gtkinst.hxx b/vcl/inc/unx/gtk/gtkinst.hxx index 099fa11..1e2ddba 100644 --- a/vcl/inc/unx/gtk/gtkinst.hxx +++ b/vcl/inc/unx/gtk/gtkinst.hxx @@ -230,6 +230,8 @@ public: #endif virtual const cairo_font_options_t* GetCairoFontOptions() override; + const cairo_font_options_t* GetLastSeenCairoFontOptions(); + void ResetLastSeenCairoFontOptions(); void RemoveTimer (SalTimer *pTimer); @@ -239,6 +241,7 @@ private: std::vector<GtkSalTimer *> m_aTimers; bool IsTimerExpired(); bool bNeedsInit; + cairo_font_options_t* m_pLastCairoFontOptions; mutable std::shared_ptr<vcl::unx::GtkPrintWrapper> m_xPrintWrapper; }; diff --git a/vcl/unx/gtk/gtkinst.cxx b/vcl/unx/gtk/gtkinst.cxx index 6bb7bb8..0eb942c 100644 --- a/vcl/unx/gtk/gtkinst.cxx +++ b/vcl/unx/gtk/gtkinst.cxx @@ -157,6 +157,7 @@ GtkInstance::GtkInstance( SalYieldMutex* pMutex ) : X11SalInstance( pMutex ) #endif , bNeedsInit(true) + , m_pLastCairoFontOptions(nullptr) { } @@ -202,6 +203,7 @@ GtkInstance::~GtkInstance() while( !m_aTimers.empty() ) delete *m_aTimers.begin(); DeInitAtkBridge(); + ResetLastSeenCairoFontOptions(); } SalFrame* GtkInstance::CreateFrame( SalFrame* pParent, SalFrameStyleFlags nStyle ) @@ -478,7 +480,24 @@ GtkInstance::getPrintWrapper() const const cairo_font_options_t* GtkInstance::GetCairoFontOptions() { - return gdk_screen_get_font_options(gdk_screen_get_default()); + const cairo_font_options_t* pCairoFontOptions = gdk_screen_get_font_options(gdk_screen_get_default()); + if (!m_pLastCairoFontOptions && pCairoFontOptions) + m_pLastCairoFontOptions = cairo_font_options_copy(pCairoFontOptions); + return pCairoFontOptions; +} + +const cairo_font_options_t* GtkInstance::GetLastSeenCairoFontOptions() +{ + return m_pLastCairoFontOptions; +} + +void GtkInstance::ResetLastSeenCairoFontOptions() +{ + if (m_pLastCairoFontOptions) + { + cairo_font_options_destroy(m_pLastCairoFontOptions); + m_pLastCairoFontOptions = nullptr; + } } /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/vcl/unx/gtk/gtksalframe.cxx b/vcl/unx/gtk/gtksalframe.cxx index 61a9637..5448611 100644 --- a/vcl/unx/gtk/gtksalframe.cxx +++ b/vcl/unx/gtk/gtksalframe.cxx @@ -3289,7 +3289,21 @@ void GtkSalFrame::signalStyleSet( GtkWidget*, GtkStyle* pPrevious, gpointer fram // so post user event to safely dispatch the SALEVENT_SETTINGSCHANGED // note: settings changed for multiple frames is avoided in winproc.cxx ImplHandleSettings GtkSalFrame::getDisplay()->SendInternalEvent( pThis, nullptr, SALEVENT_SETTINGSCHANGED ); - GtkSalFrame::getDisplay()->SendInternalEvent( pThis, nullptr, SALEVENT_FONTCHANGED ); + + // fire off font-changed when the system cairo font hints change + GtkInstance *pInstance = static_cast<GtkInstance*>(GetSalData()->m_pInstance); + const cairo_font_options_t* pLastCairoFontOptions = pInstance->GetLastSeenCairoFontOptions(); + const cairo_font_options_t* pCurrentCairoFontOptions = gdk_screen_get_font_options(gdk_screen_get_default()); + bool bFontSettingsChanged = true; + if (pLastCairoFontOptions && pCurrentCairoFontOptions) + bFontSettingsChanged = !cairo_font_options_equal(pLastCairoFontOptions, pCurrentCairoFontOptions); + else if (!pLastCairoFontOptions && !pCurrentCairoFontOptions) + bFontSettingsChanged = false; + if (bFontSettingsChanged) + { + pInstance->ResetLastSeenCairoFontOptions(); + GtkSalFrame::getDisplay()->SendInternalEvent( pThis, nullptr, SALEVENT_FONTCHANGED ); + } } /* #i64117# gtk sets a nice background pixmap diff --git a/vcl/unx/gtk3/gtk3gtkframe.cxx b/vcl/unx/gtk3/gtk3gtkframe.cxx index d169db3..6165132 100644 --- a/vcl/unx/gtk3/gtk3gtkframe.cxx +++ b/vcl/unx/gtk3/gtk3gtkframe.cxx @@ -1019,7 +1019,7 @@ void GtkSalFrame::InitCommon() // connect signals - g_signal_connect( G_OBJECT(m_pWindow), "style-set", G_CALLBACK(signalStyleSet), this ); + g_signal_connect( G_OBJECT(m_pWindow), "style-updated", G_CALLBACK(signalStyleUpdated), this ); gtk_widget_set_has_tooltip(pEventWidget, true); m_aMouseSignalIds.push_back(g_signal_connect( G_OBJECT(pEventWidget), "query-tooltip", G_CALLBACK(signalTooltipQuery), this )); m_aMouseSignalIds.push_back(g_signal_connect( G_OBJECT(pEventWidget), "button-press-event", G_CALLBACK(signalButton), this )); @@ -3061,20 +3061,25 @@ gboolean GtkSalFrame::signalDelete( GtkWidget*, GdkEvent*, gpointer frame ) return true; } -void GtkSalFrame::signalStyleSet( GtkWidget*, GtkStyle* pPrevious, gpointer frame ) +void GtkSalFrame::signalStyleUpdated(GtkWidget*, gpointer frame) { GtkSalFrame* pThis = static_cast<GtkSalFrame*>(frame); - // every frame gets an initial style set on creation - // do not post these as the whole application tends to - // redraw itself to adjust to the new style - // where there IS no new style resulting in tremendous unnecessary flickering - if( pPrevious != nullptr ) + // note: settings changed for multiple frames is avoided in winproc.cxx ImplHandleSettings + GtkSalFrame::getDisplay()->SendInternalEvent( pThis, nullptr, SALEVENT_SETTINGSCHANGED ); + + // fire off font-changed when the system cairo font hints change + GtkInstance *pInstance = static_cast<GtkInstance*>(GetSalData()->m_pInstance); + const cairo_font_options_t* pLastCairoFontOptions = pInstance->GetLastSeenCairoFontOptions(); + const cairo_font_options_t* pCurrentCairoFontOptions = gdk_screen_get_font_options(gdk_screen_get_default()); + bool bFontSettingsChanged = true; + if (pLastCairoFontOptions && pCurrentCairoFontOptions) + bFontSettingsChanged = !cairo_font_options_equal(pLastCairoFontOptions, pCurrentCairoFontOptions); + else if (!pLastCairoFontOptions && !pCurrentCairoFontOptions) + bFontSettingsChanged = false; + if (bFontSettingsChanged) { - // signalStyleSet does NOT usually have the gdk lock - // so post user event to safely dispatch the SALEVENT_SETTINGSCHANGED - // note: settings changed for multiple frames is avoided in winproc.cxx ImplHandleSettings - GtkSalFrame::getDisplay()->SendInternalEvent( pThis, nullptr, SALEVENT_SETTINGSCHANGED ); + pInstance->ResetLastSeenCairoFontOptions(); GtkSalFrame::getDisplay()->SendInternalEvent( pThis, nullptr, SALEVENT_FONTCHANGED ); } } commit fe9fd49ffccb6bee448c87515ae69ddde3b179c3 Author: Caolán McNamara <caol...@redhat.com> Date: Mon Oct 3 15:22:50 2016 +0100 Resolves: tdf#101711 revert attempt to drop unused bg images for 5-2/5-1 simply revert the effort Revert "Related: rhbz#1353069 don't clear XATTR_FILL* from stylesheet if..." This reverts commit 19c191a0a92b6ae9ca86aa4ee7afb887fd42a209. Revert "Resolves: rhbz#1353069 don't clear XATTR_FILL* from stylesheet if..." This reverts commit fad4d7877ac8d04ab82e8acd21205f315d6eab1f. Revert "rhbz#1326602 avoid exp. bg bitmaps from deleted slides" This reverts commit fd45334b49c09538598f82f5ffa2f61f6bdd9d24. Change-Id: I591083b6b1d7b08316ee24c0788386799d01724b Reviewed-on: https://gerrit.libreoffice.org/29491 Tested-by: Jenkins <c...@libreoffice.org> Reviewed-by: jan iversen <j...@documentfoundation.org> (cherry picked from commit 8127ac5412b0af8ed7985e07ab11b3241a4e659e) diff --git a/include/svx/svdundo.hxx b/include/svx/svdundo.hxx index 4ffc74b..d55de74 100644 --- a/include/svx/svdundo.hxx +++ b/include/svx/svdundo.hxx @@ -22,7 +22,6 @@ #include <sal/config.h> -#include <memory> #include <vector> #include <svl/solar.hrc> @@ -34,7 +33,6 @@ #include <svx/svxdllapi.h> class SfxItemSet; -class SfxPoolItem; class SfxStyleSheet; class SdrView; class SdrPageView; @@ -588,12 +586,9 @@ class SVX_DLLPUBLIC SdrUndoDelPage : public SdrUndoPageList // When deleting a MasterPage, we remember all relations of the // Character Page with the MasterPage in this UndoGroup. SdrUndoGroup* pUndoGroup; - std::unique_ptr<SfxPoolItem> mpFillBitmapItem; - bool mbHasFillBitmap; - bool mbSoleOwnerOfFillBitmapProps; public: - SdrUndoDelPage(SdrPage& rNewPg, bool bSoleOwnerOfFillBitmapProps); + SdrUndoDelPage(SdrPage& rNewPg); virtual ~SdrUndoDelPage(); virtual void Undo() override; @@ -604,11 +599,6 @@ public: virtual void SdrRepeat(SdrView& rView) override; virtual bool CanSdrRepeat(SdrView& rView) const override; - -private: - void queryFillBitmap(const SfxItemSet &rItemSet); - void clearFillBitmap(); - void restoreFillBitmap(); }; /** @@ -765,7 +755,7 @@ public: virtual SdrUndoAction* CreateUndoMoveLayer(sal_uInt16 nLayerNum, SdrLayerAdmin& rNewLayerAdmin, SdrModel& rNewModel, sal_uInt16 nNeuPos1); // Page - virtual SdrUndoAction* CreateUndoDeletePage(SdrPage& rPage, bool bSoleOwnerOfFillBitmapProps = true); + virtual SdrUndoAction* CreateUndoDeletePage(SdrPage& rPage); virtual SdrUndoAction* CreateUndoNewPage(SdrPage& rPage); virtual SdrUndoAction* CreateUndoCopyPage(SdrPage& rPage); virtual SdrUndoAction* CreateUndoSetPageNum(SdrPage& rNewPg, sal_uInt16 nOldPageNum1, sal_uInt16 nNewPageNum1); diff --git a/reportdesign/source/core/inc/ReportUndoFactory.hxx b/reportdesign/source/core/inc/ReportUndoFactory.hxx index 1839f1f..88d0024 100644 --- a/reportdesign/source/core/inc/ReportUndoFactory.hxx +++ b/reportdesign/source/core/inc/ReportUndoFactory.hxx @@ -59,7 +59,7 @@ namespace rptui virtual SdrUndoAction* CreateUndoMoveLayer(sal_uInt16 nLayerNum, SdrLayerAdmin& rNewLayerAdmin, SdrModel& rNewModel, sal_uInt16 nNeuPos1) override; // page - virtual SdrUndoAction* CreateUndoDeletePage(SdrPage& rPage, bool bSoleOwnerOfFillBitmapProps = true) override; + virtual SdrUndoAction* CreateUndoDeletePage(SdrPage& rPage) override; virtual SdrUndoAction* CreateUndoNewPage(SdrPage& rPage) override; virtual SdrUndoAction* CreateUndoCopyPage(SdrPage& rPage) override; virtual SdrUndoAction* CreateUndoSetPageNum(SdrPage& rNewPg, sal_uInt16 nOldPageNum1, sal_uInt16 nNewPageNum1) override; diff --git a/reportdesign/source/core/sdr/ReportUndoFactory.cxx b/reportdesign/source/core/sdr/ReportUndoFactory.cxx index 566400c..cbb5a8a 100644 --- a/reportdesign/source/core/sdr/ReportUndoFactory.cxx +++ b/reportdesign/source/core/sdr/ReportUndoFactory.cxx @@ -133,9 +133,9 @@ SdrUndoAction* OReportUndoFactory::CreateUndoMoveLayer(sal_uInt16 nLayerNum, Sdr } // page -SdrUndoAction* OReportUndoFactory::CreateUndoDeletePage(SdrPage& rPage, bool bSoleOwnerOfFillBitmapProps) +SdrUndoAction* OReportUndoFactory::CreateUndoDeletePage(SdrPage& rPage) { - return m_pUndoFactory->CreateUndoDeletePage(rPage, bSoleOwnerOfFillBitmapProps); + return m_pUndoFactory->CreateUndoDeletePage( rPage ); } SdrUndoAction* OReportUndoFactory::CreateUndoNewPage(SdrPage& rPage) diff --git a/sc/source/core/data/drwlayer.cxx b/sc/source/core/data/drwlayer.cxx index 39956ca..6235250 100644 --- a/sc/source/core/data/drwlayer.cxx +++ b/sc/source/core/data/drwlayer.cxx @@ -409,7 +409,7 @@ void ScDrawLayer::ScRemovePage( SCTAB nTab ) if (bRecording) { SdrPage* pPage = GetPage(static_cast<sal_uInt16>(nTab)); - AddCalcUndo(new SdrUndoDelPage(*pPage, true)); // Undo-Action becomes the page owner + AddCalcUndo(new SdrUndoDelPage(*pPage)); // Undo-Action becomes the page owner RemovePage( static_cast<sal_uInt16>(nTab) ); // just deliver, not deleting } else diff --git a/sd/source/core/drawdoc3.cxx b/sd/source/core/drawdoc3.cxx index 8b0c53d..55c8486 100644 --- a/sd/source/core/drawdoc3.cxx +++ b/sd/source/core/drawdoc3.cxx @@ -800,17 +800,8 @@ bool SdDrawDocument::InsertBookmarkAsPage( aTest == aMPLayout && eKind == pTest->GetPageKind() ) { - if (bUndo) - { - bool bSoleOwnerOfStyleSheet = true; - if (pRefPage->IsMasterPage()) - { - const SfxStyleSheet* pRefSheet = pRefPage->getSdrPageProperties().GetStyleSheet(); - const SfxStyleSheet* pTestSheet = pTest->getSdrPageProperties().GetStyleSheet(); - bSoleOwnerOfStyleSheet = pRefSheet != pTestSheet; - } - AddUndo(GetSdrUndoFactory().CreateUndoDeletePage(*pRefPage, bSoleOwnerOfStyleSheet)); - } + if( bUndo ) + AddUndo(GetSdrUndoFactory().CreateUndoDeletePage(*pRefPage)); RemoveMasterPage(nPage); @@ -1249,7 +1240,6 @@ void SdDrawDocument::RemoveUnnecessaryMasterPages(SdPage* pMasterPage, bool bOnl { // Do not delete master pages that have their precious flag set bool bDeleteMaster = !pMaster->IsPrecious(); - bool bSoleOwnerOfStyleSheet = true; OUString aLayoutName = pMaster->GetLayoutName(); if(bOnlyDuplicatePages ) @@ -1264,10 +1254,6 @@ void SdDrawDocument::RemoveUnnecessaryMasterPages(SdPage* pMasterPage, bool bOnl { // duplicate page found -> remove it bDeleteMaster = true; - - const SfxStyleSheet* pRefSheet = pMaster->getSdrPageProperties().GetStyleSheet(); - const SfxStyleSheet* pTestSheet = pMPg->getSdrPageProperties().GetStyleSheet(); - bSoleOwnerOfStyleSheet = pRefSheet != pTestSheet; } } } @@ -1301,7 +1287,7 @@ void SdDrawDocument::RemoveUnnecessaryMasterPages(SdPage* pMasterPage, bool bOnl delete pNotesMaster; if( bUndo ) - AddUndo(GetSdrUndoFactory().CreateUndoDeletePage(*pMaster, bSoleOwnerOfStyleSheet)); + AddUndo(GetSdrUndoFactory().CreateUndoDeletePage(*pMaster)); RemoveMasterPage( pMaster->GetPageNum() ); diff --git a/sd/source/ui/func/undoback.cxx b/sd/source/ui/func/undoback.cxx index 704b551..126101f 100644 --- a/sd/source/ui/func/undoback.cxx +++ b/sd/source/ui/func/undoback.cxx @@ -21,14 +21,8 @@ #include "sdpage.hxx" #include "sdresid.hxx" #include "strings.hrc" - -#include <com/sun/star/drawing/FillStyle.hpp> - -#include <o3tl/make_unique.hxx> - #include <svl/itemset.hxx> -#include <svx/xfillit0.hxx> SdBackgroundObjUndoAction::SdBackgroundObjUndoAction( SdDrawDocument& rDoc, @@ -36,12 +30,10 @@ SdBackgroundObjUndoAction::SdBackgroundObjUndoAction( const SfxItemSet& rItenSet) : SdUndoAction(&rDoc), mrPage(rPage), - mpItemSet(new SfxItemSet(rItenSet)), - mbHasFillBitmap(false) + mpItemSet(new SfxItemSet(rItenSet)) { OUString aString( SdResId( STR_UNDO_CHANGE_PAGEFORMAT ) ); SetComment( aString ); - saveFillBitmap(*mpItemSet); } SdBackgroundObjUndoAction::~SdBackgroundObjUndoAction() @@ -53,14 +45,9 @@ void SdBackgroundObjUndoAction::ImplRestoreBackgroundObj() { SfxItemSet* pNew = new SfxItemSet(mrPage.getSdrPageProperties().GetItemSet()); mrPage.getSdrPageProperties().ClearItem(); - if (bool(mpFillBitmapItem)) - restoreFillBitmap(*mpItemSet); - mpFillBitmapItem.reset(); - mbHasFillBitmap = false; mrPage.getSdrPageProperties().PutItemSet(*mpItemSet); delete mpItemSet; mpItemSet = pNew; - saveFillBitmap(*mpItemSet); // tell the page that it's visualization has changed mrPage.ActionChanged(); @@ -78,33 +65,7 @@ void SdBackgroundObjUndoAction::Redo() SdUndoAction* SdBackgroundObjUndoAction::Clone() const { - std::unique_ptr<SdBackgroundObjUndoAction> pCopy = o3tl::make_unique<SdBackgroundObjUndoAction>(*mpDoc, mrPage, *mpItemSet); - if (mpFillBitmapItem) - pCopy->mpFillBitmapItem.reset(mpFillBitmapItem->Clone()); - pCopy->mbHasFillBitmap = mbHasFillBitmap; - return pCopy.release(); -} - -void SdBackgroundObjUndoAction::saveFillBitmap(SfxItemSet &rItemSet) -{ - const SfxPoolItem *pItem = nullptr; - if (rItemSet.GetItemState(XATTR_FILLBITMAP, false, &pItem) == SfxItemState::SET) - mpFillBitmapItem.reset(pItem->Clone()); - if (bool(mpFillBitmapItem)) - { - if (rItemSet.GetItemState(XATTR_FILLSTYLE, false, &pItem) == SfxItemState::SET) - mbHasFillBitmap = static_cast<const XFillStyleItem*>(pItem)->GetValue() == css::drawing::FillStyle_BITMAP; - rItemSet.ClearItem(XATTR_FILLBITMAP); - if (mbHasFillBitmap) - rItemSet.ClearItem(XATTR_FILLSTYLE); - } -} - -void SdBackgroundObjUndoAction::restoreFillBitmap(SfxItemSet &rItemSet) -{ - rItemSet.Put(*mpFillBitmapItem); - if (mbHasFillBitmap) - rItemSet.Put(XFillStyleItem(css::drawing::FillStyle_BITMAP)); + return new SdBackgroundObjUndoAction(*mpDoc, mrPage, *mpItemSet); } /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/sd/source/ui/inc/undoback.hxx b/sd/source/ui/inc/undoback.hxx index 35370ca..3b1553b 100644 --- a/sd/source/ui/inc/undoback.hxx +++ b/sd/source/ui/inc/undoback.hxx @@ -20,13 +20,11 @@ #ifndef INCLUDED_SD_SOURCE_UI_INC_UNDOBACK_HXX #define INCLUDED_SD_SOURCE_UI_INC_UNDOBACK_HXX -#include <memory> #include "sdundo.hxx" class SdDrawDocument; class SdPage; class SfxItemSet; -class SfxPoolItem; // SdBackgroundObjUndoAction class SdBackgroundObjUndoAction : public SdUndoAction @@ -35,12 +33,8 @@ private: SdPage& mrPage; SfxItemSet* mpItemSet; - std::unique_ptr<SfxPoolItem> mpFillBitmapItem; - bool mbHasFillBitmap; void ImplRestoreBackgroundObj(); - void saveFillBitmap(SfxItemSet &rItemSet); - void restoreFillBitmap(SfxItemSet &rItemSet); public: diff --git a/svx/source/svdraw/svdundo.cxx b/svx/source/svdraw/svdundo.cxx index 28064e7..416ee58 100644 --- a/svx/source/svdraw/svdundo.cxx +++ b/svx/source/svdraw/svdundo.cxx @@ -17,7 +17,6 @@ * the License at http://www.apache.org/licenses/LICENSE-2.0 . */ -#include <com/sun/star/drawing/FillStyle.hpp> #include <svl/lstner.hxx> @@ -28,7 +27,6 @@ #include <svx/svdlayer.hxx> #include <svx/svdmodel.hxx> #include <svx/svdview.hxx> -#include <svx/xfillit0.hxx> #include "svx/svdstr.hrc" #include "svdglob.hxx" #include <svx/scene3d.hxx> @@ -1455,28 +1453,13 @@ SdrUndoPageList::~SdrUndoPageList() } -SdrUndoDelPage::SdrUndoDelPage(SdrPage& rNewPg, bool bSoleOwnerOfFillBitmapProps) + +SdrUndoDelPage::SdrUndoDelPage(SdrPage& rNewPg) : SdrUndoPageList(rNewPg) , pUndoGroup(nullptr) - , mbHasFillBitmap(false) - , mbSoleOwnerOfFillBitmapProps(bSoleOwnerOfFillBitmapProps) { bItsMine = true; - // keep fill bitmap separately to remove it from pool if not used elsewhere - if (mrPage.IsMasterPage()) - { - SfxStyleSheet* const pStyleSheet = mrPage.getSdrPageProperties().GetStyleSheet(); - if (pStyleSheet) - queryFillBitmap(pStyleSheet->GetItemSet()); - } - else - { - queryFillBitmap(mrPage.getSdrPageProperties().GetItemSet()); - } - if (bool(mpFillBitmapItem)) - clearFillBitmap(); - // now remember the master page relationships if(mrPage.IsMasterPage()) { @@ -1511,8 +1494,6 @@ SdrUndoDelPage::~SdrUndoDelPage() void SdrUndoDelPage::Undo() { - if (bool(mpFillBitmapItem)) - restoreFillBitmap(); ImpInsertPage(nPageNum); if (pUndoGroup!=nullptr) { @@ -1526,8 +1507,6 @@ void SdrUndoDelPage::Undo() void SdrUndoDelPage::Redo() { ImpRemovePage(nPageNum); - if (bool(mpFillBitmapItem)) - clearFillBitmap(); // master page relations are dissolved automatically DBG_ASSERT(!bItsMine,"RedoDeletePage: mrPage already belongs to UndoAction."); bItsMine=true; @@ -1556,61 +1535,6 @@ bool SdrUndoDelPage::CanSdrRepeat(SdrView& /*rView*/) const return false; } -void SdrUndoDelPage::queryFillBitmap(const SfxItemSet& rItemSet) -{ - const SfxPoolItem *pItem = nullptr; - if (rItemSet.GetItemState(XATTR_FILLBITMAP, false, &pItem) == SfxItemState::SET) - mpFillBitmapItem.reset(pItem->Clone()); - if (rItemSet.GetItemState(XATTR_FILLSTYLE, false, &pItem) == SfxItemState::SET) - mbHasFillBitmap = static_cast<const XFillStyleItem*>(pItem)->GetValue() == css::drawing::FillStyle_BITMAP; -} - -void SdrUndoDelPage::clearFillBitmap() -{ - if (mrPage.IsMasterPage()) - { - if (mbSoleOwnerOfFillBitmapProps) - { - SfxStyleSheet* const pStyleSheet = mrPage.getSdrPageProperties().GetStyleSheet(); - assert(bool(pStyleSheet)); // who took away my stylesheet? - SfxItemSet& rItemSet = pStyleSheet->GetItemSet(); - rItemSet.ClearItem(XATTR_FILLBITMAP); - if (mbHasFillBitmap) - rItemSet.ClearItem(XATTR_FILLSTYLE); - } - } - else - { - SdrPageProperties &rPageProps = mrPage.getSdrPageProperties(); - rPageProps.ClearItem(XATTR_FILLBITMAP); - if (mbHasFillBitmap) - rPageProps.ClearItem(XATTR_FILLSTYLE); - } -} - -void SdrUndoDelPage::restoreFillBitmap() -{ - if (mrPage.IsMasterPage()) - { - if (mbSoleOwnerOfFillBitmapProps) - { - SfxStyleSheet* const pStyleSheet = mrPage.getSdrPageProperties().GetStyleSheet(); - assert(bool(pStyleSheet)); // who took away my stylesheet? - SfxItemSet& rItemSet = pStyleSheet->GetItemSet(); - rItemSet.Put(*mpFillBitmapItem); - if (mbHasFillBitmap) - rItemSet.Put(XFillStyleItem(css::drawing::FillStyle_BITMAP)); - } - } - else - { - SdrPageProperties &rPageProps = mrPage.getSdrPageProperties(); - rPageProps.PutItem(*mpFillBitmapItem); - if (mbHasFillBitmap) - rPageProps.PutItem(XFillStyleItem(css::drawing::FillStyle_BITMAP)); - } -} - void SdrUndoNewPage::Undo() { @@ -1857,9 +1781,9 @@ SdrUndoAction* SdrUndoFactory::CreateUndoMoveLayer(sal_uInt16 nLayerNum, SdrLaye } // page -SdrUndoAction* SdrUndoFactory::CreateUndoDeletePage(SdrPage& rPage, bool bSoleOwnerOfFillBitmapProps) +SdrUndoAction* SdrUndoFactory::CreateUndoDeletePage(SdrPage& rPage) { - return new SdrUndoDelPage(rPage, bSoleOwnerOfFillBitmapProps); + return new SdrUndoDelPage( rPage ); } SdrUndoAction* SdrUndoFactory::CreateUndoNewPage(SdrPage& rPage) commit e649c9ce40f7425fb4a4670201a1f36e028c5022 Author: Caolán McNamara <caol...@redhat.com> Date: Tue Sep 27 20:47:16 2016 +0100 Resolves: tdf#101884 keyboard navigation in User defined border control Change-Id: I92ea37754f057c560d19b41f814a1d649ea74876 (cherry picked from commit f20996450e409406f4f55f9eb7ca9bfe1e455c35) Reviewed-on: https://gerrit.libreoffice.org/29345 Tested-by: Jenkins <c...@libreoffice.org> Reviewed-by: Caolán McNamara <caol...@redhat.com> Tested-by: Caolán McNamara <caol...@redhat.com> (cherry picked from commit 0620f7ca99eca6c8fe00a99b999ad74b8847ffe4) diff --git a/svx/source/dialog/frmsel.cxx b/svx/source/dialog/frmsel.cxx index 7a67870..605dac6 100644 --- a/svx/source/dialog/frmsel.cxx +++ b/svx/source/dialog/frmsel.cxx @@ -1176,6 +1176,7 @@ void FrameSelector::KeyInput( const KeyEvent& rKEvt ) DeselectAllBorders(); SelectBorder( eBorder ); } + bHandled = true; } } break;
_______________________________________________ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits