sw/qa/extras/docbookexport/data/tdf169122_Docbook_Example.xml |   37 ++++++++++
 sw/qa/extras/docbookexport/docbookexport.cxx                  |    9 ++
 xmloff/source/draw/sdpropls.cxx                               |   11 ++
 3 files changed, 57 insertions(+)

New commits:
commit a5fe9fbda02a3b3fcdb58d5db180760e3471fa04
Author:     Regina Henschel <[email protected]>
AuthorDate: Sat Nov 22 23:46:57 2025 +0100
Commit:     Regina Henschel <[email protected]>
CommitDate: Sun Nov 23 15:19:28 2025 +0100

    tdf#169122 no TextWritingMode if GraphicWritingMode2
    
    TextWritingMode and ControlWritingMode are suppressed when
    ShapeWritingMode exists.
    With commit c70ee4a6b9071468255e5d4fdb893e9c9bdf4fad we have in addition
    GraphicWritingMode2. Thus suppress them in that case too to avoid
    duplicate attributes.
    
    Change-Id: Ie7064e2dcea3a6dccc081f03bf027c1e7a261bfa
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/194371
    Reviewed-by: Regina Henschel <[email protected]>
    Tested-by: Jenkins

diff --git a/sw/qa/extras/docbookexport/data/tdf169122_Docbook_Example.xml 
b/sw/qa/extras/docbookexport/data/tdf169122_Docbook_Example.xml
new file mode 100644
index 000000000000..9077d6d242cc
--- /dev/null
+++ b/sw/qa/extras/docbookexport/data/tdf169122_Docbook_Example.xml
@@ -0,0 +1,37 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE article
+  PUBLIC "-//OASIS//DTD DocBook XML V4.1.2//EN" 
"http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd";>
+<article lang="">
+   <para>Docbook: Borked?</para>
+   <para>Most indeedly<footnote>
+         <para>Yep, that's not a word.</para>
+      </footnote>, good sire</para>
+   <sect1>
+      <title>A Heading</title>
+      <para>This is a normal paragraph under a heading 1.</para>
+      <sect2>
+         <title>A 2nd-level Heading</title>
+         <para>This is a normal paragraph under a heading 2.</para>
+         <itemizedlist mark="disc">
+            <listitem>
+               <para>Bullet lists?</para>
+            </listitem>
+            <listitem>
+               <para>Bullet lists!</para>
+            </listitem>
+         </itemizedlist>
+      </sect2>
+      <sect2>
+         <title>Another 2nd-level Heading</title>
+         <para>This is yet another normal paragraph under a heading 3.</para>
+         <orderedlist>
+            <listitem>
+               <para>Numbered lists?</para>
+            </listitem>
+            <listitem>
+               <para>NUMBERED LISTS! WOO!</para>
+            </listitem>
+         </orderedlist>
+      </sect2>
+   </sect1>
+</article>
\ No newline at end of file
diff --git a/sw/qa/extras/docbookexport/docbookexport.cxx 
b/sw/qa/extras/docbookexport/docbookexport.cxx
index 8c9f8b25d81a..4cf2040891c7 100644
--- a/sw/qa/extras/docbookexport/docbookexport.cxx
+++ b/sw/qa/extras/docbookexport/docbookexport.cxx
@@ -38,6 +38,15 @@ CPPUNIT_TEST_FIXTURE(DocbookExportTest, testtdf91095)
     CPPUNIT_ASSERT(pDoc);
 }
 
+CPPUNIT_TEST_FIXTURE(DocbookExportTest, testtdf169122_resave_docbook)
+{
+    // Without fix, resave of a docbook was not possible due to duplicate 
attributes.
+    createSwDoc("tdf169122_Docbook_Example.xml");
+    save(TestFilter::DOCBOOK);
+    xmlDocUniquePtr pDoc = parseXml(maTempFile);
+    CPPUNIT_ASSERT(pDoc);
+}
+
 } // end of anonymous namespace
 CPPUNIT_PLUGIN_IMPLEMENT();
 
diff --git a/xmloff/source/draw/sdpropls.cxx b/xmloff/source/draw/sdpropls.cxx
index 2a987ad78e6c..b647867a2b32 100644
--- a/xmloff/source/draw/sdpropls.cxx
+++ b/xmloff/source/draw/sdpropls.cxx
@@ -1624,6 +1624,17 @@ void XMLShapeExportPropertyMapper::ContextFilter(
             }
         }
     }
+    else if (pGraphicWritingMode2) // tdf#169122
+    {
+        sal_Int16 eGraphicWritingMode;
+        if (pGraphicWritingMode2->maValue >>= eGraphicWritingMode)
+        {
+            if (pTextWritingMode)
+                pTextWritingMode->mnIndex = -1;
+            if (pControlWritingMode)
+                pControlWritingMode->mnIndex = -1;
+        }
+    }
 
     // do not export visual area for internal ole objects
     if( pOLEIsInternal )

Reply via email to