[Libreoffice-commits] core.git: Branch 'distro/collabora/cp-6.2' - 12 commits - cui/uiconfig desktop/inc desktop/source desktop/unx distro-configs/LibreOfficeiOS.conf distro-configs/LibreOfficeiOS_Sim.conf framework/source include/vcl scp2/source sc/source sfx2/source solenv/gbuild sw/inc sw/qa sw/source vcl/headless vcl/inc vcl/source writerfilter/source xmlsecurity/Library_xsec_xmlsec.mk xmlsecurity/source
Szymon Kłos (via logerrit)
logerrit at kemper.freedesktop.org
Sun Sep 22 17:52:58 UTC 2019
cui/uiconfig/ui/transparencytabpage.ui | 2
desktop/inc/app.hxx | 4
desktop/source/app/app.cxx | 2
desktop/source/app/cmdlineargs.cxx | 8
desktop/source/app/sofficemain.cxx | 2
desktop/unx/source/splashx.c | 3
distro-configs/LibreOfficeiOS.conf | 11
distro-configs/LibreOfficeiOS_Sim.conf | 32 ++
framework/source/fwe/helper/titlehelper.cxx | 4
include/vcl/opengl/OpenGLWrapper.hxx | 13
sc/source/core/data/table2.cxx | 2
sc/source/ui/unoobj/fmtuno.cxx | 2
scp2/source/ooo/module_hidden_ooo.scp | 2
sfx2/source/doc/guisaveas.cxx | 5
solenv/gbuild/gbuild.mk | 5
sw/inc/doc.hxx | 8
sw/qa/extras/odfimport/odfimport.cxx | 4
sw/qa/extras/ooxmlexport/data/tdf123636_newlinePageBreak.docx |binary
sw/qa/extras/ooxmlexport/data/tdf123636_newlinePageBreak2.docx |binary
sw/qa/extras/ooxmlexport/data/tdf123636_newlinePageBreak3.docx |binary
sw/qa/extras/ooxmlexport/data/tdf123636_newlinePageBreak4.docx |binary
sw/qa/extras/ooxmlexport/ooxmlexport11.cxx | 27 ++
sw/qa/extras/ooxmlexport/ooxmlexport6.cxx | 2
sw/source/core/doc/doc.cxx | 9
sw/source/core/doc/docnew.cxx | 1
sw/source/core/txtnode/txtedt.cxx | 18 +
sw/source/uibase/dialog/SwSpellDialogChildWindow.cxx | 30 +-
vcl/headless/svpinst.cxx | 22 -
vcl/inc/svsys.h | 4
vcl/source/control/listctrl.cxx | 10
vcl/source/edit/vclmedit.cxx | 8
vcl/source/salmain/salmain.cxx | 5
vcl/source/treelist/svimpbox.cxx | 11
writerfilter/source/dmapper/DomainMapper.cxx | 23 +
xmlsecurity/Library_xsec_xmlsec.mk | 1
xmlsecurity/source/helper/documentsignaturemanager.cxx | 7
xmlsecurity/source/xmlsec/nss/nssinitializer.cxx | 131 +++++++++-
xmlsecurity/source/xmlsec/nss/securityenvironment_nssimpl.cxx | 56 ++--
xmlsecurity/source/xmlsec/nss/x509certificate_nssimpl.cxx | 23 -
xmlsecurity/source/xmlsec/nss/x509certificate_nssimpl.hxx | 2
xmlsecurity/source/xmlsec/nss/xmlsignature_nssimpl.cxx | 24 -
41 files changed, 383 insertions(+), 140 deletions(-)
New commits:
commit 9fc3d2261ef9d2daccde96c1f18c30144985ea3e
Author: Szymon Kłos <szymon.klos at collabora.com>
AuthorDate: Thu Jan 24 11:22:22 2019 +0100
Commit: Andras Timar <andras.timar at collabora.com>
CommitDate: Sun Sep 22 19:08:57 2019 +0200
tdf#86731 Don't show 'start from beginning' when dictionary is missing
Change-Id: I160e4b15e3c636be0e23dd5bbb2da62dfa6a42ef
diff --git a/sw/source/uibase/dialog/SwSpellDialogChildWindow.cxx b/sw/source/uibase/dialog/SwSpellDialogChildWindow.cxx
index 9f6863ae6e96..4761ee310f05 100644
--- a/sw/source/uibase/dialog/SwSpellDialogChildWindow.cxx
+++ b/sw/source/uibase/dialog/SwSpellDialogChildWindow.cxx
@@ -175,6 +175,8 @@ svx::SpellPortions SwSpellDialogChildWindow::GetNextWrongSentence(bool bRecheck)
SwWrtShell* pWrtShell = GetWrtShell_Impl();
if(pWrtShell)
{
+ bool bNoDictionaryAvailable = pWrtShell->GetDoc()->IsDictionaryMissing();
+
if (!bRecheck)
{
// first set continuation point for spell/grammar check to the
@@ -379,7 +381,7 @@ The code below would only be part of the solution.
OSL_ENSURE(m_pSpellState->m_bDrawingsSpelled &&
m_pSpellState->m_bOtherSpelled && m_pSpellState->m_bBodySpelled,
"not all parts of the document are already spelled");
- if(m_pSpellState->m_xStartRange.is())
+ if( m_pSpellState->m_xStartRange.is() && !bNoDictionaryAvailable )
{
LockFocusNotification( true );
std::unique_ptr<weld::MessageDialog> xBox(Application::CreateMessageDialog(GetWindow()->GetFrameWeld(),
@@ -405,7 +407,6 @@ The code below would only be part of the solution.
bCloseMessage = false; // no closing message if a wrap around has been denied
}
}
- bool bNoDictionaryAvailable = pWrtShell->GetDoc()->IsDictionaryMissing();
if( aRet.empty() && bCloseMessage && !bNoDictionaryAvailable )
{
LockFocusNotification( true );
commit 4bc934827d63d99ab34564aeb3c031cab9227ae1
Author: Szymon Kłos <szymon.klos at collabora.com>
AuthorDate: Tue Jan 22 17:43:45 2019 +0100
Commit: Andras Timar <andras.timar at collabora.com>
CommitDate: Sun Sep 22 19:05:09 2019 +0200
tdf#86731 Don't show 'spelling complete' when dictionary is missing
To check if dictionary is missing we have to run spelling which
checks used language for each text portion.
When AutoSpelling or manually invoked Spelling is performed SwDoc
receives notification about missing dictionaries. Then it is possible
to not show 'Completed' dialog.
Change-Id: I040ce6565632294796c0206d20c4cd0066ca9643
Reviewed-on: https://gerrit.libreoffice.org/66813
Tested-by: Jenkins
Reviewed-by: Szymon Kłos <szymon.klos at collabora.com>
(cherry picked from commit 33f6848dc5abe71471b08dc6a8946feaa2d75ffc)
diff --git a/sw/inc/doc.hxx b/sw/inc/doc.hxx
index ce2311c59c09..5afcea308e31 100644
--- a/sw/inc/doc.hxx
+++ b/sw/inc/doc.hxx
@@ -313,6 +313,9 @@ private:
bool mbColumnSelection : 1; //< TRUE: this content has been created by a column selection (clipboard docs only)
bool mbIsPrepareSelAll : 1;
+ enum MissingDictionary { False = -1, Undefined = 0, True = 1 };
+ MissingDictionary meDictionaryMissing;
+
// true: Document contains at least one anchored object, which is anchored AT_PAGE with a content position.
// Thus, certain adjustment needed during formatting for these kind of anchored objects.
bool mbContainsAtPageObjWithContentAnchor : 1;
@@ -1635,6 +1638,11 @@ public:
*/
bool StartGrammarChecking( bool bSkipStart = false );
+ /// Use to notify if the dictionary can be found for a single content portion (has to be called for all portions)
+ void SetMissingDictionaries( bool bIsMissing );
+ /// Returns true if no dictionary can be found for any content
+ bool IsDictionaryMissing() { return meDictionaryMissing == MissingDictionary::True; }
+
private:
// Copies master header to left / first one, if necessary - used by ChgPageDesc().
void CopyMasterHeader(const SwPageDesc &rChged, const SwFormatHeader &rHead, SwPageDesc &pDesc, bool bLeft, bool bFirst);
diff --git a/sw/source/core/doc/doc.cxx b/sw/source/core/doc/doc.cxx
index d5c49b0515b6..2624f10880bb 100644
--- a/sw/source/core/doc/doc.cxx
+++ b/sw/source/core/doc/doc.cxx
@@ -1825,4 +1825,13 @@ SwDoc::GetVbaEventProcessor()
return mxVbaEvents;
}
+void SwDoc::SetMissingDictionaries( bool bIsMissing )
+{
+ if( bIsMissing && meDictionaryMissing == MissingDictionary::Undefined )
+ meDictionaryMissing = MissingDictionary::True;
+ else if( !bIsMissing )
+ meDictionaryMissing = MissingDictionary::False;
+};
+
+
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sw/source/core/doc/docnew.cxx b/sw/source/core/doc/docnew.cxx
index e48fd619d8e5..421d49bac9a3 100644
--- a/sw/source/core/doc/docnew.cxx
+++ b/sw/source/core/doc/docnew.cxx
@@ -274,6 +274,7 @@ SwDoc::SwDoc()
mbClipBoard( false ),
mbColumnSelection( false ),
mbIsPrepareSelAll(false),
+ meDictionaryMissing( MissingDictionary::Undefined ),
mbContainsAtPageObjWithContentAnchor(false), //#i119292#, fdo#37024
meDocType(DOCTYPE_NATIVE)
diff --git a/sw/source/core/txtnode/txtedt.cxx b/sw/source/core/txtnode/txtedt.cxx
index 41e288a74ec8..211ec9cd8a77 100644
--- a/sw/source/core/txtnode/txtedt.cxx
+++ b/sw/source/core/txtnode/txtedt.cxx
@@ -88,6 +88,22 @@ using namespace ::com::sun::star::uno;
using namespace ::com::sun::star::linguistic2;
using namespace ::com::sun::star::smarttags;
+namespace
+{
+ void DetectAndMarkMissingDictionaries( SwDoc* pDoc,
+ const uno::Reference< XSpellChecker1 >& xSpell,
+ const LanguageType eActLang )
+ {
+ if( !pDoc )
+ return;
+
+ if( xSpell.is() && !xSpell->hasLanguage( eActLang.get() ) )
+ pDoc->SetMissingDictionaries( true );
+ else
+ pDoc->SetMissingDictionaries( false );
+ }
+}
+
struct SwParaIdleData_Impl
{
SwWrongList* pWrong; // for spell checking
@@ -1054,6 +1070,7 @@ bool SwTextNode::Spell(SwSpellArgs* pArgs)
// get next language for next word, consider language attributes
// within the word
LanguageType eActLang = aScanner.GetCurrentLanguage();
+ DetectAndMarkMissingDictionaries( GetTextNode()->GetDoc(), pArgs->xSpeller, eActLang );
if( rWord.getLength() > 0 && LANGUAGE_NONE != eActLang )
{
@@ -1360,6 +1377,7 @@ SwRect SwTextFrame::AutoSpell_(SwTextNode & rNode, sal_Int32 nActPos)
// get next language for next word, consider language attributes
// within the word
LanguageType eActLang = aScanner.GetCurrentLanguage();
+ DetectAndMarkMissingDictionaries( pDoc, xSpell, eActLang );
bool bSpell = xSpell.is() && xSpell->hasLanguage( static_cast<sal_uInt16>(eActLang) );
if( bSpell && !rWord.isEmpty() )
diff --git a/sw/source/uibase/dialog/SwSpellDialogChildWindow.cxx b/sw/source/uibase/dialog/SwSpellDialogChildWindow.cxx
index 20a658499103..9f6863ae6e96 100644
--- a/sw/source/uibase/dialog/SwSpellDialogChildWindow.cxx
+++ b/sw/source/uibase/dialog/SwSpellDialogChildWindow.cxx
@@ -405,20 +405,21 @@ The code below would only be part of the solution.
bCloseMessage = false; // no closing message if a wrap around has been denied
}
}
- if(aRet.empty())
+ bool bNoDictionaryAvailable = pWrtShell->GetDoc()->IsDictionaryMissing();
+ if( aRet.empty() && bCloseMessage && !bNoDictionaryAvailable )
{
- if(bCloseMessage)
- {
- LockFocusNotification( true );
- OUString sInfo(SwResId(STR_SPELLING_COMPLETED));
- // #i84610#
- std::unique_ptr<weld::MessageDialog> xBox(Application::CreateMessageDialog(GetWindow()->GetFrameWeld(),
- VclMessageType::Info, VclButtonsType::Ok, sInfo));
- xBox->run();
- LockFocusNotification( false );
- // take care that the now valid selection is stored
- LoseFocus();
- }
+ LockFocusNotification( true );
+ OUString sInfo( SwResId( STR_SPELLING_COMPLETED ) );
+ // #i84610#
+ std::unique_ptr<weld::MessageDialog> xBox(
+ Application::CreateMessageDialog( GetWindow()->GetFrameWeld(),
+ VclMessageType::Info,
+ VclButtonsType::Ok,
+ sInfo ) );
+ xBox->run();
+ LockFocusNotification( false );
+ // take care that the now valid selection is stored
+ LoseFocus();
}
}
return aRet;
commit 0a5e7464cf94a9a2cd55439a66f97cc7333e959c
Author: Justin Luth <justin.luth at collabora.com>
AuthorDate: Tue Apr 16 14:14:03 2019 +0300
Commit: Andras Timar <andras.timar at collabora.com>
CommitDate: Sun Sep 22 19:04:33 2019 +0200
tdf#123636 writerfilter: handle deferred breaks on frames
and...
related tdf#123636 writerfilter: split newline also if PAGE_BREAK
...but only with old MSWord compat flag SplitPgBreakAndParaMark.
All of the other cases (COLUMN_BREAK and non-empty runs) split
the paragraph, so why not here? This document shows it is needed,
but only for SplitPgBreakAndParaMark documents.
Note: Word 2003 doesn't display "modern" docx well in this regard.
It adds extra paragraphs where it shouldn't. There are already
example unit tests that ensure that extra paragraphs aren't written
for SplitPgBreakAndParaMark == false.
The actual bug's document is not related to the compatibility flag.
That will be handled in separate commit.
Reviewed-on: https://gerrit.libreoffice.org/70835
Tested-by: Jenkins
Reviewed-by: Justin Luth <justin_luth at sil.org>
(cherry picked from commit 89e44da1ab450f6e2f4106103efd169227683f20)
tdf#123636 writerfilter: handle deferred breaks on frames
...similar to handling breaks before shapes in lcl_startShape.
Three different examples found to create/split a paragraph.
Which one to use? (addDummy, m_bIsSplitPara, and
lcl_startCharacterGroup). SplitPara is not good because the
paragraph properties probably should not be copied to the
dummy paragraph (like numbering for example). Slightly
modified the lcl_startChar example to ensure that the dummy
paragraph doesn't steal a part of the properties, but is
only default properties plus page-break.
This doesn't export very well, so roundtripping is very poor.
Research Note: There exists a compat flag showBreaksInFrames
(Display Page/Column Breaks Present in Frames)
"This element specifies whether applications should
honor the presence of page and/or column breaks which are
present within the contents of paragraphs which have been
defined as frames using the framePr element."
--Currently, LO does nothing with this flag. Probably too
exotic and irrelevant (word 2003 era?).
No existing unit tests found that have isSet(pg_brk) frames.
Reviewed-on: https://gerrit.libreoffice.org/71255
Tested-by: Jenkins
Reviewed-by: Justin Luth <justin_luth at sil.org>
Reviewed-by: Miklos Vajna <vmiklos at collabora.com>
(cherry picked from commit f6f53f76e15f5eecc5b6ce56e471c53cebfea8ad)
Change-Id: I29f815355401c7af8b347a3ed9d0298bc9b27b93
diff --git a/sw/qa/extras/ooxmlexport/data/tdf123636_newlinePageBreak.docx b/sw/qa/extras/ooxmlexport/data/tdf123636_newlinePageBreak.docx
new file mode 100644
index 000000000000..6f7b4b144547
Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf123636_newlinePageBreak.docx differ
diff --git a/sw/qa/extras/ooxmlexport/data/tdf123636_newlinePageBreak2.docx b/sw/qa/extras/ooxmlexport/data/tdf123636_newlinePageBreak2.docx
new file mode 100644
index 000000000000..a876bea84e02
Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf123636_newlinePageBreak2.docx differ
diff --git a/sw/qa/extras/ooxmlexport/data/tdf123636_newlinePageBreak3.docx b/sw/qa/extras/ooxmlexport/data/tdf123636_newlinePageBreak3.docx
new file mode 100644
index 000000000000..1bcc335fdc59
Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf123636_newlinePageBreak3.docx differ
diff --git a/sw/qa/extras/ooxmlexport/data/tdf123636_newlinePageBreak4.docx b/sw/qa/extras/ooxmlexport/data/tdf123636_newlinePageBreak4.docx
new file mode 100644
index 000000000000..3a9d86ee21e2
Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf123636_newlinePageBreak4.docx differ
diff --git a/sw/qa/extras/ooxmlexport/ooxmlexport11.cxx b/sw/qa/extras/ooxmlexport/ooxmlexport11.cxx
index 8a82f0f04d38..87019efcec3d 100644
--- a/sw/qa/extras/ooxmlexport/ooxmlexport11.cxx
+++ b/sw/qa/extras/ooxmlexport/ooxmlexport11.cxx
@@ -962,6 +962,33 @@ DECLARE_OOXMLEXPORT_TEST(testInputListExport, "tdf122186_input_list.odt")
assertXPath(pXmlDoc, "/w:document/w:body/w:p/w:r[4]/w:t", 0);
}
+DECLARE_OOXMLEXPORT_TEST(testTdf123636_newlinePageBreak, "tdf123636_newlinePageBreak.docx")
+{
+ //MS Compatibility flag: SplitPgBreakAndParaMark
+ //special case: split first empty paragraph in a section.
+ CPPUNIT_ASSERT_EQUAL_MESSAGE( "Number of Paragraphs", 2, getParagraphs() );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE( "Number of Pages", 2, getPages() );
+}
+
+DECLARE_OOXMLEXPORT_TEST(testTdf123636_newlinePageBreak2, "tdf123636_newlinePageBreak2.docx")
+{
+ //WITHOUT SplitPgBreakAndParaMark: a following anchored shape should force a page break
+ //CPPUNIT_ASSERT_EQUAL_MESSAGE( "Number of Paragraphs", 2, getParagraphs() );
+ CPPUNIT_ASSERT_EQUAL(OUString(), getProperty<OUString>(getParagraph(2, ""), "NumberingStyleName"));
+ CPPUNIT_ASSERT_EQUAL_MESSAGE( "Number of Pages", 2, getPages() );
+}
+
+DECLARE_OOXMLEXPORT_TEST(testTdf123636_newlinePageBreak4, "tdf123636_newlinePageBreak4.docx")
+{
+ //MS Compatibility flag: SplitPgBreakAndParaMark
+ //special case: an empty paragraph doesn't split (except if first paragraph).
+ CPPUNIT_ASSERT_EQUAL_MESSAGE( "Number of Paragraphs", 3, getParagraphs() );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE( "Number of Pages", 2, getPages() );
+
+ xmlDocPtr pDump = parseLayoutDump();
+ assertXPath(pDump, "/root/page[2]/body/txt[1]/Text", 0);
+}
+
CPPUNIT_PLUGIN_IMPLEMENT();
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sw/qa/extras/ooxmlexport/ooxmlexport6.cxx b/sw/qa/extras/ooxmlexport/ooxmlexport6.cxx
index 097048febe40..5b4e7c99e67b 100644
--- a/sw/qa/extras/ooxmlexport/ooxmlexport6.cxx
+++ b/sw/qa/extras/ooxmlexport/ooxmlexport6.cxx
@@ -938,6 +938,8 @@ DECLARE_OOXMLEXPORT_TEST(testExtentValue, "fdo74605.docx")
sal_Int32 nX = getXPath(pXmlDoc, "/w:document/w:body/w:p[2]/w:r[1]/mc:AlternateContent[1]/mc:Choice[1]/w:drawing[1]/wp:anchor[1]/wp:extent", "cx").toInt32();
// This was negative.
CPPUNIT_ASSERT(nX >= 0);
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE( "Number of Pages", 2, getPages() );
}
// part of tdf#93676, word gives the frame in the exported .docx a huge height,
diff --git a/writerfilter/source/dmapper/DomainMapper.cxx b/writerfilter/source/dmapper/DomainMapper.cxx
index e408b74df7e0..9381a5fb8682 100644
--- a/writerfilter/source/dmapper/DomainMapper.cxx
+++ b/writerfilter/source/dmapper/DomainMapper.cxx
@@ -1965,6 +1965,22 @@ void DomainMapper::sprmWithProps( Sprm& rSprm, const PropertyMapPtr& rContext )
PropertyMapPtr pContext = m_pImpl->GetTopContextOfType(CONTEXT_PARAGRAPH);
if( pContext.get() )
{
+ // If there is a deferred page break applied to this framed paragraph,
+ // create a dummy paragraph without extra properties,
+ // so that the anchored frame will be on the correct page (similar to shapes).
+ if (pContext->isSet(PROP_BREAK_TYPE))
+ {
+ pContext->Erase(PROP_BREAK_TYPE);
+
+ lcl_startParagraphGroup();
+ m_pImpl->GetTopContext()->Insert(PROP_BREAK_TYPE, uno::makeAny(style::BreakType_PAGE_BEFORE));
+ lcl_startCharacterGroup();
+ sal_uInt8 const sBreak[] = { 0xd };
+ lcl_text(sBreak, 1);
+ lcl_endCharacterGroup();
+ lcl_endParagraphGroup();
+ }
+
ParagraphPropertyMap* pParaContext = dynamic_cast< ParagraphPropertyMap* >( pContext.get() );
if (pParaContext)
pParaContext->SetFrameMode();
@@ -3273,6 +3289,13 @@ void DomainMapper::lcl_utext(const sal_uInt8 * data_, size_t len)
{
if (m_pImpl->GetSettingsTable()->GetSplitPgBreakAndParaMark())
{
+ if ( m_pImpl->GetIsFirstParagraphInSection() || !m_pImpl->IsFirstRun() )
+ {
+ m_pImpl->m_bIsSplitPara = true;
+ m_pImpl->finishParagraph( m_pImpl->GetTopContextOfType(CONTEXT_PARAGRAPH) );
+ lcl_startParagraphGroup();
+ }
+
pContext->Insert(PROP_BREAK_TYPE, uno::makeAny(style::BreakType_PAGE_BEFORE));
m_pImpl->clearDeferredBreaks();
}
commit 7167630618c559e8bed9215a1e75c55b429de1ea
Author: Tomaž Vajngerl <tomaz.vajngerl at collabora.co.uk>
AuthorDate: Sat Jun 15 15:44:33 2019 +0900
Commit: Andras Timar <andras.timar at collabora.com>
CommitDate: Sun Sep 22 19:03:59 2019 +0200
tdf#124907 vcl: react to pan gesture for listbox and other widgets
Change-Id: I4579f8edd2bf24506b1d55a7291cd86e276f30a4
Reviewed-on: https://gerrit.libreoffice.org/74087
Tested-by: Jenkins
Reviewed-by: Tomaž Vajngerl <quikee at gmail.com>
diff --git a/vcl/source/control/listctrl.cxx b/vcl/source/control/listctrl.cxx
index d861dca20b31..2e44e2ae396d 100644
--- a/vcl/source/control/listctrl.cxx
+++ b/vcl/source/control/listctrl.cxx
@@ -159,9 +159,15 @@ bool ListControl::EventNotify( NotifyEvent& rNEvt )
if (rNEvt.GetType() == MouseNotifyEvent::COMMAND)
{
const CommandEvent* pEvent = rNEvt.GetCommandEvent();
- if (pEvent && pEvent->GetCommand() == CommandEventId::Wheel)
+ if (pEvent)
{
- HandleScrollCommand(*pEvent, nullptr, mpScrollBar.get());
+ CommandEventId nCommand = pEvent->GetCommand();
+
+ if (nCommand == CommandEventId::Wheel ||
+ nCommand == CommandEventId::Gesture)
+ {
+ HandleScrollCommand(*pEvent, nullptr, mpScrollBar.get());
+ }
}
}
return true;
diff --git a/vcl/source/edit/vclmedit.cxx b/vcl/source/edit/vclmedit.cxx
index 10c6f20c0bb9..7ba7ee3c056f 100644
--- a/vcl/source/edit/vclmedit.cxx
+++ b/vcl/source/edit/vclmedit.cxx
@@ -649,9 +649,11 @@ void ImpVclMEdit::Enable( bool bEnable )
bool ImpVclMEdit::HandleCommand( const CommandEvent& rCEvt )
{
bool bDone = false;
- if ( ( rCEvt.GetCommand() == CommandEventId::Wheel ) ||
- ( rCEvt.GetCommand() == CommandEventId::StartAutoScroll ) ||
- ( rCEvt.GetCommand() == CommandEventId::AutoScroll ) )
+ CommandEventId nCommand = rCEvt.GetCommand();
+ if (nCommand == CommandEventId::Wheel ||
+ nCommand == CommandEventId::StartAutoScroll ||
+ nCommand == CommandEventId::AutoScroll ||
+ nCommand == CommandEventId::Gesture)
{
(void)mpTextWindow->HandleScrollCommand( rCEvt, mpHScrollBar, mpVScrollBar );
bDone = true;
diff --git a/vcl/source/treelist/svimpbox.cxx b/vcl/source/treelist/svimpbox.cxx
index 6ba41bbf0823..8ea15fec4b12 100644
--- a/vcl/source/treelist/svimpbox.cxx
+++ b/vcl/source/treelist/svimpbox.cxx
@@ -2890,15 +2890,20 @@ void SvImpLBox::PaintDDCursor(SvTreeListEntry* pEntry, bool bShow)
void SvImpLBox::Command( const CommandEvent& rCEvt )
{
- CommandEventId nCommand = rCEvt.GetCommand();
+ CommandEventId nCommand = rCEvt.GetCommand();
if( nCommand == CommandEventId::ContextMenu )
aEditIdle.Stop();
// scroll mouse event?
- if( ( ( nCommand == CommandEventId::Wheel ) || ( nCommand == CommandEventId::StartAutoScroll ) || ( nCommand == CommandEventId::AutoScroll ) )
- && pView->HandleScrollCommand( rCEvt, aHorSBar.get(), aVerSBar.get() ) )
+ if (nCommand == CommandEventId::Wheel ||
+ nCommand == CommandEventId::StartAutoScroll ||
+ nCommand == CommandEventId::AutoScroll ||
+ nCommand == CommandEventId::Gesture)
+ {
+ if (pView->HandleScrollCommand(rCEvt, aHorSBar.get(), aVerSBar.get()))
return;
+ }
if( bContextMenuHandling && nCommand == CommandEventId::ContextMenu )
{
commit 0976d3b966186422c1051c8513d4caaec8968826
Author: Andras Timar <andras.timar at collabora.com>
AuthorDate: Wed Sep 18 11:48:13 2019 +0200
Commit: Andras Timar <andras.timar at collabora.com>
CommitDate: Sun Sep 22 19:03:25 2019 +0200
Replace remaining occurrences of LIBO_HEADLESS with HAVE_FEATURE_UI
Change-Id: Ie2b04ee443dece851d3d96afbc932aa64369c75c
Reviewed-on: https://gerrit.libreoffice.org/79084
Tested-by: Jenkins
Reviewed-by: Andras Timar <andras.timar at collabora.com>
diff --git a/desktop/inc/app.hxx b/desktop/inc/app.hxx
index 01224c68ffeb..8a1ca8a36bb2 100644
--- a/desktop/inc/app.hxx
+++ b/desktop/inc/app.hxx
@@ -20,6 +20,8 @@
#ifndef INCLUDED_DESKTOP_INC_APP_HXX
#define INCLUDED_DESKTOP_INC_APP_HXX
+#include <config_features.h>
+
#include <boost/optional.hpp>
#include <com/sun/star/lang/XMultiServiceFactory.hpp>
#include <sal/log.hxx>
@@ -181,7 +183,7 @@ OUString ReplaceStringHookProc(const OUString& rStr);
}
-#if defined( UNX ) && !defined MACOSX && !defined IOS && !defined ANDROID && !defined LIBO_HEADLESS
+#if defined( UNX ) && !defined MACOSX && !defined IOS && !defined ANDROID && HAVE_FEATURE_UI
bool fire_glxtest_process();
void reap_glxtest_process();
#endif
diff --git a/desktop/source/app/app.cxx b/desktop/source/app/app.cxx
index 0fd6ebe187ec..59d6a0db378f 100644
--- a/desktop/source/app/app.cxx
+++ b/desktop/source/app/app.cxx
@@ -1596,7 +1596,7 @@ int Desktop::Main()
// In headless mode, reap the process started by fire_glxtest_process() early in soffice_main
// (desktop/source/app/sofficemain.cxx), in a code block that needs to be covered by the same
// #if condition as this code block:
-#if defined( UNX ) && !defined MACOSX && !defined IOS && !defined ANDROID && !defined(LIBO_HEADLESS) && HAVE_FEATURE_OPENGL
+#if defined( UNX ) && !defined MACOSX && !defined IOS && !defined ANDROID && HAVE_FEATURE_UI && HAVE_FEATURE_OPENGL
if (rCmdLineArgs.IsHeadless()) {
reap_glxtest_process();
}
diff --git a/desktop/source/app/cmdlineargs.cxx b/desktop/source/app/cmdlineargs.cxx
index 30d0c3f4cced..381147cd534e 100644
--- a/desktop/source/app/cmdlineargs.cxx
+++ b/desktop/source/app/cmdlineargs.cxx
@@ -695,12 +695,12 @@ void CommandLineArgs::InitParamValues()
{
m_minimized = false;
m_norestore = false;
-#ifdef LIBO_HEADLESS
- m_invisible = true;
- m_headless = true;
-#else
+#if HAVE_FEATURE_UI
m_invisible = false;
m_headless = false;
+#else
+ m_invisible = true;
+ m_headless = true;
#endif
m_eventtesting = false;
m_quickstart = false;
diff --git a/desktop/source/app/sofficemain.cxx b/desktop/source/app/sofficemain.cxx
index 372598abdb9d..d4a212ee0876 100644
--- a/desktop/source/app/sofficemain.cxx
+++ b/desktop/source/app/sofficemain.cxx
@@ -121,7 +121,7 @@ extern "C" int DESKTOP_DLLPUBLIC soffice_main()
#endif
#endif
-#if defined( UNX ) && !defined MACOSX && !defined IOS && !defined ANDROID && !defined(LIBO_HEADLESS) && HAVE_FEATURE_OPENGL
+#if defined( UNX ) && !defined MACOSX && !defined IOS && !defined ANDROID && HAVE_FEATURE_UI && HAVE_FEATURE_OPENGL
/* Run test for OpenGL support in own process to avoid crash with broken
* OpenGL drivers. Start process as early as possible.
* In non-headless mode, the process will be reaped in X11OpenGLDeviceInfo::GetData
diff --git a/desktop/unx/source/splashx.c b/desktop/unx/source/splashx.c
index e03fc094abcb..ed88f8b16fd4 100644
--- a/desktop/unx/source/splashx.c
+++ b/desktop/unx/source/splashx.c
@@ -7,9 +7,10 @@
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
*/
+#include <config_features.h>
#include "splashx.h"
-#if defined(ENABLE_QUICKSTART_LIBPNG) && !defined(LIBO_HEADLESS)
+#if defined(ENABLE_QUICKSTART_LIBPNG) && HAVE_FEATURE_UI
#include <X11/Xlib.h>
#include <X11/Xatom.h>
diff --git a/framework/source/fwe/helper/titlehelper.cxx b/framework/source/fwe/helper/titlehelper.cxx
index 36141cfba0f1..cab7be43d50d 100644
--- a/framework/source/fwe/helper/titlehelper.cxx
+++ b/framework/source/fwe/helper/titlehelper.cxx
@@ -17,6 +17,8 @@
* the License at http://www.apache.org/licenses/LICENSE-2.0 .
*/
+#include <config_features.h>
+
#include <framework/titlehelper.hxx>
#include <classes/fwkresid.hxx>
#include <strings.hrc>
@@ -577,7 +579,7 @@ void TitleHelper::impl_appendDebugVersion (OUStringBuffer& sTitle)
OUString sVersion = ::utl::Bootstrap::getBuildIdData("development");
sTitle.append(" [");
sTitle.append(sVersion);
-#ifndef LIBO_HEADLESS
+#if HAVE_FEATURE_UI
if (OpenGLWrapper::isVCLOpenGLEnabled())
sTitle.append("-GL");
#endif
diff --git a/include/vcl/opengl/OpenGLWrapper.hxx b/include/vcl/opengl/OpenGLWrapper.hxx
index 9c61a11c2a48..c84286ea5244 100644
--- a/include/vcl/opengl/OpenGLWrapper.hxx
+++ b/include/vcl/opengl/OpenGLWrapper.hxx
@@ -12,6 +12,7 @@
#ifndef INCLUDED_VCL_OPENGL_OPENGLWRAPPER_HXX
#define INCLUDED_VCL_OPENGL_OPENGLWRAPPER_HXX
+#include <config_features.h>
#include <vcl/dllapi.h>
// All member functions static and VCL_DLLPUBLIC. Basically a glorified namespace.
@@ -22,18 +23,18 @@ struct VCL_DLLPUBLIC OpenGLWrapper
/**
* Returns true if VCL has OpenGL rendering enabled
*/
-#ifdef LIBO_HEADLESS
- static bool isVCLOpenGLEnabled()
- {
- return false;
- }
-#else
+#if HAVE_FEATURE_UI
static bool isVCLOpenGLEnabled();
/**
* Returns the number of times OpenGL buffers have been swapped.
*/
static sal_Int64 getBufferSwapCounter();
+#else
+ static bool isVCLOpenGLEnabled()
+ {
+ return false;
+ }
#endif
};
diff --git a/scp2/source/ooo/module_hidden_ooo.scp b/scp2/source/ooo/module_hidden_ooo.scp
index cff32e16930d..904cea2420bd 100644
--- a/scp2/source/ooo/module_hidden_ooo.scp
+++ b/scp2/source/ooo/module_hidden_ooo.scp
@@ -75,7 +75,6 @@ End
#endif
#endif
-#ifndef LIBO_HEADLESS
Module gid_Module_Root_Files_Images
PackageInfo = "packinfo_office.txt";
ParentID = gid_Module_Root;
@@ -87,7 +86,6 @@ Module gid_Module_Root_Files_Images
Styles = (HIDDEN_ROOT);
Files = (auto_ooo_images_ALL);
End
-#endif
#ifndef WITHOUT_FONTS
Module gid_Module_Root_Fonts_OOo_Hidden
diff --git a/solenv/gbuild/gbuild.mk b/solenv/gbuild/gbuild.mk
index 0aee4f84776d..1a20050b651e 100644
--- a/solenv/gbuild/gbuild.mk
+++ b/solenv/gbuild/gbuild.mk
@@ -228,11 +228,6 @@ gb_GLOBALDEFS += -DDEBUG \
endif
endif
-ifeq ($(DISABLE_GUI),TRUE)
-gb_GLOBALDEFS += -DLIBO_HEADLESS \
-
-endif
-
gb_GLOBALDEFS += \
$(call gb_Helper_define_if_set,\
DISABLE_DYNLOADING \
diff --git a/sw/qa/extras/odfimport/odfimport.cxx b/sw/qa/extras/odfimport/odfimport.cxx
index 4df20d9e42a8..38185017ecda 100644
--- a/sw/qa/extras/odfimport/odfimport.cxx
+++ b/sw/qa/extras/odfimport/odfimport.cxx
@@ -7,6 +7,8 @@
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
*/
+#include <config_features.h>
+
#include <swmodeltestbase.hxx>
#include <com/sun/star/awt/FontWeight.hpp>
@@ -611,7 +613,7 @@ DECLARE_ODFIMPORT_TEST(testFdo37606Copy, "fdo37606.odt")
// Previously copy&paste failed to copy the table in case it was the document-starting one.
uno::Reference<text::XTextTablesSupplier> xTablesSupplier(mxComponent, uno::UNO_QUERY);
uno::Reference<container::XIndexAccess> xTables(xTablesSupplier->getTextTables(), uno::UNO_QUERY);
-#if !defined(MACOSX) && !defined(LIBO_HEADLESS) // FIXME
+#if !defined(MACOSX) && HAVE_FEATURE_UI
CPPUNIT_ASSERT_EQUAL(sal_Int32(2), xTables->getCount());
#endif
}
diff --git a/vcl/headless/svpinst.cxx b/vcl/headless/svpinst.cxx
index 22ec77ec8c7f..80223ac58904 100644
--- a/vcl/headless/svpinst.cxx
+++ b/vcl/headless/svpinst.cxx
@@ -17,6 +17,7 @@
* the License at http://www.apache.org/licenses/LICENSE-2.0 .
*/
+#include <config_features.h>
#include <unistd.h>
#include <errno.h>
#include <fcntl.h>
@@ -29,7 +30,7 @@
#include <vcl/inputtypes.hxx>
#include <vcl/lok.hxx>
-#ifndef LIBO_HEADLESS
+#if HAVE_FEATURE_UI
# include <vcl/opengl/OpenGLContext.hxx>
#endif
@@ -548,32 +549,33 @@ void SvpSalInstance::AddToRecentDocumentList(const OUString&, const OUString&, c
//obviously doesn't actually do anything, it's just a nonfunctional stub
-#ifdef LIBO_HEADLESS
+#if HAVE_FEATURE_UI
-class SvpOpenGLContext
+class SvpOpenGLContext : public OpenGLContext
{
+ GLWindow m_aGLWin;
+private:
+ virtual const GLWindow& getOpenGLWindow() const override { return m_aGLWin; }
+ virtual GLWindow& getModifiableOpenGLWindow() override { return m_aGLWin; }
};
OpenGLContext* SvpSalInstance::CreateOpenGLContext()
{
- return nullptr;
+ return new SvpOpenGLContext;
}
#else
-class SvpOpenGLContext : public OpenGLContext
+class SvpOpenGLContext
{
- GLWindow m_aGLWin;
-private:
- virtual const GLWindow& getOpenGLWindow() const override { return m_aGLWin; }
- virtual GLWindow& getModifiableOpenGLWindow() override { return m_aGLWin; }
};
OpenGLContext* SvpSalInstance::CreateOpenGLContext()
{
- return new SvpOpenGLContext;
+ return nullptr;
}
+
#endif
SvpSalTimer::~SvpSalTimer()
diff --git a/vcl/inc/svsys.h b/vcl/inc/svsys.h
index 8c283f221e11..d86985669e80 100644
--- a/vcl/inc/svsys.h
+++ b/vcl/inc/svsys.h
@@ -20,6 +20,8 @@
#ifndef INCLUDED_VCL_INC_SVSYS_H
#define INCLUDED_VCL_INC_SVSYS_H
+#include <config_features.h>
+
#ifdef _WIN32
#include "win/svsys.h"
#elif defined MACOSX
@@ -29,7 +31,7 @@
#elif defined ANDROID
#include "android/svsys.h"
#elif defined HAIKU
-#elif defined LIBO_HEADLESS
+#elif !HAVE_FEATURE_UI
#else
#include "unx/svsys.h"
#endif
diff --git a/vcl/source/salmain/salmain.cxx b/vcl/source/salmain/salmain.cxx
index b2b45a89e934..95f23eebde5f 100644
--- a/vcl/source/salmain/salmain.cxx
+++ b/vcl/source/salmain/salmain.cxx
@@ -18,6 +18,7 @@
*/
#include <sal/config.h>
+#include <config_features.h>
#include <cstdlib>
@@ -28,12 +29,12 @@
#include <salinst.hxx>
-#if defined( UNX ) && !defined MACOSX && !defined IOS && !defined ANDROID && !defined LIBO_HEADLESS && !defined HAIKU
+#if defined( UNX ) && !defined MACOSX && !defined IOS && !defined ANDROID && HAVE_FEATURE_UI && !defined HAIKU
#include <opengl/x11/glxtest.hxx>
#endif
SAL_IMPLEMENT_MAIN() {
-#if defined( UNX ) && !defined MACOSX && !defined IOS && !defined ANDROID && !defined LIBO_HEADLESS && !defined HAIKU
+#if defined( UNX ) && !defined MACOSX && !defined IOS && !defined ANDROID && HAVE_FEATURE_UI && !defined HAIKU
fire_glxtest_process();
#endif
tools::extendApplicationEnvironment();
commit 102f3e37a9439c6eba4f990576019eb7110fecdc
Author: Aron Budea <aron.budea at collabora.com>
AuthorDate: Sun Jul 28 05:51:40 2019 +0200
Commit: Andras Timar <andras.timar at collabora.com>
CommitDate: Sun Sep 22 19:02:42 2019 +0200
tdf#125800: accessing cond format props in UNO throws error
These conditions were always evaluated to true: OR should
become AND when negated.
Regression from 8c637b47d9de4b3a64c33a9c2ffe7ed220be2467
Change-Id: I87038319ed27eff2bed2412da49e01f73ec0a79c
Reviewed-on: https://gerrit.libreoffice.org/76493
Reviewed-by: Gülşah Köse <gulsah.kose at collabora.com>
Reviewed-by: Aron Budea <aron.budea at collabora.com>
Tested-by: Aron Budea <aron.budea at collabora.com>
(cherry picked from commit 9ad8f83912e6cf14d7b3b3e1cb2a79d819247c82)
diff --git a/sc/source/core/data/table2.cxx b/sc/source/core/data/table2.cxx
index f7ff62260b05..524dfe220190 100644
--- a/sc/source/core/data/table2.cxx
+++ b/sc/source/core/data/table2.cxx
@@ -2185,7 +2185,7 @@ void ScTable::FindMaxRotCol( RowInfo* pRowInfo, SCSIZE nArrCount, SCCOL nX1, SCC
for (size_t nEntry=0; nEntry<nEntryCount; nEntry++)
{
const ScFormatEntry* pEntry = pFormat->GetEntry(nEntry);
- if(pEntry->GetType() != ScFormatEntry::Type::Condition ||
+ if(pEntry->GetType() != ScFormatEntry::Type::Condition &&
pEntry->GetType() != ScFormatEntry::Type::ExtCondition)
continue;
diff --git a/sc/source/ui/unoobj/fmtuno.cxx b/sc/source/ui/unoobj/fmtuno.cxx
index 40af3ba2d59b..f311c65dd59a 100644
--- a/sc/source/ui/unoobj/fmtuno.cxx
+++ b/sc/source/ui/unoobj/fmtuno.cxx
@@ -162,7 +162,7 @@ ScTableConditionalFormat::ScTableConditionalFormat(
{
ScCondFormatEntryItem aItem;
const ScFormatEntry* pFrmtEntry = pFormat->GetEntry(i);
- if(pFrmtEntry->GetType() != ScFormatEntry::Type::Condition ||
+ if(pFrmtEntry->GetType() != ScFormatEntry::Type::Condition &&
pFrmtEntry->GetType() != ScFormatEntry::Type::ExtCondition)
continue;
commit 1444e5b1e97584d66d8a565b3f443ff98f27c6b5
Author: Tomaž Vajngerl <tomaz.vajngerl at collabora.co.uk>
AuthorDate: Wed Mar 20 20:54:31 2019 +0900
Commit: Andras Timar <andras.timar at collabora.com>
CommitDate: Sun Sep 22 19:02:08 2019 +0200
tdf#124153 fix cut-off radio button
Change-Id: I8e07a8c49a9dc47cb8b75b61450125d449a45d1e
Reviewed-on: https://gerrit.libreoffice.org/69467
Tested-by: Jenkins
Reviewed-by: Adolfo Jayme Barrientos <fitojb at ubuntu.com>
(cherry picked from commit 7aaa82b21af0bc212e572f1e1d931fb80b1e3e75)
diff --git a/cui/uiconfig/ui/transparencytabpage.ui b/cui/uiconfig/ui/transparencytabpage.ui
index c039f27e2987..63a1d5b40cc4 100644
--- a/cui/uiconfig/ui/transparencytabpage.ui
+++ b/cui/uiconfig/ui/transparencytabpage.ui
@@ -80,7 +80,6 @@
<property name="receives_default">False</property>
<property name="use_underline">True</property>
<property name="xalign">0</property>
- <property name="image_position">bottom</property>
<property name="active">True</property>
<property name="draw_indicator">True</property>
</object>
@@ -97,7 +96,6 @@
<property name="receives_default">False</property>
<property name="use_underline">True</property>
<property name="xalign">0</property>
- <property name="image_position">right</property>
<property name="draw_indicator">True</property>
<property name="group">RBT_TRANS_OFF</property>
<accessibility>
commit 79eed26585da88acb076fe9b270a890ac0fb957e
Author: Tomaž Vajngerl <tomaz.vajngerl at collabora.co.uk>
AuthorDate: Mon Jun 3 14:42:44 2019 +0900
Commit: Andras Timar <andras.timar at collabora.com>
CommitDate: Sun Sep 22 19:01:32 2019 +0200
Add distro config for iOS simulator to make building easier
Change-Id: Iff70622732792224b3c0a080f95d69f86c167ae6
Reviewed-on: https://gerrit.libreoffice.org/73370
Tested-by: Jenkins
Reviewed-by: Tomaž Vajngerl <quikee at gmail.com>
(cherry picked from commit b4653db6504a7e12203d5defeea536a0decf76d8)
diff --git a/distro-configs/LibreOfficeiOS.conf b/distro-configs/LibreOfficeiOS.conf
index 92bc968a9f76..fef1a33eac4b 100644
--- a/distro-configs/LibreOfficeiOS.conf
+++ b/distro-configs/LibreOfficeiOS.conf
@@ -27,15 +27,6 @@
--without-tls
-# iOS simulator (debug)
-#--enable-ios-simulator
-#--enable-debug
-
-# iOS Device (debug)
-#--enable-ios-simulator
-#--enable-debug
-#--host=arm64-apple-darwin
-
-# iOS Device (release)
+# iOS device
--host=arm64-apple-darwin
diff --git a/distro-configs/LibreOfficeiOS_Sim.conf b/distro-configs/LibreOfficeiOS_Sim.conf
new file mode 100644
index 000000000000..146be2bd3bcc
--- /dev/null
+++ b/distro-configs/LibreOfficeiOS_Sim.conf
@@ -0,0 +1,32 @@
+--disable-breakpad
+--disable-firebird-sdbc
+--disable-online-update
+
+--without-export-validation
+--without-helppack-integration
+--without-java
+--without-junit
+
+--with-theme=colibre tango
+
+--with-build-platform-configure-options=--with-system-jpeg=no
+--with-macosx-version-min-required=10.11
+
+--disable-avahi
+--disable-avmedia
+--disable-compiler-plugins
+--disable-cups
+--disable-database-connectivity
+--disable-dconf
+--disable-extensions
+--disable-kde5
+--disable-odk
+--disable-openssl
+--disable-pdfium
+--disable-python
+
+--without-tls
+
+# iOS simulator (debug)
+--enable-ios-simulator
+--enable-debug
commit 3787e1b78299ee88a17c242d0b30181286a753c4
Author: Tomaž Vajngerl <tomaz.vajngerl at collabora.co.uk>
AuthorDate: Mon Dec 31 12:14:19 2018 +0100
Commit: Andras Timar <andras.timar at collabora.com>
CommitDate: Sun Sep 22 19:00:58 2019 +0200
NSS: create a temporary database instead of in-memory
When initializing for the in-memory database (NSS_NoDB_Init) the
internal slot is read-only so a lot of actions (PK11_ImportCert)
fails. Instead of that we create a new cert/key database inside
the tmp directory and delete it on exit. This way there are no
limitations and all the actions perform as expected.
Change-Id: Iadec5dd8f3459be56ba57d077057eacf3e0797fc
Reviewed-on: https://gerrit.libreoffice.org/65765
Tested-by: Jenkins
Reviewed-by: Tomaž Vajngerl <quikee at gmail.com>
(cherry picked from commit 87eec1b90b6ecd83455f09168430c23f73c25c86)
diff --git a/xmlsecurity/Library_xsec_xmlsec.mk b/xmlsecurity/Library_xsec_xmlsec.mk
index 8efb4911fbbb..1ddbb712b957 100644
--- a/xmlsecurity/Library_xsec_xmlsec.mk
+++ b/xmlsecurity/Library_xsec_xmlsec.mk
@@ -41,6 +41,7 @@ $(eval $(call gb_Library_use_libraries,xsec_xmlsec,\
svl \
tl \
xo \
+ utl \
))
ifeq ($(SYSTEM_XMLSEC),)
diff --git a/xmlsecurity/source/xmlsec/nss/nssinitializer.cxx b/xmlsecurity/source/xmlsec/nss/nssinitializer.cxx
index 5d33268f741d..534c5bd7fc5c 100644
--- a/xmlsecurity/source/xmlsec/nss/nssinitializer.cxx
+++ b/xmlsecurity/source/xmlsec/nss/nssinitializer.cxx
@@ -32,6 +32,8 @@
#include <osl/file.hxx>
#include <osl/thread.h>
#include <sal/log.hxx>
+#include <unotools/tempfile.hxx>
+#include <salhelper/singletonref.hxx>
#include "seinitializer_nssimpl.hxx"
@@ -40,6 +42,7 @@
#include "ciphercontext.hxx"
#include <memory>
+#include <vector>
#include <nspr.h>
#include <cert.h>
@@ -64,6 +67,97 @@ static void nsscrypto_finalize();
namespace
{
+class InitNSSPrivate
+{
+private:
+ std::unique_ptr<utl::TempFile> m_pTempFileDatabaseDirectory;
+
+ static void scanDirsAndFiles(OUString const & rDirURL, std::vector<OUString> & rDirs, std::vector<OUString> & rFiles)
+ {
+ if (rDirURL.isEmpty())
+ return;
+ osl::Directory aDirectory(rDirURL);
+
+ if (osl::FileBase::E_None != aDirectory.open())
+ return;
+
+ osl::DirectoryItem aDirectoryItem;
+
+ while (osl::FileBase::E_None == aDirectory.getNextItem(aDirectoryItem))
+ {
+ osl::FileStatus aFileStatus(osl_FileStatus_Mask_Type | osl_FileStatus_Mask_FileURL | osl_FileStatus_Mask_FileName);
+
+ if (osl::FileBase::E_None == aDirectoryItem.getFileStatus(aFileStatus))
+ {
+ if (aFileStatus.isDirectory())
+ {
+ const OUString aFileName(aFileStatus.getFileName());
+ if (!aFileName.isEmpty())
+ rDirs.push_back(aFileName);
+ }
+ else if (aFileStatus.isRegular())
+ {
+ const OUString aFileName(aFileStatus.getFileName());
+ if (!aFileName.isEmpty())
+ rFiles.push_back(aFileName);
+
+ }
+ }
+ }
+ }
+
+ static bool deleteDirRecursively(OUString const & rDirURL)
+ {
+ std::vector<OUString> aDirs;
+ std::vector<OUString> aFiles;
+ bool bError(false);
+
+ scanDirsAndFiles(rDirURL, aDirs, aFiles);
+
+ for (const auto& sDir : aDirs)
+ {
+ const OUString aNewDirURL(rDirURL + "/" + sDir);
+ bError |= deleteDirRecursively(aNewDirURL);
+ }
+
+ for (const auto& sFile : aFiles)
+ {
+ OUString aNewFileURL(rDirURL + "/" + sFile);
+ bError |= (osl::FileBase::E_None != osl::File::remove(aNewFileURL));
+ }
+
+ bError |= (osl::FileBase::E_None != osl::Directory::remove(rDirURL));
+
+ return bError;
+ }
+
+public:
+ OUString getTempDatabasePath()
+ {
+ if (!m_pTempFileDatabaseDirectory)
+ {
+ m_pTempFileDatabaseDirectory.reset(new utl::TempFile(nullptr, true));
+ m_pTempFileDatabaseDirectory->EnableKillingFile();
+ }
+ return m_pTempFileDatabaseDirectory->GetFileName();
+ }
+
+ void reset()
+ {
+ if (m_pTempFileDatabaseDirectory)
+ {
+ deleteDirRecursively(m_pTempFileDatabaseDirectory->GetURL());
+ m_pTempFileDatabaseDirectory.reset();
+ }
+ }
+};
+
+salhelper::SingletonRef<InitNSSPrivate>* getInitNSSPrivate()
+{
+ static salhelper::SingletonRef<InitNSSPrivate> aInitNSSPrivate;
+ return &aInitNSSPrivate;
+}
+
bool nsscrypto_initialize( const css::uno::Reference< css::uno::XComponentContext > &rxContext, bool & out_nss_init );
struct InitNSSInitialize
@@ -230,7 +324,7 @@ OString getMozillaCurrentProfile( const css::uno::Reference< css::uno::XComponen
//return true - whole initialization was successful
//param out_nss_init = true: at least the NSS initialization (NSS_InitReadWrite
//was successful and therefore NSS_Shutdown should be called when terminating.
-bool nsscrypto_initialize( const css::uno::Reference< css::uno::XComponentContext > &rxContext, bool & out_nss_init )
+bool nsscrypto_initialize(css::uno::Reference<css::uno::XComponentContext> const & rxContext, bool & out_nss_init)
{
// this method must be called only once, no need for additional lock
OString sCertDir;
@@ -244,9 +338,9 @@ bool nsscrypto_initialize( const css::uno::Reference< css::uno::XComponentContex
PR_Init( PR_USER_THREAD, PR_PRIORITY_NORMAL, 1 ) ;
- bool bSuccess = true;
+ bool bSuccess = false;
// there might be no profile
- if ( !sCertDir.isEmpty() )
+ if (!sCertDir.isEmpty())
{
if (sCertDir.indexOf(':') == -1) //might be env var with explicit prefix
{
@@ -262,26 +356,31 @@ bool nsscrypto_initialize( const css::uno::Reference< css::uno::XComponentContex
sCertDir = "dbm:" + sCertDir;
}
}
- if( NSS_InitReadWrite( sCertDir.getStr() ) != SECSuccess )
+ if (NSS_InitReadWrite(sCertDir.getStr()) != SECSuccess)
{
SAL_INFO("xmlsecurity.xmlsec", "Initializing NSS with profile failed.");
int errlen = PR_GetErrorTextLength();
- if(errlen > 0)
+ if (errlen > 0)
{
std::unique_ptr<char[]> const error(new char[errlen + 1]);
PR_GetErrorText(error.get());
SAL_INFO("xmlsecurity.xmlsec", error.get());
}
- bSuccess = false;
+ }
+ else
+ {
+ bSuccess = true;
}
}
- if( sCertDir.isEmpty() || !bSuccess )
+ if (!bSuccess) // Try to create a database in temp dir
{
- SAL_INFO("xmlsecurity.xmlsec", "Initializing NSS without profile.");
- if ( NSS_NoDB_Init(nullptr) != SECSuccess )
+ SAL_INFO("xmlsecurity.xmlsec", "Initializing NSS with a temporary profile.");
+ OUString rString = (*getInitNSSPrivate())->getTempDatabasePath();
+
+ if (NSS_InitReadWrite(rString.toUtf8().getStr()) != SECSuccess)
{
- SAL_INFO("xmlsecurity.xmlsec", "Initializing NSS without profile failed.");
+ SAL_INFO("xmlsecurity.xmlsec", "Initializing NSS with a temporary profile.");
int errlen = PR_GetErrorTextLength();
if(errlen > 0)
{
@@ -289,7 +388,15 @@ bool nsscrypto_initialize( const css::uno::Reference< css::uno::XComponentContex
PR_GetErrorText(error.get());
SAL_INFO("xmlsecurity.xmlsec", error.get());
}
- return false ;
+ return false;
+ }
+ // Initialize and set empty password if needed
+ PK11SlotInfo* pSlot = PK11_GetInternalKeySlot();
+ if (pSlot)
+ {
+ if (PK11_NeedUserInit(pSlot))
+ PK11_InitPin(pSlot, nullptr, nullptr);
+ PK11_FreeSlot(pSlot);
}
}
out_nss_init = true;
@@ -383,6 +490,8 @@ extern "C" void nsscrypto_finalize()
}
PK11_LogoutAll();
(void)NSS_Shutdown();
+
+ (*getInitNSSPrivate())->reset();
}
ONSSInitializer::ONSSInitializer(
diff --git a/xmlsecurity/source/xmlsec/nss/securityenvironment_nssimpl.cxx b/xmlsecurity/source/xmlsec/nss/securityenvironment_nssimpl.cxx
index 0da6276551af..b19ec766b5db 100644
--- a/xmlsecurity/source/xmlsec/nss/securityenvironment_nssimpl.cxx
+++ b/xmlsecurity/source/xmlsec/nss/securityenvironment_nssimpl.cxx
@@ -42,6 +42,7 @@
#include <comphelper/sequence.hxx>
#include "secerror.hxx"
+#include <prerror.h>
// added for password exception
#include <com/sun/star/security/NoPasswordException.hpp>
@@ -442,15 +443,34 @@ X509Certificate_NssImpl* SecurityEnvironment_NssImpl::createAndAddCertificateFro
if (!pCERTCertificate)
return nullptr;
- OString aTrustString = OUStringToOString(raString, RTL_TEXTENCODING_ASCII_US);
+ SECStatus aStatus;
+ OString aTrustString = OUStringToOString(raString, RTL_TEXTENCODING_ASCII_US);
CERTCertTrust aTrust;
- if (CERT_DecodeTrustString(&aTrust, aTrustString.getStr()) != SECSuccess)
+
+ aStatus = CERT_DecodeTrustString(&aTrust, aTrustString.getStr());
+
+ if (aStatus != SECSuccess)
+ return nullptr;
+
+ PK11SlotInfo* pSlot = PK11_GetInternalKeySlot();
+
+ if (!pSlot)
return nullptr;
- if (CERT_ChangeCertTrust(CERT_GetDefaultCertDB(), pCERTCertificate, &aTrust) != SECSuccess)
+ aStatus = PK11_ImportCert(pSlot, pCERTCertificate, CK_INVALID_HANDLE, nullptr, PR_FALSE);
+
+ if (aStatus != SECSuccess)
return nullptr;
+ aStatus = CERT_ChangeCertTrust(CERT_GetDefaultCertDB(), pCERTCertificate, &aTrust);
+
+ if (aStatus != SECSuccess)
+ return nullptr;
+
+
+ PK11_FreeSlot(pSlot);
+
X509Certificate_NssImpl* pX509Certificate = new X509Certificate_NssImpl();
pX509Certificate->setCert(pCERTCertificate);
return pX509Certificate;
@@ -840,12 +860,10 @@ xmlSecKeysMngrPtr SecurityEnvironment_NssImpl::createKeysManager() {
// Adopt the private key of the signing certificate, if it has any.
if (auto pCertificate = dynamic_cast<X509Certificate_NssImpl*>(m_xSigningCertificate.get()))
{
- SECKEYPrivateKey* pPrivateKey = pCertificate->getPrivateKey();
- SECKEYPrivateKey* copy
- = pPrivateKey == nullptr ? nullptr : SECKEY_CopyPrivateKey(pPrivateKey);
- if (copy)
+ SECKEYPrivateKey* pPrivateKey = SECKEY_CopyPrivateKey(pCertificate->getPrivateKey());
+ if (pPrivateKey)
{
- xmlSecKeyDataPtr pKeyData = xmlSecNssPKIAdoptKey(copy, nullptr);
+ xmlSecKeyDataPtr pKeyData = xmlSecNssPKIAdoptKey(pPrivateKey, nullptr);
xmlSecKeyPtr pKey = xmlSecKeyCreate();
xmlSecKeySetValue(pKey, pKeyData);
xmlSecNssAppDefaultKeysMngrAdoptKey(pKeysMngr, pKey);
@@ -872,42 +890,40 @@ SECKEYPrivateKey* SecurityEnvironment_NssImpl::insertPrivateKey(css::uno::Sequen
if (!pSlot)
return nullptr;
- SECItem pDerPrivateKeyInfo;
- pDerPrivateKeyInfo.data = reinterpret_cast<unsigned char *>(const_cast<sal_Int8 *>(raPrivateKey.getConstArray()));
- pDerPrivateKeyInfo.len = raPrivateKey.getLength();
+ SECItem aDerPrivateKeyInfo;
+ aDerPrivateKeyInfo.data = reinterpret_cast<unsigned char *>(const_cast<sal_Int8 *>(raPrivateKey.getConstArray()));
+ aDerPrivateKeyInfo.len = raPrivateKey.getLength();
- const unsigned int aKeyUsage = KU_KEY_ENCIPHERMENT | KU_DATA_ENCIPHERMENT | KU_DIGITAL_SIGNATURE;
+ const unsigned int aKeyUsage = KU_ALL;
SECKEYPrivateKey* pPrivateKey = nullptr;
- bool bPermanent = false;
- bool bSensitive = false;
+ bool bPermanent = PR_FALSE;
+ bool bPrivate = PR_TRUE;
SECStatus nStatus = PK11_ImportDERPrivateKeyInfoAndReturnKey(
- pSlot, &pDerPrivateKeyInfo, nullptr, nullptr, bPermanent, bSensitive,
+ pSlot, &aDerPrivateKeyInfo, nullptr, nullptr, bPermanent, bPrivate,
aKeyUsage, &pPrivateKey, nullptr);
if (nStatus != SECSuccess)
return nullptr;
+ PK11_FreeSlot(pSlot);
+
return pPrivateKey;
}
uno::Reference<security::XCertificate> SecurityEnvironment_NssImpl::createDERCertificateWithPrivateKey(
Sequence<sal_Int8> const & raDERCertificate, Sequence<sal_Int8> const & raPrivateKey)
{
-
SECKEYPrivateKey* pPrivateKey = insertPrivateKey(raPrivateKey);
if (!pPrivateKey)
return uno::Reference<security::XCertificate>();
- X509Certificate_NssImpl* pX509Certificate = createAndAddCertificateFromPackage(raDERCertificate, "TCu,Cu,Tu");
-
+ X509Certificate_NssImpl* pX509Certificate = createAndAddCertificateFromPackage(raDERCertificate, "TCu,TCu,TCu");
if (!pX509Certificate)
return uno::Reference<security::XCertificate>();
- pX509Certificate->setCustomPrivateKey(pPrivateKey);
-
return pX509Certificate;
}
diff --git a/xmlsecurity/source/xmlsec/nss/x509certificate_nssimpl.cxx b/xmlsecurity/source/xmlsec/nss/x509certificate_nssimpl.cxx
index 35a3e841e6f4..180ef6558d38 100644
--- a/xmlsecurity/source/xmlsec/nss/x509certificate_nssimpl.cxx
+++ b/xmlsecurity/source/xmlsec/nss/x509certificate_nssimpl.cxx
@@ -46,8 +46,7 @@ using ::com::sun::star::security::XCertificate ;
using ::com::sun::star::util::DateTime ;
X509Certificate_NssImpl::X509Certificate_NssImpl() :
- m_pCert(nullptr),
- m_pPrivateKey(nullptr)
+ m_pCert(nullptr)
{
}
@@ -332,25 +331,13 @@ void X509Certificate_NssImpl::setRawCert( const Sequence< sal_Int8 >& rawCert )
m_pCert = cert ;
}
-void X509Certificate_NssImpl::setCustomPrivateKey(SECKEYPrivateKey* pPrivateKey)
-{
- m_pPrivateKey = pPrivateKey;
-}
-
SECKEYPrivateKey* X509Certificate_NssImpl::getPrivateKey()
{
- if (m_pPrivateKey)
- {
- return m_pPrivateKey;
- }
- else
+ if (m_pCert && m_pCert->slot)
{
- if (m_pCert && m_pCert->slot)
- {
- SECKEYPrivateKey* pPrivateKey = PK11_FindPrivateKeyFromCert(m_pCert->slot, m_pCert, nullptr);
- if (pPrivateKey)
- return pPrivateKey;
- }
+ SECKEYPrivateKey* pPrivateKey = PK11_FindPrivateKeyFromCert(m_pCert->slot, m_pCert, nullptr);
+ if (pPrivateKey)
+ return pPrivateKey;
}
return nullptr;
}
diff --git a/xmlsecurity/source/xmlsec/nss/x509certificate_nssimpl.hxx b/xmlsecurity/source/xmlsec/nss/x509certificate_nssimpl.hxx
index 64c76972bf83..cae1f7238739 100644
--- a/xmlsecurity/source/xmlsec/nss/x509certificate_nssimpl.hxx
+++ b/xmlsecurity/source/xmlsec/nss/x509certificate_nssimpl.hxx
@@ -41,7 +41,6 @@ class X509Certificate_NssImpl : public ::cppu::WeakImplHelper<
{
private:
CERTCertificate* m_pCert;
- SECKEYPrivateKey* m_pPrivateKey;
public:
X509Certificate_NssImpl() ;
@@ -97,7 +96,6 @@ class X509Certificate_NssImpl : public ::cppu::WeakImplHelper<
/// @throws css::uno::RuntimeException
void setRawCert( const css::uno::Sequence< sal_Int8 >& rawCert ) ;
- void setCustomPrivateKey(SECKEYPrivateKey* pPrivateKey);
SECKEYPrivateKey* getPrivateKey();
// XServiceInfo
commit 6fca83fab5a14745c3dc41eb8179d7ee0efd4e71
Author: Tomaž Vajngerl <tomaz.vajngerl at collabora.co.uk>
AuthorDate: Fri Nov 30 11:48:50 2018 +0100
Commit: Andras Timar <andras.timar at collabora.com>
CommitDate: Sun Sep 22 19:00:17 2019 +0200
convert to range for
Change-Id: I3558010129eaafdab94ca3f8a63abeda32318fbb
Reviewed-on: https://gerrit.libreoffice.org/64336
Tested-by: Jenkins
Reviewed-by: Tomaž Vajngerl <quikee at gmail.com>
(cherry picked from commit bb8c2b1cbf7a9eb56b1515f60a2aadbef24199a2)
diff --git a/xmlsecurity/source/helper/documentsignaturemanager.cxx b/xmlsecurity/source/helper/documentsignaturemanager.cxx
index c3641829b4f3..5da6459779f7 100644
--- a/xmlsecurity/source/helper/documentsignaturemanager.cxx
+++ b/xmlsecurity/source/helper/documentsignaturemanager.cxx
@@ -414,11 +414,10 @@ bool DocumentSignatureManager::add(
mxStore, meSignatureMode, DocumentSignatureAlgorithm::OOo3_2);
DocumentSignatureHelper::AppendContentTypes(mxStore, aElements);
- sal_Int32 nElements = aElements.size();
- for (sal_Int32 n = 0; n < nElements; n++)
+ for (OUString const& rUri : aElements)
{
- bool bBinaryMode = !isXML(aElements[n]);
- maSignatureHelper.AddForSigning(nSecurityId, aElements[n], bBinaryMode, bAdESCompliant);
+ bool bBinaryMode = !isXML(rUri);
+ maSignatureHelper.AddForSigning(nSecurityId, rUri, bBinaryMode, bAdESCompliant);
}
maSignatureHelper.SetDateTime(nSecurityId, DateTime(DateTime::SYSTEM));
commit 9835ac90d002e28249bcac9c951b54cca1901599
Author: Tomaž Vajngerl <tomaz.vajngerl at collabora.co.uk>
AuthorDate: Thu Nov 29 22:06:02 2018 +0100
Commit: Andras Timar <andras.timar at collabora.com>
CommitDate: Sun Sep 22 18:57:40 2019 +0200
xmlsecurity: clean-up code a bit
Change-Id: I4a43f1f33f73919f56150310e7d05244d81b7510
Reviewed-on: https://gerrit.libreoffice.org/64294
Tested-by: Jenkins
Reviewed-by: Tomaž Vajngerl <quikee at gmail.com>
(cherry picked from commit 40d52cfe3b64e6bac035caed825486546bba5280)
diff --git a/xmlsecurity/source/xmlsec/nss/xmlsignature_nssimpl.cxx b/xmlsecurity/source/xmlsec/nss/xmlsignature_nssimpl.cxx
index 1dc7b735c94e..311ce6aeb69f 100644
--- a/xmlsecurity/source/xmlsec/nss/xmlsignature_nssimpl.cxx
+++ b/xmlsecurity/source/xmlsec/nss/xmlsignature_nssimpl.cxx
@@ -135,7 +135,7 @@ SAL_CALL XMLSignature_NssImpl::generate(
if( pSecEnv == nullptr )
throw RuntimeException() ;
- setErrorRecorder();
+ setErrorRecorder();
std::unique_ptr<xmlSecKeysMngr> pMngr(pSecEnv->createKeysManager());
if( !pMngr ) {
@@ -283,25 +283,27 @@ SAL_CALL XMLSignature_NssImpl::validate(
}
/* XServiceInfo */
-OUString SAL_CALL XMLSignature_NssImpl::getImplementationName() {
+OUString SAL_CALL XMLSignature_NssImpl::getImplementationName()
+{
return OUString("com.sun.star.xml.crypto.XMLSignature");
}
/* XServiceInfo */
-sal_Bool SAL_CALL XMLSignature_NssImpl::supportsService( const OUString& serviceName) {
- Sequence< OUString > seqServiceNames = getSupportedServiceNames() ;
- const OUString* pArray = seqServiceNames.getConstArray() ;
- for( sal_Int32 i = 0 ; i < seqServiceNames.getLength() ; i ++ ) {
- if( *( pArray + i ) == serviceName )
- return true ;
+sal_Bool SAL_CALL XMLSignature_NssImpl::supportsService(const OUString& rServiceName)
+{
+ for (OUString const & rCurrentServiceName : getSupportedServiceNames())
+ {
+ if (rCurrentServiceName == rServiceName)
+ return true;
}
- return false ;
+ return false;
}
/* XServiceInfo */
-Sequence< OUString > SAL_CALL XMLSignature_NssImpl::getSupportedServiceNames() {
+Sequence<OUString> SAL_CALL XMLSignature_NssImpl::getSupportedServiceNames()
+{
Sequence<OUString> seqServiceNames { "com.sun.star.xml.crypto.XMLSignature" };
- return seqServiceNames ;
+ return seqServiceNames;
}
extern "C" SAL_DLLPUBLIC_EXPORT uno::XInterface*
commit 6d4e1c3a3f9903ae3f74fe4caa52e14f46ebd206
Author: Tomaž Vajngerl <tomaz.vajngerl at collabora.co.uk>
AuthorDate: Thu Nov 29 21:58:57 2018 +0100
Commit: Andras Timar <andras.timar at collabora.com>
CommitDate: Sun Sep 22 18:56:59 2019 +0200
lokit: disable triggering of GUI when changing a signed doc
When a signed document is changed and saved, the dialog pops up
on the GUI to warn that the signature will be removed. When saving
over the lokit this dialog isn't shown and assumes that we don't
want to save (throws an exception) which means we can't save the
document ever. This changes the behavior so that we allow removal
of the signature and saving can proceed.
Change-Id: I52e4a53f0cd3a326c767daee6301a78122af09d4
Reviewed-on: https://gerrit.libreoffice.org/64293
Tested-by: Jenkins
Reviewed-by: Tomaž Vajngerl <quikee at gmail.com>
(cherry picked from commit c2ee336288dcee103f297a55287fbca596a6c7a1)
diff --git a/sfx2/source/doc/guisaveas.cxx b/sfx2/source/doc/guisaveas.cxx
index 15928451f2b1..ca61c84152ec 100644
--- a/sfx2/source/doc/guisaveas.cxx
+++ b/sfx2/source/doc/guisaveas.cxx
@@ -67,6 +67,7 @@
#include <comphelper/propertysequence.hxx>
#include <comphelper/sequenceashashmap.hxx>
#include <comphelper/mimeconfighelper.hxx>
+#include <comphelper/lok.hxx>
#include <vcl/weld.hxx>
#include <vcl/window.hxx>
#include <toolkit/awt/vclxwindow.hxx>
@@ -1384,7 +1385,7 @@ bool SfxStoringHelper::GUIStoreModel( const uno::Reference< frame::XModel >& xMo
}
}
- if ( !( nStoreMode & EXPORT_REQUESTED ) )
+ if (!comphelper::LibreOfficeKit::isActive() && !( nStoreMode & EXPORT_REQUESTED ) )
{
// if it is no export, warn user that the signature will be removed
if ( SignatureState::OK == nDocumentSignatureState
@@ -1399,7 +1400,7 @@ bool SfxStoringHelper::GUIStoreModel( const uno::Reference< frame::XModel >& xMo
{
// the user has decided not to store the document
throw task::ErrorCodeIOException(
- "SfxStoringHelper::GUIStoreModel: ERRCODE_IO_ABORT",
+ "SfxStoringHelper::GUIStoreModel: ERRCODE_IO_ABORT (Preserve Signature)",
uno::Reference< uno::XInterface >(), sal_uInt32(ERRCODE_IO_ABORT));
}
}
More information about the Libreoffice-commits
mailing list