[Libreoffice-commits] core.git: include/svx sc/source svx/source sw/inc sw/source uui/source vcl/headless vcl/inc vcl/unx

Caolán McNamara caolanm at redhat.com
Tue Feb 7 13:10:16 UTC 2017


 include/svx/swframeposstrings.hxx       |    6 
 sc/source/core/data/funcdesc.cxx        |    8 
 sc/source/core/src/compiler.src         |   58 +++-
 svx/source/dialog/swframeposstrings.cxx |   27 +-
 svx/source/dialog/swframeposstrings.src |  259 +++++++++++++++----
 sw/inc/shellres.hxx                     |    3 
 sw/source/ui/utlui/utlui.src            |  114 ++++++--
 sw/source/uibase/inc/utlui.hrc          |   40 --
 sw/source/uibase/utlui/initui.cxx       |   32 +-
 sw/source/uibase/utlui/initui.src       |  332 ++++++++++++------------
 uui/source/iahndl.cxx                   |   10 
 uui/source/iahndl.hxx                   |    8 
 uui/source/ids.src                      |  429 +++++++++++++++++++++-----------
 vcl/headless/svpframe.cxx               |    4 
 vcl/headless/svpgdi.cxx                 |  131 +++------
 vcl/headless/svpvd.cxx                  |   21 -
 vcl/inc/headless/svpgdi.hxx             |    5 
 vcl/inc/headless/svpvd.hxx              |    1 
 vcl/inc/unx/gtk/gtkframe.hxx            |    2 
 vcl/unx/gtk3/gtk3gtkframe.cxx           |   50 ++-
 20 files changed, 955 insertions(+), 585 deletions(-)

New commits:
commit 19ea3db6d33e8e1de57104e42796454757facd45
Author: Caolán McNamara <caolanm at redhat.com>
Date:   Tue Feb 7 13:09:31 2017 +0000

    revert unready stuff
    
    Change-Id: I2b112a17a2bc70bfe4d5a6af7964a3c1d7eacf9b

diff --git a/include/svx/swframeposstrings.hxx b/include/svx/swframeposstrings.hxx
index e04522e..b81765a 100644
--- a/include/svx/swframeposstrings.hxx
+++ b/include/svx/swframeposstrings.hxx
@@ -27,7 +27,7 @@
     contains strings needed for positioning dialogs
     of frames and drawing in Writer
  */
-class ResStringArray;
+class SvxSwFramePosString_Impl;
 class SVX_DLLPUBLIC SvxSwFramePosString
 {
 public:
@@ -80,10 +80,10 @@ public:
 
         STR_MAX
     };
-    OUString GetString(StringId eId) const;
+    const OUString& GetString(StringId eId);
 
 private:
-    std::unique_ptr<ResStringArray> pImpl;
+    std::unique_ptr<SvxSwFramePosString_Impl> pImpl;
 };
 #endif
 
diff --git a/sc/source/core/data/funcdesc.cxx b/sc/source/core/data/funcdesc.cxx
index b0c2671..56288b9 100644
--- a/sc/source/core/data/funcdesc.cxx
+++ b/sc/source/core/data/funcdesc.cxx
@@ -629,7 +629,7 @@ sal_uInt32 ScFunctionCategory::getCount() const
 OUString ScFunctionCategory::getName() const
 {
     if ( m_sName.isEmpty() )
-        m_sName = ScFunctionMgr::GetCategoryName(m_nCategory);
+        m_sName = ScFunctionMgr::GetCategoryName(m_nCategory+1);
     return m_sName;
 }
 
@@ -770,14 +770,14 @@ void ScFunctionMgr::fillLastRecentlyUsedFunctions(::std::vector< const formula::
 
 OUString ScFunctionMgr::GetCategoryName(sal_uInt32 _nCategoryNumber )
 {
-    if (_nCategoryNumber >= SC_FUNCGROUP_COUNT)
+    if ( _nCategoryNumber > SC_FUNCGROUP_COUNT )
     {
         OSL_FAIL("Invalid category number!");
         return OUString();
     }
 
-    ResStringArray aStringArray(ScResId(RID_FUNCTION_CATEGORIES));
-    return aStringArray.GetString(_nCategoryNumber);
+    std::unique_ptr<ScResourcePublisher> pCategories( new ScResourcePublisher( ScResId( RID_FUNCTION_CATEGORIES ) ) );
+    return SC_RESSTR(static_cast<sal_uInt16>(_nCategoryNumber));
 }
 
 sal_Unicode ScFunctionMgr::getSingleToken(const formula::IFunctionManager::EToken _eToken) const
diff --git a/sc/source/core/src/compiler.src b/sc/source/core/src/compiler.src
index dd3199e..d89ad70 100644
--- a/sc/source/core/src/compiler.src
+++ b/sc/source/core/src/compiler.src
@@ -20,21 +20,51 @@
 #include "sc.hrc"
 #include <formula/compiler.hrc>
 
-StringArray RID_FUNCTION_CATEGORIES
+Resource RID_FUNCTION_CATEGORIES
 {
-    ItemList [ en-US ] =
-    {
-        < "Database" ; >;
-        < "Date&Time" ; >;
-        < "Financial" ; >;
-        < "Information" ; >;
-        < "Logical" ; >;
-        < "Mathematical" ; >;
-        < "Array" ; >;
-        < "Statistical" ; >;
-        < "Spreadsheet" ; >;
-        < "Text" ; >;
-        < "Add-in" ; >;
+    String 1
+    {
+        Text[ en-US ] =  "Database" ;
+    };
+    String 2
+    {
+        Text[ en-US ] =  "Date&Time" ;
+    };
+    String 3
+    {
+        Text[ en-US ] =  "Financial" ;
+    };
+    String 4
+    {
+        Text[ en-US ] =  "Information" ;
+    };
+    String 5
+    {
+        Text[ en-US ] =  "Logical" ;
+    };
+    String 6
+    {
+        Text[ en-US ] =  "Mathematical" ;
+    };
+    String 7
+    {
+        Text[ en-US ] =  "Array" ;
+    };
+    String 8
+    {
+        Text[ en-US ] =  "Statistical" ;
+    };
+    String 9
+    {
+        Text[ en-US ] =  "Spreadsheet" ;
+    };
+    String 10
+    {
+        Text[ en-US ] =  "Text" ;
+    };
+    String 11
+    {
+        Text[ en-US ] =  "Add-in" ;
     };
 };
 
diff --git a/svx/source/dialog/swframeposstrings.cxx b/svx/source/dialog/swframeposstrings.cxx
index 731b17d..a055b77 100644
--- a/svx/source/dialog/swframeposstrings.cxx
+++ b/svx/source/dialog/swframeposstrings.cxx
@@ -18,27 +18,44 @@
  */
 
 #include <svx/swframeposstrings.hxx>
-#include <tools/resary.hxx>
+#include <tools/rc.hxx>
 #include <tools/debug.hxx>
 #include <svx/dialmgr.hxx>
 #include <svx/dialogs.hrc>
 
+class SvxSwFramePosString_Impl : public Resource
+{
+    friend class SvxSwFramePosString;
+    OUString aStrings[SvxSwFramePosString::STR_MAX];
+public:
+    SvxSwFramePosString_Impl();
+};
+SvxSwFramePosString_Impl::SvxSwFramePosString_Impl() :
+    Resource(SVX_RES(RID_SVXSW_FRAMEPOSITIONS))
+{
+    for(sal_uInt16 i = 0; i < SvxSwFramePosString::STR_MAX; i++)
+    {
+        //string ids have to start at 1
+        aStrings[i] = SVX_RESSTR(i + 1);
+    }
+    FreeResource();
+}
+
 SvxSwFramePosString::SvxSwFramePosString() :
-    pImpl(new ResStringArray(SVX_RES(RID_SVXSW_FRAMEPOSITIONS)))
+    pImpl(new SvxSwFramePosString_Impl)
 {
-    assert(pImpl->Count() == SvxSwFramePosString::STR_MAX);
 }
 
 SvxSwFramePosString::~SvxSwFramePosString()
 {
 }
 
-OUString SvxSwFramePosString::GetString(StringId eId) const
+const OUString& SvxSwFramePosString::GetString(StringId eId)
 {
     DBG_ASSERT(eId >= 0 && eId < STR_MAX, "invalid StringId");
     if(!(eId >= 0 && eId < STR_MAX))
         eId = LEFT;
-    return pImpl->GetString(eId);
+    return pImpl->aStrings[eId];
 }
 
 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/svx/source/dialog/swframeposstrings.src b/svx/source/dialog/swframeposstrings.src
index c36efbf..6ba0bbd 100644
--- a/svx/source/dialog/swframeposstrings.src
+++ b/svx/source/dialog/swframeposstrings.src
@@ -18,53 +18,220 @@
  */
 #include <svx/dialogs.hrc>
 
-//the following string have to match the (enum values) positions in svx/swframeposstrings.hxx!
-StringArray RID_SVXSW_FRAMEPOSITIONS
+//the following defines have to match the (enum values + 1) in svx/swframeposstrings.hxx!
+#define STR_LEFT                                1
+#define STR_RIGHT                               2
+#define STR_FROMLEFT                            3
+#define STR_MIR_LEFT                            4
+#define STR_MIR_RIGHT                           5
+#define STR_MIR_FROMLEFT                        6
+#define STR_FRAME                               7
+#define STR_PRTAREA                             8
+#define STR_REL_PG_LEFT                         9
+#define STR_REL_PG_RIGHT                        10
+#define STR_REL_FRM_LEFT                        11
+#define STR_REL_FRM_RIGHT                       12
+#define STR_MIR_REL_PG_LEFT                     13
+#define STR_MIR_REL_PG_RIGHT                    14
+#define STR_MIR_REL_FRM_LEFT                    15
+#define STR_MIR_REL_FRM_RIGHT                   16
+#define STR_REL_PG_FRAME                        17
+#define STR_REL_PG_PRTAREA                      18
+#define STR_REL_BASE                            19
+#define STR_REL_CHAR                            20
+#define STR_REL_ROW                             21
+#define STR_REL_BORDER                          22
+#define STR_REL_PRTAREA                         23
+#define STR_FLY_REL_PG_LEFT                     24
+#define STR_FLY_REL_PG_RIGHT                    25
+#define STR_FLY_REL_PG_FRAME                    26
+#define STR_FLY_REL_PG_PRTAREA                  27
+#define STR_FLY_MIR_REL_PG_LEFT                 28
+#define STR_FLY_MIR_REL_PG_RIGHT                29
+#define STR_TOP                                 30
+#define STR_BOTTOM                              31
+#define STR_CENTER_HORI                         32
+#define STR_CENTER_VERT                         33
+#define STR_FROMTOP                             34
+#define STR_FROMBOTTOM                          35
+#define STR_BELOW                               36
+#define STR_FROMRIGHT                           37
+#define STR_REL_PG_TOP                          38
+#define STR_REL_PG_BOTTOM                       39
+#define STR_REL_FRM_TOP                         40
+#define STR_REL_FRM_BOTTOM                      41
+#define STR_REL_LINE                            42
+
+Resource RID_SVXSW_FRAMEPOSITIONS
 {
-    ItemList [ en-US ] =
-    {
-        < "Left" ; > ;
-        < "Inside" ; > ;
-        < "Right" ; > ;
-        < "Outside" ; > ;
-        < "Center" ; > ;
-        < "From left" ; > ;
-        < "From inside" ; > ;
-        < "Paragraph area" ; > ;
-        < "Paragraph text area" ; > ;
-        < "Left page border" ; > ;
-        < "Inner page border" ; > ;
-        < "Right page border" ; > ;
-        < "Outer page border" ; > ;
-        < "Left paragraph border" ; > ;
-        < "Inner paragraph border" ; > ;
-        < "Right paragraph border" ; > ;
-        < "Outer paragraph border" ; > ;
-        < "Entire page" ; > ;
-        < "Page text area" ; > ;
-        < "Top" ; > ;
-        < "Bottom" ; > ;
-        < "Center" ; > ;
-        < "From top" ; > ;
-        < "From bottom" ; > ;
-        < "Below" ; > ;
-        < "From right" ; > ;
-        < "Top page border" ; > ;
-        < "Bottom page border" ; > ;
-        < "Top paragraph border" ; > ;
-        < "Bottom paragraph border" ; > ;
-        < "Margin" ; > ;
-        < "Paragraph text area" ; > ;
-        < "Left frame border" ; > ;
-        < "Inner frame border" ; > ;
-        < "Right frame border" ; > ;
-        < "Outer frame border" ; > ;
-        < "Entire frame" ; > ;
-        < "Frame text area" ; > ;
-        < "Base line" ; > ;
-        < "Character" ; > ;
-        < "Row" ; > ;
-        < "Line of text" ; > ;
+    String STR_LEFT
+    {
+        Text [ en-US ] = "Left" ;
+    };
+    String STR_MIR_LEFT
+    {
+        Text [ en-US ] = "Inside" ;
+    };
+    String STR_RIGHT
+    {
+        Text [ en-US ] = "Right" ;
+    };
+    String STR_MIR_RIGHT
+    {
+        Text [ en-US ] = "Outside" ;
+    };
+    String STR_CENTER_VERT
+    {
+        Text [ en-US ] = "Center" ;
+    };
+    String STR_FROMLEFT
+    {
+        Text [ en-US ] = "From left" ;
+    };
+    String STR_MIR_FROMLEFT
+    {
+        Text [ en-US ] = "From inside" ;
+    };
+    String STR_FRAME
+    {
+        Text [ en-US ] = "Paragraph area" ;
+    };
+    String STR_PRTAREA
+    {
+        Text [ en-US ] = "Paragraph text area" ;
+    };
+    String STR_REL_PG_LEFT
+    {
+        Text [ en-US ] = "Left page border" ;
+    };
+    String STR_MIR_REL_PG_LEFT
+    {
+        Text [ en-US ] = "Inner page border" ;
+    };
+    String STR_REL_PG_RIGHT
+    {
+        Text [ en-US ] = "Right page border" ;
+    };
+    String STR_MIR_REL_PG_RIGHT
+    {
+        Text [ en-US ] = "Outer page border" ;
+    };
+    String STR_REL_FRM_LEFT
+    {
+        Text [ en-US ] = "Left paragraph border" ;
+    };
+    String STR_MIR_REL_FRM_LEFT
+    {
+        Text [ en-US ] = "Inner paragraph border" ;
+    };
+    String STR_REL_FRM_RIGHT
+    {
+        Text [ en-US ] = "Right paragraph border" ;
+    };
+    String STR_MIR_REL_FRM_RIGHT
+    {
+        Text [ en-US ] = "Outer paragraph border" ;
+    };
+    String STR_REL_PG_FRAME
+    {
+        Text [ en-US ] = "Entire page" ;
+    };
+    String STR_REL_PG_PRTAREA
+    {
+        Text [ en-US ] = "Page text area" ;
+    };
+    String STR_TOP
+    {
+        Text [ en-US ] = "Top" ;
+    };
+    String STR_BOTTOM
+    {
+        Text [ en-US ] = "Bottom" ;
+    };
+    String STR_CENTER_HORI
+    {
+        Text [ en-US ] = "Center" ;
+    };
+    String STR_FROMTOP
+    {
+        Text [ en-US ] = "From top" ;
+    };
+    String STR_FROMBOTTOM
+    {
+        Text [ en-US ] = "From bottom" ;
+    };
+    String STR_BELOW
+    {
+        Text [ en-US ] = "Below" ;
+    };
+    String STR_FROMRIGHT
+    {
+        Text [ en-US ] = "From right" ;
+    };
+    String STR_REL_PG_TOP
+    {
+        Text [ en-US ] = "Top page border" ;
+    };
+    String STR_REL_PG_BOTTOM
+    {
+        Text [ en-US ] = "Bottom page border" ;
+    };
+    String STR_REL_FRM_TOP
+    {
+        Text [ en-US ] = "Top paragraph border" ;
+    };
+    String STR_REL_FRM_BOTTOM
+    {
+        Text [ en-US ] = "Bottom paragraph border" ;
+    };
+    String STR_REL_BORDER
+    {
+        Text [ en-US ] = "Margin" ;
+    };
+    String STR_REL_PRTAREA
+    {
+        Text [ en-US ] = "Paragraph text area" ;
+    };
+    String STR_FLY_REL_PG_LEFT
+    {
+        Text [ en-US ] = "Left frame border" ;
+    };
+    String STR_FLY_MIR_REL_PG_LEFT
+    {
+        Text [ en-US ] = "Inner frame border" ;
+    };
+    String STR_FLY_REL_PG_RIGHT
+    {
+        Text [ en-US ] = "Right frame border" ;
+    };
+    String STR_FLY_MIR_REL_PG_RIGHT
+    {
+        Text [ en-US ] = "Outer frame border" ;
+    };
+    String STR_FLY_REL_PG_FRAME
+    {
+        Text [ en-US ] = "Entire frame" ;
+    };
+    String STR_FLY_REL_PG_PRTAREA
+    {
+        Text [ en-US ] = "Frame text area" ;
+    };
+    String STR_REL_BASE
+    {
+        Text [ en-US ] = "Base line" ;
+    };
+    String STR_REL_CHAR
+    {
+        Text [ en-US ] = "Character" ;
+    };
+    String STR_REL_ROW
+    {
+        Text [ en-US ] = "Row" ;
+    };
+    // #i22341#
+    String STR_REL_LINE
+    {
+        Text [ en-US ] = "Line of text" ;
     };
 };
 
diff --git a/sw/inc/shellres.hxx b/sw/inc/shellres.hxx
index 5f391b7..f324299 100644
--- a/sw/inc/shellres.hxx
+++ b/sw/inc/shellres.hxx
@@ -24,7 +24,7 @@
 #include <tools/rc.hxx>
 #include <vcl/bitmap.hxx>
 
-struct SW_DLLPUBLIC ShellResource
+struct SW_DLLPUBLIC ShellResource : public Resource
 {
     OUString        aPostItAuthor;
     OUString        aPostItPage;
@@ -80,6 +80,7 @@ struct SW_DLLPUBLIC ShellResource
     OUString GetPageDescName(sal_uInt16 nNo, PageNameMode eMode);
 
     ShellResource();
+    ~ShellResource();
 
 private:
     void GetAutoFormatNameLst_() const;
diff --git a/sw/source/ui/utlui/utlui.src b/sw/source/ui/utlui/utlui.src
index 574f52e..61f4653 100644
--- a/sw/source/ui/utlui/utlui.src
+++ b/sw/source/ui/utlui/utlui.src
@@ -22,33 +22,99 @@
 #include "helpid.h"
 #include "comcore.hrc"
 
-StringArray RID_SHELLRES_AUTOFMTSTRS
+Resource RID_SHELLRES_AUTOFMTSTRS
 {
-    ItemList [ en-US ] =
+    String STR_AUTOFMTREDL_DEL_EMPTY_PARA+1
     {
-        < "Remove empty paragraphs" ; > ;
-        < "Use replacement table" ; > ;
-        < "Correct TWo INitial CApitals" ; > ;
-        < "Capitalize first letter of sentences" ; > ;
-        < "Replace \"standard\" quotes with %1 \bcustom%2 quotes" ; > ;
-        < "Replace Custom Styles" ; > ;
-        < "Bullets replaced"; > ;
-        < "Automatic _underline_"; > ;
-        < "Automatic *bold*"; > ;
-        < "Replace 1/2 ... with ½ ..." ; > ;
-        < "URL recognition" ; > ;
-        < "Replace dashes" ; > ;
-        < "Replace 1st... with 1^st..." ; > ;
-        < "Combine single line paragraphs"; > ;
-        < "Set \"Text body\" Style"; > ;
-        < "Set \"Text body indent\" Style"; > ;
-        < "Set \"Hanging indent\" Style"; > ;
-        < "Set \"Text body indent\" Style"; > ;
-        < "Set \"Heading $(ARG1)\" Style"; > ;
-        < "Set \"Bullet\" or \"Numbering\" Style"; > ;
-        < "Combine paragraphs"; > ;
-        < "Add non breaking space"; > ;
+        Text [ en-US ] = "Remove empty paragraphs" ;
     };
+    String STR_AUTOFMTREDL_USE_REPLACE+1
+    {
+        Text [ en-US ] = "Use replacement table" ;
+    };
+    String STR_AUTOFMTREDL_CPTL_STT_WORD+1
+    {
+        Text [ en-US ] = "Correct TWo INitial CApitals" ;
+    };
+    String STR_AUTOFMTREDL_CPTL_STT_SENT+1
+    {
+        Text [ en-US ] = "Capitalize first letter of sentences" ;
+    };
+    String STR_AUTOFMTREDL_TYPO+1
+    {
+        Text [ en-US ] = "Replace \"standard\" quotes with %1 \bcustom%2 quotes" ;
+    };
+    String STR_AUTOFMTREDL_USER_STYLE+1
+    {
+        Text [ en-US ] = "Replace Custom Styles" ;
+    };
+    String STR_AUTOFMTREDL_BULLET+1
+    {
+        Text [ en-US ] = "Bullets replaced";
+    };
+    String STR_AUTOFMTREDL_UNDER+1
+    {
+        Text [ en-US ] = "Automatic _underline_";
+    };
+    String STR_AUTOFMTREDL_BOLD+1
+    {
+        Text [ en-US ] = "Automatic *bold*";
+    };
+    String STR_AUTOFMTREDL_FRACTION+1
+    {
+        Text [ en-US ] = "Replace 1/2 ... with ½ ..." ;
+    };
+    String STR_AUTOFMTREDL_DETECT_URL+1
+    {
+        Text [ en-US ] = "URL recognition" ;
+    };
+    String STR_AUTOFMTREDL_DASH+1
+    {
+        Text [ en-US ] = "Replace dashes" ;
+    };
+    String STR_AUTOFMTREDL_ORDINAL+1
+    {
+        Text [ en-US ] = "Replace 1st... with 1^st..." ;
+    };
+    String STR_AUTOFMTREDL_RIGHT_MARGIN+1
+    {
+        Text [ en-US ] = "Combine single line paragraphs";
+    };
+
+    String STR_AUTOFMTREDL_SET_TMPL_TEXT +1
+    {
+        Text [ en-US ] = "Set \"Text body\" Style";
+    };
+    String STR_AUTOFMTREDL_SET_TMPL_INDENT  +1
+    {
+        Text [ en-US ] = "Set \"Text body indent\" Style";
+    };
+    String STR_AUTOFMTREDL_SET_TMPL_NEG_INDENT  +1
+    {
+        Text [ en-US ] = "Set \"Hanging indent\" Style";
+    };
+    String STR_AUTOFMTREDL_SET_TMPL_TEXT_INDENT +1
+    {
+        Text [ en-US ] = "Set \"Text body indent\" Style";
+    };
+    String STR_AUTOFMTREDL_SET_TMPL_HEADLINE +1
+    {
+        Text [ en-US ] = "Set \"Heading $(ARG1)\" Style";
+    };
+    String STR_AUTOFMTREDL_SET_NUMBULET +1
+    {
+        Text [ en-US ] = "Set \"Bullet\" or \"Numbering\" Style";
+    };
+
+    String STR_AUTOFMTREDL_DEL_MORELINES +1
+    {
+        Text [ en-US ] = "Combine paragraphs";
+    };
+    String STR_AUTOFMTREDL_NON_BREAK_SPACE +1
+    {
+        Text [ en-US ] = "Add non breaking space";
+    };
+
 };
 
 // Miscellaneous
diff --git a/sw/source/uibase/inc/utlui.hrc b/sw/source/uibase/inc/utlui.hrc
index e8b9bd1..1711108 100644
--- a/sw/source/uibase/inc/utlui.hrc
+++ b/sw/source/uibase/inc/utlui.hrc
@@ -22,6 +22,7 @@
 
 #include "rcid.hrc"
 
+#define RID_SW_SHELLRES             (RC_UTLUI_BEGIN + 1)
 #define RID_STR_SYSTEM              (RC_UTLUI_BEGIN + 2)
 
 // Strings in NumberFormatter-Listbox
@@ -69,7 +70,7 @@
 #define STR_CONTENT_TYPE_SINGLE_DRAWOBJECT      (STR_CONTENT_TYPE_SINGLE_FIRST + 11)
 #define STR_CONTENT_SINGLE_END                  STR_CONTENT_TYPE_SINGLE_DRAWOBJECT
 
-#define FLD_DOCINFO_BEGIN   (STR_CONTENT_SINGLE_END + 1)
+#define FLD_DOCINFO_BEGIN   STR_CONTENT_SINGLE_END
 #define FLD_DOCINFO_TITEL   FLD_DOCINFO_BEGIN
 #define FLD_DOCINFO_THEMA   (FLD_DOCINFO_BEGIN + 1)
 #define FLD_DOCINFO_KEYS    (FLD_DOCINFO_BEGIN + 2)
@@ -189,42 +190,7 @@
 #define STR_IDXEXAMPLE_IDXTXT_IMAGE1            (STR_IDXEXAMPLE_IDXTXT_BEGIN + 8)
 #define STR_IDXEXAMPLE_IDXTXT_END               STR_IDXEXAMPLE_IDXTXT_IMAGE1
 
-#define RID_SW_SHELLRES_BEGIN                   (STR_IDXEXAMPLE_IDXTXT_IMAGE1 + 1)
-#define STR_POSTIT_PAGE                         (RID_SW_SHELLRES_BEGIN + 1)
-#define STR_POSTIT_AUTHOR                       (RID_SW_SHELLRES_BEGIN + 2)
-#define STR_CALC_SYNTAX                         (RID_SW_SHELLRES_BEGIN + 3)
-#define STR_CALC_ZERODIV                        (RID_SW_SHELLRES_BEGIN + 4)
-#define STR_CALC_BRACK                          (RID_SW_SHELLRES_BEGIN + 5)
-#define STR_CALC_POW                            (RID_SW_SHELLRES_BEGIN + 6)
-#define STR_CALC_VARNFND                        (RID_SW_SHELLRES_BEGIN + 7)
-#define STR_CALC_OVERFLOW                       (RID_SW_SHELLRES_BEGIN + 8)
-#define STR_CALC_WRONGTIME                      (RID_SW_SHELLRES_BEGIN + 9)
-#define STR_CALC_DEFAULT                        (RID_SW_SHELLRES_BEGIN + 10)
-#define STR_CALC_ERROR                          (RID_SW_SHELLRES_BEGIN + 11)
-#define STR_GETREFFLD_UP                        (RID_SW_SHELLRES_BEGIN + 12)
-#define STR_GETREFFLD_DOWN                      (RID_SW_SHELLRES_BEGIN + 13)
-#define STR_ALLPAGE_HEADFOOT                    (RID_SW_SHELLRES_BEGIN + 14)
-#define STR_TEMPLATE_NONE                       (RID_SW_SHELLRES_BEGIN + 15)
-#define STR_POSTIT_LINE                         (RID_SW_SHELLRES_BEGIN + 16)
-#define STR_FIELD_FIXED                         (RID_SW_SHELLRES_BEGIN + 17)
-#define STR_TOI                                 (RID_SW_SHELLRES_BEGIN + 18)
-#define STR_TOU                                 (RID_SW_SHELLRES_BEGIN + 19)
-#define STR_TOC                                 (RID_SW_SHELLRES_BEGIN + 20)
-#define STR_TOX_ILL                             (RID_SW_SHELLRES_BEGIN + 21)
-#define STR_TOX_OBJ                             (RID_SW_SHELLRES_BEGIN + 22)
-#define STR_TOX_TBL                             (RID_SW_SHELLRES_BEGIN + 23)
-#define STR_TOX_AUTH                            (RID_SW_SHELLRES_BEGIN + 24)
-#define STR_PAGEDESC_NAME                       (RID_SW_SHELLRES_BEGIN + 25)
-#define STR_PAGEDESC_FIRSTNAME                  (RID_SW_SHELLRES_BEGIN + 26)
-#define STR_PAGEDESC_FOLLOWNAME                 (RID_SW_SHELLRES_BEGIN + 27)
-#define STR_LINK_CTRL_CLICK                     (RID_SW_SHELLRES_BEGIN + 28)
-#define STR_LINK_CLICK                          (RID_SW_SHELLRES_BEGIN + 29)
-#define STR_GETREFFLD_REFITEMNOTFOUND           (RID_SW_SHELLRES_BEGIN + 30)
-#define STR_DURATION_FORMAT                     (RID_SW_SHELLRES_BEGIN + 31)
-#define STR_TOX_CITATION                        (RID_SW_SHELLRES_BEGIN + 32)
-#define RID_SW_SHELLRES_END                     STR_TOX_CITATION
-
-#if STR_IDXEXAMPLE_IDXTXT_END > RID_SW_SHELLRES_END
+#if STR_IDXEXAMPLE_IDXTXT_END > RC_IDXTXT_END
 #error Resource-Id Ueberlauf in #file, #line
 #endif
 
diff --git a/sw/source/uibase/utlui/initui.cxx b/sw/source/uibase/utlui/initui.cxx
index b2a1dad..ab67b03 100644
--- a/sw/source/uibase/utlui/initui.cxx
+++ b/sw/source/uibase/utlui/initui.cxx
@@ -19,7 +19,6 @@
 
 #include <config_features.h>
 
-#include <tools/resary.hxx>
 #include <unotools/localedatawrapper.hxx>
 #include <viewsh.hxx>
 #include <initui.hxx>
@@ -30,6 +29,7 @@
 #include <gloslst.hxx>
 
 #include <utlui.hrc>
+#include <initui.hrc>
 #include <comcore.hrc>
 #include <authfld.hxx>
 #include <dbmgr.hxx>
@@ -174,7 +174,8 @@ void InitUI()
 }
 
 ShellResource::ShellResource()
-    : aPostItAuthor( SW_RES( STR_POSTIT_AUTHOR ) ),
+    : Resource( SW_RES(RID_SW_SHELLRES) ),
+    aPostItAuthor( SW_RES( STR_POSTIT_AUTHOR ) ),
     aPostItPage( SW_RES( STR_POSTIT_PAGE ) ),
     aPostItLine( SW_RES( STR_POSTIT_LINE ) ),
 
@@ -220,6 +221,12 @@ ShellResource::ShellResource()
 
     for(sal_uInt16 i = 0; i < nCount; ++i)
         aDocInfoLst.push_back(OUString(SW_RESSTR(FLD_DOCINFO_BEGIN + i)));
+
+    FreeResource();
+}
+
+ShellResource::~ShellResource()
+{
 }
 
 OUString ShellResource::GetPageDescName(sal_uInt16 nNo, PageNameMode eMode)
@@ -262,26 +269,35 @@ SwGlossaryList* GetGlossaryList()
     return pGlossaryList;
 }
 
+struct ImpAutoFormatNameListLoader : public Resource
+{
+    explicit ImpAutoFormatNameListLoader( std::vector<OUString>& rLst );
+};
+
 void ShellResource::GetAutoFormatNameLst_() const
 {
     assert(!pAutoFormatNameLst);
     pAutoFormatNameLst.reset( new std::vector<OUString> );
     pAutoFormatNameLst->reserve(STR_AUTOFMTREDL_END);
+    ImpAutoFormatNameListLoader aTmp(*pAutoFormatNameLst);
+}
 
-    ResStringArray aStringArray(ResId(RID_SHELLRES_AUTOFMTSTRS, *pSwResMgr));
-    assert(aStringArray.Count() === STR_AUTOFMTREDL_END);
-    for (sal_uInt16 n = 0; n < STR_AUTOFMTREDL_END; ++n)
+ImpAutoFormatNameListLoader::ImpAutoFormatNameListLoader( std::vector<OUString>& rLst )
+    : Resource( ResId(RID_SHELLRES_AUTOFMTSTRS, *pSwResMgr) )
+{
+    for( sal_uInt16 n = 0; n < STR_AUTOFMTREDL_END; ++n )
     {
-        OUString p(aStringArray.GetString(n));
-        if (STR_AUTOFMTREDL_TYPO == n)
+        OUString p(ResId(n + 1, *pSwResMgr));
+        if(STR_AUTOFMTREDL_TYPO == n)
         {
             const SvtSysLocale aSysLocale;
             const LocaleDataWrapper& rLclD = aSysLocale.GetLocaleData();
             p = p.replaceFirst("%1", rLclD.getDoubleQuotationMarkStart());
             p = p.replaceFirst("%2", rLclD.getDoubleQuotationMarkEnd());
         }
-        pAutoFormatNameLst->push_back(p);
+        rLst.insert(rLst.begin() + n, p);
     }
+    FreeResource();
 }
 
 OUString SwAuthorityFieldType::GetAuthFieldName(ToxAuthorityField eType)
diff --git a/sw/source/uibase/utlui/initui.src b/sw/source/uibase/utlui/initui.src
index 676dc10..faf9681 100644
--- a/sw/source/uibase/utlui/initui.src
+++ b/sw/source/uibase/utlui/initui.src
@@ -20,181 +20,185 @@
 #include "globals.hrc"
 #include "utlui.hrc"
 #include "helpid.h"
+#include "initui.hrc"
 
 // Error calculator
 
-String STR_POSTIT_PAGE
-{
-    Text [ en-US ] = "Page" ;
-};
-String STR_POSTIT_LINE
-{
-    Text [ en-US ] = "Line" ;
-};
-String STR_POSTIT_AUTHOR
-{
-    Text [ en-US ] = "Author" ;
-};
-String STR_CALC_SYNTAX
-{
-    Text [ en-US ] = "** Syntax Error **" ;
-};
-String STR_CALC_ZERODIV
-{
-    Text [ en-US ] = "** Division by zero **" ;
-};
-String STR_CALC_BRACK
-{
-    Text [ en-US ] = "** Wrong use of brackets **" ;
-};
-String STR_CALC_POW
-{
-    Text [ en-US ] = "** Square function overflow **" ;
-};
-String STR_CALC_VARNFND
-{
-    Text [ en-US ] = "** Variable not found **" ;
-};
-String STR_CALC_OVERFLOW
-{
-    Text [ en-US ] = "** Overflow **" ;
-};
-String STR_CALC_WRONGTIME
-{
-    Text [ en-US ] = "** Wrong time format **" ;
-};
-String STR_CALC_DEFAULT
-{
-    Text [ en-US ] = "** Error **" ;
-};
-String STR_CALC_ERROR
-{
-    Text [ en-US ] = "** Expression is faulty **" ;
-};
-String STR_GETREFFLD_UP
-{
-    Text [ en-US ] = "above" ;
-};
-String STR_GETREFFLD_DOWN
-{
-    Text [ en-US ] = "below" ;
-};
-String STR_GETREFFLD_REFITEMNOTFOUND
-{
-    Text [ en-US ] = "Error: Reference source not found" ;
-};
-String STR_ALLPAGE_HEADFOOT
-{
-    Text [ en-US ] = "All" ;
-};
-String STR_TEMPLATE_NONE
-{
-    Text [ en-US ] = "None" ;
-};
-String STR_FIELD_FIXED
-{
-    Text [ en-US ] = "(fixed)" ;
-};
-String STR_DURATION_FORMAT
-{
-    Text [en-US] = " Y: %1 M: %2 D: %3 H: %4 M: %5 S: %6";
-};
-String STR_TOI
-{
-    Text [ en-US ] = "Alphabetical Index" ;
-};
+Resource RID_SW_SHELLRES
+{
+    String STR_POSTIT_PAGE
+    {
+        Text [ en-US ] = "Page" ;
+    };
+    String STR_POSTIT_LINE
+    {
+        Text [ en-US ] = "Line" ;
+    };
+    String STR_POSTIT_AUTHOR
+    {
+        Text [ en-US ] = "Author" ;
+    };
+    String STR_CALC_SYNTAX
+    {
+        Text [ en-US ] = "** Syntax Error **" ;
+    };
+    String STR_CALC_ZERODIV
+    {
+        Text [ en-US ] = "** Division by zero **" ;
+    };
+    String STR_CALC_BRACK
+    {
+        Text [ en-US ] = "** Wrong use of brackets **" ;
+    };
+    String STR_CALC_POW
+    {
+        Text [ en-US ] = "** Square function overflow **" ;
+    };
+    String STR_CALC_VARNFND
+    {
+        Text [ en-US ] = "** Variable not found **" ;
+    };
+    String STR_CALC_OVERFLOW
+    {
+        Text [ en-US ] = "** Overflow **" ;
+    };
+    String STR_CALC_WRONGTIME
+    {
+        Text [ en-US ] = "** Wrong time format **" ;
+    };
+    String STR_CALC_DEFAULT
+    {
+        Text [ en-US ] = "** Error **" ;
+    };
+    String STR_CALC_ERROR
+    {
+        Text [ en-US ] = "** Expression is faulty **" ;
+    };
+    String STR_GETREFFLD_UP
+    {
+        Text [ en-US ] = "above" ;
+    };
+    String STR_GETREFFLD_DOWN
+    {
+        Text [ en-US ] = "below" ;
+    };
+    String STR_GETREFFLD_REFITEMNOTFOUND
+    {
+        Text [ en-US ] = "Error: Reference source not found" ;
+    };
+    String STR_ALLPAGE_HEADFOOT
+    {
+        Text [ en-US ] = "All" ;
+    };
+    String STR_TEMPLATE_NONE
+    {
+        Text [ en-US ] = "None" ;
+    };
+    String STR_FIELD_FIXED
+    {
+        Text [ en-US ] = "(fixed)" ;
+    };
+    String STR_DURATION_FORMAT
+    {
+        Text [en-US] = " Y: %1 M: %2 D: %3 H: %4 M: %5 S: %6";
+    };
+    String STR_TOI
+    {
+        Text [ en-US ] = "Alphabetical Index" ;
+    };
 
-String STR_TOU
-{
-    Text [ en-US ] = "User-Defined" ;
-};
+    String STR_TOU
+    {
+        Text [ en-US ] = "User-Defined" ;
+    };
 
-String STR_TOC
-{
-    Text [ en-US ] = "Table of Contents" ;
-};
+    String STR_TOC
+    {
+        Text [ en-US ] = "Table of Contents" ;
+    };
 
-String STR_TOX_AUTH
-{
-    Text [ en-US ] = "Bibliography";
-};
+    String STR_TOX_AUTH
+    {
+        Text [ en-US ] = "Bibliography";
+    };
 
-String STR_TOX_CITATION
-{
-    Text [ en-US ] = "Citation";
-};
+    String STR_TOX_CITATION
+    {
+        Text [ en-US ] = "Citation";
+    };
 
-String STR_TOX_TBL
-{
-    Text [ en-US ] = "Index of Tables";
-};
-String STR_TOX_OBJ
-{
-    Text [ en-US ] = "Table of Objects";
-};
-String STR_TOX_ILL
-{
-    Text [ en-US ] = "Illustration Index";
-};
-String STR_LINK_CTRL_CLICK
-{
-    Text [ en-US ] = "%s-Click to follow link";
-};
-String STR_LINK_CLICK
-{
-    Text [ en-US ] = "Click to follow link";
-};
+    String STR_TOX_TBL
+    {
+        Text [ en-US ] = "Index of Tables";
+    };
+    String STR_TOX_OBJ
+    {
+        Text [ en-US ] = "Table of Objects";
+    };
+    String STR_TOX_ILL
+    {
+        Text [ en-US ] = "Illustration Index";
+    };
+    String STR_LINK_CTRL_CLICK
+    {
+        Text [ en-US ] = "%s-Click to follow link";
+    };
+    String STR_LINK_CLICK
+    {
+        Text [ en-US ] = "Click to follow link";
+    };
 
- // SubType DocInfo
+     // SubType DocInfo
 
-String FLD_DOCINFO_TITEL
-{
-    Text [ en-US ] = "Title" ;
-};
-String FLD_DOCINFO_THEMA
-{
-    Text [ en-US ] = "Subject" ;
-};
-String FLD_DOCINFO_KEYS
-{
-    Text [ en-US ] = "Keywords" ;
-};
-String FLD_DOCINFO_COMMENT
-{
-    Text [ en-US ] = "Comments" ;
-};
-String FLD_DOCINFO_CREATE
-{
-    Text [ en-US ] = "Created" ;
-};
-String FLD_DOCINFO_CHANGE
-{
-    Text [ en-US ] = "Modified" ;
-};
-String FLD_DOCINFO_PRINT
-{
-    Text [ en-US ] = "Last printed" ;
-};
-String FLD_DOCINFO_DOCNO
-{
-    Text [ en-US ] = "Revision number" ;
-};
-String FLD_DOCINFO_EDIT
-{
-    Text [ en-US ] = "Total editing time" ;
-};
+    String FLD_DOCINFO_TITEL
+    {
+        Text [ en-US ] = "Title" ;
+    };
+    String FLD_DOCINFO_THEMA
+    {
+        Text [ en-US ] = "Subject" ;
+    };
+    String FLD_DOCINFO_KEYS
+    {
+        Text [ en-US ] = "Keywords" ;
+    };
+    String FLD_DOCINFO_COMMENT
+    {
+        Text [ en-US ] = "Comments" ;
+    };
+    String FLD_DOCINFO_CREATE
+    {
+        Text [ en-US ] = "Created" ;
+    };
+    String FLD_DOCINFO_CHANGE
+    {
+        Text [ en-US ] = "Modified" ;
+    };
+    String FLD_DOCINFO_PRINT
+    {
+        Text [ en-US ] = "Last printed" ;
+    };
+    String FLD_DOCINFO_DOCNO
+    {
+        Text [ en-US ] = "Revision number" ;
+    };
+    String FLD_DOCINFO_EDIT
+    {
+        Text [ en-US ] = "Total editing time" ;
+    };
 
-String STR_PAGEDESC_NAME
-{
-    Text [ en-US ] = "Convert $(ARG1)";
-};
-String STR_PAGEDESC_FIRSTNAME
-{
-    Text [ en-US ] = "First convert $(ARG1)";
-};
-String STR_PAGEDESC_FOLLOWNAME
-{
-    Text [ en-US ] = "Next convert $(ARG1)";
+    String STR_PAGEDESC_NAME
+    {
+        Text [ en-US ] = "Convert $(ARG1)";
+    };
+    String STR_PAGEDESC_FIRSTNAME
+    {
+        Text [ en-US ] = "First convert $(ARG1)";
+    };
+    String STR_PAGEDESC_FOLLOWNAME
+    {
+        Text [ en-US ] = "Next convert $(ARG1)";
+    };
 };
 
 String STR_AUTH_TYPE_ARTICLE
diff --git a/uui/source/iahndl.cxx b/uui/source/iahndl.cxx
index fe4aebb..f2915b1 100644
--- a/uui/source/iahndl.cxx
+++ b/uui/source/iahndl.cxx
@@ -1302,10 +1302,14 @@ bool
 ErrorResource::getString(ErrCode nErrorCode, OUString &rString)
     const
 {
-    sal_uInt32 nIdx = m_aStringArray.FindIndex(nErrorCode & ERRCODE_RES_MASK);
-    if (nIdx == RESARRAY_INDEX_NOTFOUND)
+    ResId aResId(static_cast< sal_uInt16 >(nErrorCode & ERRCODE_RES_MASK),
+                 *m_pResMgr);
+    aResId.SetRT(RSC_STRING);
+    if (!IsAvailableRes(aResId))
         return false;
-    rString = m_aStringArray.GetString(nIdx);
+    aResId.SetAutoRelease(false);
+    rString = aResId.toString();
+    m_pResMgr->PopContext();
     return true;
 }
 
diff --git a/uui/source/iahndl.hxx b/uui/source/iahndl.hxx
index 6e6cda4..6543b34 100644
--- a/uui/source/iahndl.hxx
+++ b/uui/source/iahndl.hxx
@@ -32,7 +32,6 @@
 
 #include <tools/errcode.hxx>
 #include <tools/rc.hxx>
-#include <tools/resary.hxx>
 #include <tools/wintypes.hxx>
 
 #include <unordered_map>
@@ -248,11 +247,12 @@ private:
             css::uno::Sequence< css::uno::Reference< css::task::XInteractionContinuation > > const & rContinuations );
 };
 
-class ErrorResource
+class ErrorResource: private Resource
 {
-    ResStringArray m_aStringArray;
 public:
-    explicit ErrorResource(ResId& rResId) : m_aStringArray(rResId) {}
+    explicit ErrorResource(ResId & rResId): Resource(rResId) {}
+
+    ~ErrorResource() { FreeResource(); }
 
     bool getString(ErrCode nErrorCode, OUString &rString) const;
 };
diff --git a/uui/source/ids.src b/uui/source/ids.src
index b5e5f37..d7ae643 100644
--- a/uui/source/ids.src
+++ b/uui/source/ids.src
@@ -41,223 +41,362 @@ String STR_WARNING_INCOMPLETE_ENCRYPTION_TITLE
     Text [ en-US ] = "Non-Encrypted Streams" ;
 };
 
-StringArray RID_UUI_ERRHDL
+Resource RID_UUI_ERRHDL
 {
-    ItemList [ en-US ] =
+    String (ERRCODE_UUI_IO_ABORT & ERRCODE_RES_MASK)
     {
-        < "The operation executed on $(ARG1) was aborted." ;
-          (ERRCODE_UUI_IO_ABORT & ERRCODE_RES_MASK) ; >;
-
-        < "Access to $(ARG1) was denied." ;
-          (ERRCODE_UUI_IO_ACCESSDENIED & ERRCODE_RES_MASK) ; >;
+        Text [ en-US ] = "The operation executed on $(ARG1) was aborted.";
+    };
 
-        < "$(ARG1) already exists.";
-          (ERRCODE_UUI_IO_ALREADYEXISTS & ERRCODE_RES_MASK) ; >;
+    String (ERRCODE_UUI_IO_ACCESSDENIED & ERRCODE_RES_MASK)
+    {
+        Text [ en-US ] = "Access to $(ARG1) was denied.";
+    };
 
-        < "Target already exists." ;
-          (ERRCODE_UUI_IO_TARGETALREADYEXISTS & ERRCODE_RES_MASK) ; >;
+    String (ERRCODE_UUI_IO_ALREADYEXISTS & ERRCODE_RES_MASK)
+    {
+        Text [ en-US ] = "$(ARG1) already exists.";
+    };
 
-        < "You are about to save/export a password protected basic library containing module(s) \n$(ARG1)\nwhich are too large to store in binary format. If you wish users that don't have access to the library password to be able to run macros in those module(s) you must split those modules into a number of smaller modules. Do you wish to continue to save/export this library?"  ;
-          (ERRCODE_UUI_IO_MODULESIZEEXCEEDED & ERRCODE_RES_MASK) ; >;
+    String (ERRCODE_UUI_IO_TARGETALREADYEXISTS & ERRCODE_RES_MASK)
+    {
+        Text [ en-US ] = "Target already exists.";
+    };
 
-        < "The data from $(ARG1) has an incorrect checksum." ;
-          (ERRCODE_UUI_IO_BADCRC & ERRCODE_RES_MASK) ; >;
+    String (ERRCODE_UUI_IO_MODULESIZEEXCEEDED & ERRCODE_RES_MASK)
+    {
+        Text [ en-US ] = "You are about to save/export a password protected basic library containing module(s) \n$(ARG1)\nwhich are too large to store in binary format. If you wish users that don't have access to the library password to be able to run macros in those module(s) you must split those modules into a number of smaller modules. Do you wish to continue to save/export this library?" ;
+    };
 
-        < "The object $(ARG1) cannot be created in directory $(ARG2)." ;
-          (ERRCODE_UUI_IO_CANTCREATE & ERRCODE_RES_MASK) ; >;
+    String (ERRCODE_UUI_IO_BADCRC & ERRCODE_RES_MASK)
+    {
+        Text [ en-US ] = "The data from $(ARG1) has an incorrect checksum.";
+    };
 
-        < "Data of $(ARG1) could not be read." ;
-          (ERRCODE_UUI_IO_CANTREAD & ERRCODE_RES_MASK) ; >;
+    String (ERRCODE_UUI_IO_CANTCREATE & ERRCODE_RES_MASK)
+    {
+        Text [ en-US ] = "The object $(ARG1) cannot be created in directory $(ARG2).";
+    };
 
-        < "The seek operation on $(ARG1) could not be performed." ;
-          (ERRCODE_UUI_IO_CANTSEEK & ERRCODE_RES_MASK) ; >;
+    String (ERRCODE_UUI_IO_CANTREAD & ERRCODE_RES_MASK)
+    {
+        Text [ en-US ] = "Data of $(ARG1) could not be read.";
+    };
 
-        < "The tell operation on $(ARG1) could not be performed." ;
-          (ERRCODE_UUI_IO_CANTTELL & ERRCODE_RES_MASK) ; >;
+    String (ERRCODE_UUI_IO_CANTSEEK & ERRCODE_RES_MASK)
+    {
+        Text [ en-US ] = "The seek operation on $(ARG1) could not be performed.";
+    };
 
-        < "Data for $(ARG1) could not be written." ;
-          (ERRCODE_UUI_IO_CANTWRITE & ERRCODE_RES_MASK) ; >;
+    String (ERRCODE_UUI_IO_CANTTELL & ERRCODE_RES_MASK)
+    {
+        Text [ en-US ] = "The tell operation on $(ARG1) could not be performed.";
+    };
 
-        < "Action impossible: $(ARG1) is the current directory." ;
-          (ERRCODE_UUI_IO_CURRENTDIR & ERRCODE_RES_MASK) ; >;
+    String (ERRCODE_UUI_IO_CANTWRITE & ERRCODE_RES_MASK)
+    {
+        Text [ en-US ] = "Data for $(ARG1) could not be written.";
+    };
 
-        < "$(ARG1) is not ready." ;
-          (ERRCODE_UUI_IO_NOTREADY & ERRCODE_RES_MASK) ; >;
+    String (ERRCODE_UUI_IO_CURRENTDIR & ERRCODE_RES_MASK)
+    {
+        Text [ en-US ] = "Action impossible: $(ARG1) is the current directory.";
+    };
 
-        < "Action impossible: $(ARG1) and $(ARG2) are different devices (drives)." ;
-          (ERRCODE_UUI_IO_NOTSAMEDEVICE & ERRCODE_RES_MASK) ; >;
+    String (ERRCODE_UUI_IO_NOTREADY & ERRCODE_RES_MASK)
+    {
+        Text [ en-US ] = "$(ARG1) is not ready.";
+    };
 
-        < "General input/output error while accessing $(ARG1)." ;
-          (ERRCODE_UUI_IO_GENERAL & ERRCODE_RES_MASK) ; >;
+    String (ERRCODE_UUI_IO_NOTSAMEDEVICE & ERRCODE_RES_MASK)
+    {
+        Text [ en-US ] = "Action impossible: $(ARG1) and $(ARG2) are different devices (drives).";
+    };
 
-        < "An attempt was made to access $(ARG1) in an invalid way." ;
-          (ERRCODE_UUI_IO_INVALIDACCESS & ERRCODE_RES_MASK) ; >;
+    String (ERRCODE_UUI_IO_GENERAL & ERRCODE_RES_MASK)
+    {
+        Text [ en-US ] = "General input/output error while accessing $(ARG1).";
+    };
 
-        < "$(ARG1) contains invalid characters." ;
-          (ERRCODE_UUI_IO_INVALIDCHAR & ERRCODE_RES_MASK) ; >;
+    String (ERRCODE_UUI_IO_INVALIDACCESS & ERRCODE_RES_MASK)
+    {
+        Text [ en-US ] = "An attempt was made to access $(ARG1) in an invalid way.";
+    };
 
-        < "The device (drive) $(ARG1) is invalid." ;
-          (ERRCODE_UUI_IO_INVALIDDEVICE & ERRCODE_RES_MASK) ; >;
+    String (ERRCODE_UUI_IO_INVALIDCHAR & ERRCODE_RES_MASK)
+    {
+        Text [ en-US ] = "$(ARG1) contains invalid characters.";
+    };
 
-        < "The data from $(ARG1) has an invalid length." ;
-          (ERRCODE_UUI_IO_INVALIDLENGTH & ERRCODE_RES_MASK) ; >;
+    String (ERRCODE_UUI_IO_INVALIDDEVICE & ERRCODE_RES_MASK)
+    {
+        Text [ en-US ] = "The device (drive) $(ARG1) is invalid.";
+    };
 
-        < "The operation on $(ARG1) was started with an invalid parameter." ;
-          (ERRCODE_UUI_IO_INVALIDPARAMETER & ERRCODE_RES_MASK) ; >;
+    String (ERRCODE_UUI_IO_INVALIDLENGTH & ERRCODE_RES_MASK)
+    {
+        Text [ en-US ] = "The data from $(ARG1) has an invalid length.";
+    };
 
-        < "The operation cannot be performed because $(ARG1) contains wildcards." ;
-          (ERRCODE_UUI_IO_ISWILDCARD & ERRCODE_RES_MASK) ; >;
+    String (ERRCODE_UUI_IO_INVALIDPARAMETER & ERRCODE_RES_MASK)
+    {
+        Text [ en-US ] = "The operation on $(ARG1) was started with an invalid parameter.";
+    };
 
-        < "Error during shared access to $(ARG1)." ;
-          (ERRCODE_UUI_IO_LOCKVIOLATION & ERRCODE_RES_MASK) ; >;
+    String (ERRCODE_UUI_IO_ISWILDCARD & ERRCODE_RES_MASK)
+    {
+        Text [ en-US ] = "The operation cannot be performed because $(ARG1) contains wildcards.";
+    };
 
-        < "$(ARG1) contains misplaced characters." ;
-          (ERRCODE_UUI_IO_MISPLACEDCHAR & ERRCODE_RES_MASK) ; >;
+    String (ERRCODE_UUI_IO_LOCKVIOLATION & ERRCODE_RES_MASK)
+    {
+        Text [ en-US ] = "Error during shared access to $(ARG1).";
+    };
 
-        < "The name $(ARG1) contains too many characters." ;
-          (ERRCODE_UUI_IO_NAMETOOLONG & ERRCODE_RES_MASK) ; >;
+    String (ERRCODE_UUI_IO_MISPLACEDCHAR & ERRCODE_RES_MASK)
+    {
+        Text [ en-US ] = "$(ARG1) contains misplaced characters.";
+    };
 
-        < "$(ARG1) does not exist." ;
-          (ERRCODE_UUI_IO_NOTEXISTS & ERRCODE_RES_MASK) ; >;
+    String (ERRCODE_UUI_IO_NAMETOOLONG & ERRCODE_RES_MASK)
+    {
+        Text [ en-US ] = "The name $(ARG1) contains too many characters.";
+    };
 
-        < "The path $(ARG1) does not exist." ;
-          (ERRCODE_UUI_IO_NOTEXISTSPATH & ERRCODE_RES_MASK) ; >;
+    String (ERRCODE_UUI_IO_NOTEXISTS & ERRCODE_RES_MASK)
+    {
+        Text [ en-US ] = "$(ARG1) does not exist.";
+    };
 
-        < "The operation on $(ARG1) is not supported on this operating system." ;
-          (ERRCODE_UUI_IO_NOTSUPPORTED & ERRCODE_RES_MASK) ; >;
+    String (ERRCODE_UUI_IO_NOTEXISTSPATH & ERRCODE_RES_MASK)
+    {
+        Text [ en-US ] = "The path $(ARG1) does not exist.";
+    };
 
-        < "$(ARG1) is not a directory." ;
-          (ERRCODE_UUI_IO_NOTADIRECTORY & ERRCODE_RES_MASK) ; >;
+    String (ERRCODE_UUI_IO_NOTSUPPORTED & ERRCODE_RES_MASK)
+    {
+        Text [ en-US ] = "The operation on $(ARG1) is not supported on this operating system.";
+    };
 
-        < "$(ARG1) is not a file." ;
-          (ERRCODE_UUI_IO_NOTAFILE & ERRCODE_RES_MASK) ; >;
+    String (ERRCODE_UUI_IO_NOTADIRECTORY & ERRCODE_RES_MASK)
+    {
+        Text [ en-US ] = "$(ARG1) is not a directory.";
+    };
 
-        < "There is no space left on device $(ARG1)." ;
-          (ERRCODE_UUI_IO_OUTOFSPACE & ERRCODE_RES_MASK) ; >;
+    String (ERRCODE_UUI_IO_NOTAFILE & ERRCODE_RES_MASK)
+    {
+        Text [ en-US ] = "$(ARG1) is not a file.";
+    };
 
-        < "The operation on $(ARG1) cannot be performed because too many files are already open." ;
-          (ERRCODE_UUI_IO_TOOMANYOPENFILES & ERRCODE_RES_MASK) ; >;
+    String (ERRCODE_UUI_IO_OUTOFSPACE & ERRCODE_RES_MASK)
+    {
+        Text [ en-US ] = "There is no space left on device $(ARG1).";
+    };
 
-        < "The operation on $(ARG1) cannot be performed because there is no more memory available." ;
-          (ERRCODE_UUI_IO_OUTOFMEMORY & ERRCODE_RES_MASK) ; >;
+    String (ERRCODE_UUI_IO_TOOMANYOPENFILES & ERRCODE_RES_MASK)
+    {
+        Text [ en-US ] = "The operation on $(ARG1) cannot be performed because too many files are already open.";
+    };
 
-        < "The operation on $(ARG1) cannot continue because more data is pending." ;
-          (ERRCODE_UUI_IO_PENDING & ERRCODE_RES_MASK) ; >;
+    String (ERRCODE_UUI_IO_OUTOFMEMORY & ERRCODE_RES_MASK)
+    {
+        Text [ en-US ] = "The operation on $(ARG1) cannot be performed because there is no more memory available.";
+    };
 
-        < "$(ARG1) cannot be copied into itself." ;
-          (ERRCODE_UUI_IO_RECURSIVE & ERRCODE_RES_MASK) ; >;
+    String (ERRCODE_UUI_IO_PENDING & ERRCODE_RES_MASK)
+    {
+        Text [ en-US ] = "The operation on $(ARG1) cannot continue because more data is pending.";
+    };
 
-        < "Unknown input/output error while accessing $(ARG1)." ;
-          (ERRCODE_UUI_IO_UNKNOWN & ERRCODE_RES_MASK) ; >;
+    String (ERRCODE_UUI_IO_RECURSIVE & ERRCODE_RES_MASK)
+    {
+        Text [ en-US ] = "$(ARG1) cannot be copied into itself.";
+    };
 
-        < "$(ARG1) is write protected." ;
-          (ERRCODE_UUI_IO_WRITEPROTECTED & ERRCODE_RES_MASK) ; >;
+    String (ERRCODE_UUI_IO_UNKNOWN & ERRCODE_RES_MASK)
+    {
+        Text [ en-US ] = "Unknown input/output error while accessing $(ARG1).";
+    };
 
-        < "$(ARG1) is not in the correct format." ;
-          (ERRCODE_UUI_IO_WRONGFORMAT & ERRCODE_RES_MASK) ; >;
+    String (ERRCODE_UUI_IO_WRITEPROTECTED & ERRCODE_RES_MASK)
+    {
+        Text [ en-US ] = "$(ARG1) is write protected.";
+    };
 
-        < "The version of $(ARG1) is not correct." ;
-          (ERRCODE_UUI_IO_WRONGVERSION & ERRCODE_RES_MASK) ; >;
+    String (ERRCODE_UUI_IO_WRONGFORMAT & ERRCODE_RES_MASK)
+    {
+        Text [ en-US ] = "$(ARG1) is not in the correct format.";
+    };
 
-        < "Drive $(ARG1) does not exist." ;
-          (ERRCODE_UUI_IO_NOTEXISTS_VOLUME & ERRCODE_RES_MASK) ; >;
+    String (ERRCODE_UUI_IO_WRONGVERSION & ERRCODE_RES_MASK)
+    {
+        Text [ en-US ] = "The version of $(ARG1) is not correct.";
+    };
 
-        < "Folder $(ARG1) does not exist." ;
-          (ERRCODE_UUI_IO_NOTEXISTS_FOLDER & ERRCODE_RES_MASK) ; >;
+    String (ERRCODE_UUI_IO_NOTEXISTS_VOLUME & ERRCODE_RES_MASK)
+    {
+        Text [ en-US ] = "Drive $(ARG1) does not exist.";
+    };
 
-        < "The installed Java version is not supported." ;
-          (ERRCODE_UUI_WRONGJAVA & ERRCODE_RES_MASK) ; >;
+    String (ERRCODE_UUI_IO_NOTEXISTS_FOLDER & ERRCODE_RES_MASK)
+    {
+        Text [ en-US ] = "Folder $(ARG1) does not exist.";
+    };
 
-        < "The installed Java version $(ARG1) is not supported." ;
-          (ERRCODE_UUI_WRONGJAVA_VERSION & ERRCODE_RES_MASK) ; >;
+    String (ERRCODE_UUI_WRONGJAVA & ERRCODE_RES_MASK)
+    {
+        Text [ en-US ] = "The installed Java version is not supported.";
+    };
 
-        < "The installed Java version is not supported, at least version $(ARG1) is required." ;
-          (ERRCODE_UUI_WRONGJAVA_MIN & ERRCODE_RES_MASK) ; >;
+    String (ERRCODE_UUI_WRONGJAVA_VERSION & ERRCODE_RES_MASK)
+    {
+        Text [ en-US ] = "The installed Java version $(ARG1) is not supported.";
+    };
+    String (ERRCODE_UUI_WRONGJAVA_MIN & ERRCODE_RES_MASK)
+    {
+        Text [ en-US ] = "The installed Java version is not supported, at least version $(ARG1) is required.";
+    };
 
-        < "The installed Java version $(ARG1) is not supported, at least version $(ARG2) is required." ;
-          (ERRCODE_UUI_WRONGJAVA_VERSION_MIN & ERRCODE_RES_MASK) ; >;
+    String (ERRCODE_UUI_WRONGJAVA_VERSION_MIN & ERRCODE_RES_MASK)
+    {
+        Text [ en-US ] = "The installed Java version $(ARG1) is not supported, at least version $(ARG2) is required.";
+    };
 
-        < "The data associated with the partnership is corrupted." ;
-          (ERRCODE_UUI_BADPARTNERSHIP & ERRCODE_RES_MASK) ; >;
+    String (ERRCODE_UUI_BADPARTNERSHIP & ERRCODE_RES_MASK)
+    {
+        Text [ en-US ] = "The data associated with the partnership is corrupted.";
+    };
 
-        < "The data associated with the partnership $(ARG1) is corrupted." ;
-          (ERRCODE_UUI_BADPARTNERSHIP_NAME & ERRCODE_RES_MASK) ; >;
+    String (ERRCODE_UUI_BADPARTNERSHIP_NAME & ERRCODE_RES_MASK)
+    {
+        Text [ en-US ] = "The data associated with the partnership $(ARG1) is corrupted.";
+    };
 
-        < "Volume $(ARG1) is not ready." ;
-          (ERRCODE_UUI_IO_NOTREADY_VOLUME & ERRCODE_RES_MASK) ; >;
+    String (ERRCODE_UUI_IO_NOTREADY_VOLUME & ERRCODE_RES_MASK)
+    {
+        Text [ en-US ] = "Volume $(ARG1) is not ready.";
+    };
 
-        < "$(ARG1) is not ready; please insert a storage medium." ;
-          (ERRCODE_UUI_IO_NOTREADY_REMOVABLE & ERRCODE_RES_MASK) ; >;
+    String (ERRCODE_UUI_IO_NOTREADY_REMOVABLE & ERRCODE_RES_MASK)
+    {
+        Text [ en-US ] = "$(ARG1) is not ready; please insert a storage medium.";
+    };
 
-        < "Volume $(ARG1) is not ready; please insert a storage medium." ;
-          (ERRCODE_UUI_IO_NOTREADY_VOLUME_REMOVABLE & ERRCODE_RES_MASK) ; >;
+    String (ERRCODE_UUI_IO_NOTREADY_VOLUME_REMOVABLE & ERRCODE_RES_MASK)
+    {
+        Text [ en-US ] = "Volume $(ARG1) is not ready; please insert a storage medium.";
+    };
 
-        < "Please insert disk $(ARG1)." ;
-          (ERRCODE_UUI_WRONGMEDIUM & ERRCODE_RES_MASK) ; >;
+    String (ERRCODE_UUI_WRONGMEDIUM & ERRCODE_RES_MASK)
+    {
+        Text [ en-US ] = "Please insert disk $(ARG1).";
+    };
 
-        < "The object cannot be created in directory $(ARG1)." ;
-          (ERRCODE_UUI_IO_CANTCREATE_NONAME & ERRCODE_RES_MASK) ; >;
+    String (ERRCODE_UUI_IO_CANTCREATE_NONAME & ERRCODE_RES_MASK)
+    {
+        Text[ en-US ] = "The object cannot be created in directory $(ARG1).";
+    };
 
-        < "%PRODUCTNAME cannot keep files from being overwritten when this transmission protocol is used. Do you want to continue anyway?" ;
-          (ERRCODE_UUI_IO_UNSUPPORTEDOVERWRITE & ERRCODE_RES_MASK) ; >;
+    String (ERRCODE_UUI_IO_UNSUPPORTEDOVERWRITE & ERRCODE_RES_MASK)
+    {
+        Text [ en-US ] = "%PRODUCTNAME cannot keep files from being overwritten when this transmission protocol is used. Do you want to continue anyway?";
+    };
 
-        < "The file '$(ARG1)' is corrupt and therefore cannot be opened. %PRODUCTNAME can try to repair the file.\n\nThe corruption could be the result of document manipulation or of structural document damage due to data transmission.\n\nWe recommend that you do not trust the content of the repaired document.\nExecution of macros is disabled for this document.\n\nShould %PRODUCTNAME repair the file?\n" ;
-          (ERRCODE_UUI_IO_BROKENPACKAGE & ERRCODE_RES_MASK) ; >;
+    String (ERRCODE_UUI_IO_BROKENPACKAGE & ERRCODE_RES_MASK)
+    {
+        Text [ en-US ] = "The file '$(ARG1)' is corrupt and therefore cannot be opened. %PRODUCTNAME can try to repair the file.\n\nThe corruption could be the result of document manipulation or of structural document damage due to data transmission.\n\nWe recommend that you do not trust the content of the repaired document.\nExecution of macros is disabled for this document.\n\nShould %PRODUCTNAME repair the file?\n";
+    };
 
-        < "The file '$(ARG1)' could not be repaired and therefore cannot be opened." ;
-          (ERRCODE_UUI_IO_BROKENPACKAGE_CANTREPAIR & ERRCODE_RES_MASK) ; >;
+    String (ERRCODE_UUI_IO_BROKENPACKAGE_CANTREPAIR & ERRCODE_RES_MASK)
+    {
+        Text [ en-US ] = "The file '$(ARG1)' could not be repaired and therefore cannot be opened.";
+    };
 
-        < "Configuration data in '$(ARG1)' is corrupted. Without this data some functions may not operate correctly.\nDo you want to continue startup of %PRODUCTNAME without the corrupted configuration data?" ;
-          (ERRCODE_UUI_CONFIGURATION_BROKENDATA_NOREMOVE & ERRCODE_RES_MASK) ; >;
+    String (ERRCODE_UUI_CONFIGURATION_BROKENDATA_NOREMOVE & ERRCODE_RES_MASK)
+    {
+        Text [ en-US ] = "Configuration data in '$(ARG1)' is corrupted. Without this data some functions may not operate correctly.\nDo you want to continue startup of %PRODUCTNAME without the corrupted configuration data?";
+    };
 
-        < "The personal configuration file '$(ARG1)' is corrupted and must be deleted to continue. Some of your personal settings may be lost.\nDo you want to continue startup of %PRODUCTNAME without the corrupted configuration data?" ;
-          (ERRCODE_UUI_CONFIGURATION_BROKENDATA_WITHREMOVE & ERRCODE_RES_MASK) ; >;
+    String (ERRCODE_UUI_CONFIGURATION_BROKENDATA_WITHREMOVE & ERRCODE_RES_MASK)
+    {
+        Text [ en-US ] = "The personal configuration file '$(ARG1)' is corrupted and must be deleted to continue. Some of your personal settings may be lost.\nDo you want to continue startup of %PRODUCTNAME without the corrupted configuration data?";
+    };
 
-        < "The configuration data source '$(ARG1)' is unavailable. Without this data some functions may not operate correctly." ;
-          (ERRCODE_UUI_CONFIGURATION_BACKENDMISSING & ERRCODE_RES_MASK) ; >;
+    String (ERRCODE_UUI_CONFIGURATION_BACKENDMISSING & ERRCODE_RES_MASK)
+    {
+        Text [ en-US ] = "The configuration data source '$(ARG1)' is unavailable. Without this data some functions may not operate correctly.";
+    };
 
-        < "The configuration data source '$(ARG1)' is unavailable. Without this data some functions may not operate correctly.\nDo you want to continue startup of %PRODUCTNAME without the missing configuration data?" ;
-          (ERRCODE_UUI_CONFIGURATION_BACKENDMISSING_WITHRECOVER & ERRCODE_RES_MASK) ; >;
+    String (ERRCODE_UUI_CONFIGURATION_BACKENDMISSING_WITHRECOVER & ERRCODE_RES_MASK)
+    {
+        Text [ en-US ] = "The configuration data source '$(ARG1)' is unavailable. Without this data some functions may not operate correctly.\nDo you want to continue startup of %PRODUCTNAME without the missing configuration data?";
+    };
 
-        < "The form contains invalid data. Do you still want to continue?" ;
-          (ERRCODE_UUI_INVALID_XFORMS_SUBMISSION_DATA & ERRCODE_RES_MASK) ; >;
+    String (ERRCODE_UUI_INVALID_XFORMS_SUBMISSION_DATA & ERRCODE_RES_MASK)
+    {
+        Text [ en-US ] = "The form contains invalid data. Do you still want to continue?";
+    };
 
-        < "The file $(ARG1) is locked by another user. Currently, another write access to this file cannot be granted." ;
-          (ERRCODE_UUI_LOCKING_LOCKED & ERRCODE_RES_MASK) ; >;
+    String (ERRCODE_UUI_LOCKING_LOCKED & ERRCODE_RES_MASK)
+    {
+        Text [ en-US ] = "The file $(ARG1) is locked by another user. Currently, another write access to this file cannot be granted.";
 
-        < "The file $(ARG1) is locked by yourself. Currently, another write access to this file cannot be granted." ;
-          (ERRCODE_UUI_LOCKING_LOCKED_SELF & ERRCODE_RES_MASK) ; >;
+    };
 
-        < "The file $(ARG1) is currently not locked by yourself." ;
-          (ERRCODE_UUI_LOCKING_NOT_LOCKED & ERRCODE_RES_MASK) ; >;
+    String (ERRCODE_UUI_LOCKING_LOCKED_SELF & ERRCODE_RES_MASK)
+    {
+        Text [ en-US ] = "The file $(ARG1) is locked by yourself. Currently, another write access to this file cannot be granted.";
+    };
 
-        < "The previously obtained lock for file $(ARG1) has expired.\nThis can happen due to problems on the server managing the file lock. It cannot be guaranteed that write operations on this file will not overwrite changes done by other users!" ;
-          (ERRCODE_UUI_LOCKING_LOCK_EXPIRED & ERRCODE_RES_MASK) ; >;
+    String (ERRCODE_UUI_LOCKING_NOT_LOCKED & ERRCODE_RES_MASK)
+    {
+        Text [ en-US ] = "The file $(ARG1) is currently not locked by yourself.";
+    };
 
-        < "Unable to verify the identity of $(ARG1) site.\n\nBefore accepting this certificate, you should examine this site's certificate carefully. Are you willing to accept this certificate for the purpose of identifying the Web site $(ARG1)?" ;
-          (ERRCODE_UUI_UNKNOWNAUTH_UNTRUSTED) ; >;
+    String (ERRCODE_UUI_LOCKING_LOCK_EXPIRED & ERRCODE_RES_MASK)
+    {
+        Text [ en-US ] = "The previously obtained lock for file $(ARG1) has expired.\nThis can happen due to problems on the server managing the file lock. It cannot be guaranteed that write operations on this file will not overwrite changes done by other users!";
+    };
 
-        < "$(ARG1) is a site that uses a security certificate to encrypt data during transmission, but its certificate expired on $(ARG2).\n\nYou should check to make sure that your computer's time is correct." ;
-          (ERRCODE_UUI_SSLWARN_EXPIRED_1) ; >;
+    String (ERRCODE_UUI_UNKNOWNAUTH_UNTRUSTED)
+    {
+        Text [ en-US ] = "Unable to verify the identity of $(ARG1) site.\n\nBefore accepting this certificate, you should examine this site's certificate carefully. Are you willing to accept this certificate for the purpose of identifying the Web site $(ARG1)?";
+    };
 
-        < "You have attempted to establish a connection with $(ARG1). However, the security certificate presented belongs to $(ARG2). It is possible, though unlikely, that someone may be trying to intercept your communication with this web site.\n\nIf you suspect the certificate shown does not belong to $(ARG1), please cancel the connection and notify the site administrator.\n\nWould you like to continue anyway?" ;
-          (ERRCODE_UUI_SSLWARN_DOMAINMISMATCH_1) ; >;
+    String (ERRCODE_UUI_SSLWARN_EXPIRED_1)
+    {
+        Text [ en-US ] = "$(ARG1) is a site that uses a security certificate to encrypt data during transmission, but its certificate expired on $(ARG2).\n\nYou should check to make sure that your computer's time is correct.";
+    };
 
-        < "The certificate could not be validated. You should examine this site's certificate carefully.\n\nIf you suspect the certificate shown, please cancel the connection and notify the site administrator." ;
-          (ERRCODE_UUI_SSLWARN_INVALID_1) ; >;
+    String (ERRCODE_UUI_SSLWARN_DOMAINMISMATCH_1)
+    {
+        Text [ en-US ] = "You have attempted to establish a connection with $(ARG1). However, the security certificate presented belongs to $(ARG2). It is possible, though unlikely, that someone may be trying to intercept your communication with this web site.\n\nIf you suspect the certificate shown does not belong to $(ARG1), please cancel the connection and notify the site administrator.\n\nWould you like to continue anyway?";
+    };
 
-        < "Security Warning: Domain Name Mismatch" ;
-          (TITLE_UUI_SSLWARN_DOMAINMISMATCH) ; >;
+    String (ERRCODE_UUI_SSLWARN_INVALID_1)
+    {
+        Text [ en-US ] = "The certificate could not be validated. You should examine this site's certificate carefully.\n\nIf you suspect the certificate shown, please cancel the connection and notify the site administrator.";
+    };
+    String (TITLE_UUI_SSLWARN_DOMAINMISMATCH)
+    {
+        Text [ en-US ] = "Security Warning: Domain Name Mismatch";
+    };
 
-        < "Security Warning: Server Certificate Expired" ;
-          (TITLE_UUI_SSLWARN_EXPIRED) ; >;
+    String (TITLE_UUI_SSLWARN_EXPIRED)
+    {
+        Text [ en-US ] = "Security Warning: Server Certificate Expired";
+    };
 
-        < "Security Warning: Server Certificate Invalid" ;
-          (TITLE_UUI_SSLWARN_INVALID) ; >;
+    String (TITLE_UUI_SSLWARN_INVALID)
+    {
+        Text [ en-US ] = "Security Warning: Server Certificate Invalid";
+    };
 
-        < "Component cannot be loaded, possibly broken or incomplete installation.\nFull error message:\n\n $(ARG1)." ;
-          (ERRCODE_UUI_CANNOT_ACTIVATE_FACTORY & ERRCODE_RES_MASK) ; >;
+    String (ERRCODE_UUI_CANNOT_ACTIVATE_FACTORY & ERRCODE_RES_MASK)
+    {
+        Text [ en-US ] = "Component cannot be loaded, possibly broken or incomplete installation.\nFull error message:\n\n $(ARG1).";
     };
+
 };
 
 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/vcl/headless/svpframe.cxx b/vcl/headless/svpframe.cxx
index 962cea0..0ce76cf 100644
--- a/vcl/headless/svpframe.cxx
+++ b/vcl/headless/svpframe.cxx
@@ -150,7 +150,7 @@ SalGraphics* SvpSalFrame::AcquireGraphics()
 {
     SvpSalGraphics* pGraphics = new SvpSalGraphics();
 #ifndef IOS
-    pGraphics->setSurface(m_pSurface, B2IVector(maGeometry.nWidth, maGeometry.nHeight));
+    pGraphics->setSurface( m_pSurface );
 #endif
     m_aGraphics.push_back( pGraphics );
     return pGraphics;
@@ -281,7 +281,7 @@ void SvpSalFrame::SetPosSize( long nX, long nY, long nWidth, long nHeight, sal_u
         for( std::list< SvpSalGraphics* >::iterator it = m_aGraphics.begin();
              it != m_aGraphics.end(); ++it )
         {
-             (*it)->setSurface(m_pSurface, aFrameSize);
+             (*it)->setSurface(m_pSurface);
         }
     }
     if( m_bVisible )
diff --git a/vcl/headless/svpgdi.cxx b/vcl/headless/svpgdi.cxx
index e05617d..34bb744 100644
--- a/vcl/headless/svpgdi.cxx
+++ b/vcl/headless/svpgdi.cxx
@@ -133,22 +133,6 @@ namespace
         {
             return source;
         }
-        void mark_dirty()
-        {
-            cairo_surface_mark_dirty(source);
-        }
-        unsigned char* getBits(sal_Int32 &rStride)
-        {
-            cairo_surface_flush(source);
-
-            unsigned char *mask_data = cairo_image_surface_get_data(source);
-
-            cairo_format_t nFormat = cairo_image_surface_get_format(source);
-            assert(nFormat == CAIRO_FORMAT_ARGB32 && "need to implement CAIRO_FORMAT_A1 after all here");
-            rStride = cairo_format_stride_for_width(nFormat, cairo_image_surface_get_width(source));
-
-            return mask_data;
-        }
     private:
         SvpSalBitmap aTmpBmp;
         cairo_surface_t* source;
@@ -402,10 +386,9 @@ SvpSalGraphics::~SvpSalGraphics()
 {
 }
 
-void SvpSalGraphics::setSurface(cairo_surface_t* pSurface, const basegfx::B2IVector& rSize)
+void SvpSalGraphics::setSurface(cairo_surface_t* pSurface)
 {
     m_pSurface = pSurface;
-    m_aFrameSize = rSize;
 #if CAIRO_VERSION >= CAIRO_VERSION_ENCODE(1, 14, 0)
     cairo_surface_get_device_scale(pSurface, &m_fScale, nullptr);
 #endif
@@ -419,14 +402,14 @@ void SvpSalGraphics::GetResolution( sal_Int32& rDPIX, sal_Int32& rDPIY )
 
 sal_uInt16 SvpSalGraphics::GetBitCount() const
 {
-    if (cairo_surface_get_content(m_pSurface) != CAIRO_CONTENT_COLOR_ALPHA)
+    if (CAIRO_FORMAT_A1 == cairo_image_surface_get_format(m_pSurface))
         return 1;
     return 32;
 }
 
 long SvpSalGraphics::GetGraphicsWidth() const
 {
-    return m_pSurface ? m_aFrameSize.getX() : 0;
+    return m_pSurface ? cairo_image_surface_get_width(m_pSurface) / m_fScale : 0;
 }
 
 void SvpSalGraphics::ResetClipRegion()
@@ -902,7 +885,7 @@ bool SvpSalGraphics::drawPolyPolygon(const basegfx::B2DPolyPolygon& rPolyPoly, d
 
 void SvpSalGraphics::applyColor(cairo_t *cr, SalColor aColor)
 {
-    if (cairo_surface_get_content(m_pSurface) == CAIRO_CONTENT_COLOR_ALPHA)
+    if (CAIRO_FORMAT_ARGB32 == cairo_image_surface_get_format(m_pSurface))
     {
         cairo_set_source_rgba(cr, SALCOLOR_RED(aColor)/255.0,
                                   SALCOLOR_GREEN(aColor)/255.0,
@@ -999,10 +982,17 @@ void SvpSalGraphics::copyBits( const SalTwoRect& rTR,
     if (pSrc == this)
     {
         //self copy is a problem, so dup source in that case
+#if CAIRO_VERSION < CAIRO_VERSION_ENCODE(1, 12, 0)
         pCopy = cairo_surface_create_similar(source,
                                             cairo_surface_get_content(m_pSurface),
                                             aTR.mnSrcWidth * m_fScale,
                                             aTR.mnSrcHeight * m_fScale);
+#else
+        pCopy = cairo_surface_create_similar_image(source,
+                                            cairo_image_surface_get_format(m_pSurface),
+                                            aTR.mnSrcWidth * m_fScale,
+                                            aTR.mnSrcHeight * m_fScale);
+#endif
 #if CAIRO_VERSION >= CAIRO_VERSION_ENCODE(1, 14, 0)
         cairo_surface_set_device_scale(pCopy, m_fScale, m_fScale);
 #endif
@@ -1059,8 +1049,16 @@ void SvpSalGraphics::drawMask( const SalTwoRect& rTR,
     /** creates an image from the given rectangle, replacing all black pixels
      *  with nMaskColor and make all other full transparent */
     SourceHelper aSurface(rSalBitmap);
-    sal_Int32 nStride;
-    unsigned char *mask_data = aSurface.getBits(nStride);
+    cairo_surface_t* mask = aSurface.getSurface();
+
+    cairo_surface_flush(mask);
+
+    unsigned char *mask_data = cairo_image_surface_get_data(mask);
+
+    cairo_format_t nFormat = cairo_image_surface_get_format(mask);
+    assert(nFormat == CAIRO_FORMAT_ARGB32 && "need to implement CAIRO_FORMAT_A1 after all here");
+    sal_Int32 nStride = cairo_format_stride_for_width(nFormat,
+                                                      cairo_image_surface_get_width(mask));
     for (sal_Int32 y = rTR.mnSrcY ; y < rTR.mnSrcY + rTR.mnSrcHeight; ++y)
     {
         unsigned char *row = mask_data + (nStride*y);
@@ -1087,7 +1085,7 @@ void SvpSalGraphics::drawMask( const SalTwoRect& rTR,
             data+=4;
         }
     }
-    aSurface.mark_dirty();
+    cairo_surface_mark_dirty(mask);
 
     cairo_t* cr = getCairoContext(false);
     clipRegion(cr);
@@ -1100,7 +1098,7 @@ void SvpSalGraphics::drawMask( const SalTwoRect& rTR,
 
     cairo_translate(cr, rTR.mnDestX, rTR.mnDestY);
     cairo_scale(cr, (double)(rTR.mnDestWidth)/rTR.mnSrcWidth, ((double)rTR.mnDestHeight)/rTR.mnSrcHeight);
-    cairo_set_source_surface(cr, aSurface.getSurface(), -rTR.mnSrcX, -rTR.mnSrcY);
+    cairo_set_source_surface(cr, mask, -rTR.mnSrcX, -rTR.mnSrcY);
     cairo_paint(cr);
 
     releaseCairoContext(cr, false, extents);
@@ -1125,24 +1123,18 @@ SalBitmap* SvpSalGraphics::getBitmap( long nX, long nY, long nWidth, long nHeigh
 
 SalColor SvpSalGraphics::getPixel( long nX, long nY )
 {
-    cairo_surface_t *target = cairo_image_surface_create(CAIRO_FORMAT_ARGB32, 1, 1);
-    cairo_t* cr = cairo_create(target);
-
-    cairo_rectangle(cr, 0, 0, 1, 1);
-    cairo_set_source_surface(cr, m_pSurface, -nX, -nY);
-    cairo_paint(cr);
-    cairo_destroy(cr);
-
-    cairo_surface_flush(target);
-    unsigned char *data = cairo_image_surface_get_data(target);
+    cairo_surface_flush(m_pSurface);
+    cairo_format_t nFormat = cairo_image_surface_get_format(m_pSurface);
+    assert(nFormat == CAIRO_FORMAT_ARGB32 && "need to implement CAIRO_FORMAT_A1 after all here");
+    sal_Int32 nStride = cairo_format_stride_for_width(nFormat,
+                                                      cairo_image_surface_get_width(m_pSurface));
+    unsigned char *surface_data = cairo_image_surface_get_data(m_pSurface);
+    unsigned char *row = surface_data + (nStride*nY);
+    unsigned char *data = row + (nX * 4);
     sal_uInt8 b = unpremultiply(data[SVP_CAIRO_BLUE], data[SVP_CAIRO_ALPHA]);
     sal_uInt8 g = unpremultiply(data[SVP_CAIRO_GREEN], data[SVP_CAIRO_ALPHA]);
     sal_uInt8 r = unpremultiply(data[SVP_CAIRO_RED], data[SVP_CAIRO_ALPHA]);
-    SalColor nRet = MAKE_SALCOLOR(r, g, b);
-
-    cairo_surface_destroy(target);
-
-    return nRet;
+    return MAKE_SALCOLOR(r, g, b);
 }
 
 namespace
@@ -1276,17 +1268,17 @@ cairo_surface_t* SvpSalGraphics::createCairoSurface(const BitmapBuffer *pBuffer)
     return target;
 }
 
-cairo_t* SvpSalGraphics::createTmpCompatibleCairoContext() const
+static cairo_t* createTmpCompatibleCairoContext(cairo_surface_t* pSurface, double fScale)
 {
-    cairo_surface_t *target = cairo_image_surface_create(CAIRO_FORMAT_ARGB32,
-                                                         m_aFrameSize.getX() * m_fScale,
-                                                         m_aFrameSize.getY() * m_fScale);
+    cairo_surface_t *target = cairo_image_surface_create(
+                                cairo_image_surface_get_format(pSurface),
+                                cairo_image_surface_get_width(pSurface),
+                                cairo_image_surface_get_height(pSurface));
 #if CAIRO_VERSION >= CAIRO_VERSION_ENCODE(1, 14, 0)
-    cairo_surface_set_device_scale(target, m_fScale, m_fScale);
+    cairo_surface_set_device_scale(target, fScale, fScale);
 #else
     (void)fScale;
 #endif
-
     return cairo_create(target);
 }
 
@@ -1294,7 +1286,7 @@ cairo_t* SvpSalGraphics::getCairoContext(bool bXorModeAllowed) const
 {
     cairo_t* cr;
     if (m_ePaintMode == XOR && bXorModeAllowed)
-        cr = createTmpCompatibleCairoContext();
+        cr = createTmpCompatibleCairoContext(m_pSurface, m_fScale);
     else
         cr = cairo_create(m_pSurface);
     cairo_set_line_width(cr, 1);
@@ -1324,8 +1316,8 @@ void SvpSalGraphics::releaseCairoContext(cairo_t* cr, bool bXorModeAllowed, cons
 
     sal_Int32 nExtentsLeft(rExtents.getMinX()), nExtentsTop(rExtents.getMinY());
     sal_Int32 nExtentsRight(rExtents.getMaxX()), nExtentsBottom(rExtents.getMaxY());
-    sal_Int32 nWidth = m_aFrameSize.getX();
-    sal_Int32 nHeight = m_aFrameSize.getY();
+    sal_Int32 nWidth = cairo_image_surface_get_width(m_pSurface);
+    sal_Int32 nHeight = cairo_image_surface_get_height(m_pSurface);
     nExtentsLeft = std::max<sal_Int32>(nExtentsLeft, 0);
     nExtentsTop = std::max<sal_Int32>(nExtentsTop, 0);
     nExtentsRight = std::min<sal_Int32>(nExtentsRight, nWidth);
@@ -1339,35 +1331,21 @@ void SvpSalGraphics::releaseCairoContext(cairo_t* cr, bool bXorModeAllowed, cons
     //emulate it (slowly) here.
     if (m_ePaintMode == XOR && bXorModeAllowed)
     {
-        cairo_surface_t* target_surface = m_pSurface;
-        if (cairo_surface_get_type(target_surface) != CAIRO_SURFACE_TYPE_IMAGE)
-        {
-            //in the unlikely case we can't use m_pSurface directly, copy contents
-            //to another temp image surface
-            cairo_t* copycr = createTmpCompatibleCairoContext();
-            cairo_rectangle(copycr, nExtentsLeft, nExtentsTop,
-                                    nExtentsRight - nExtentsLeft,
-                                    nExtentsBottom - nExtentsTop);
-            cairo_set_source_surface(copycr, m_pSurface, 0, 0);
-            cairo_paint(copycr);
-            target_surface = cairo_get_target(copycr);
-            cairo_destroy(copycr);
-        }
-
-        cairo_surface_flush(target_surface);
-        unsigned char *target_surface_data = cairo_image_surface_get_data(target_surface);
+        cairo_surface_t* true_surface = m_pSurface;
+        cairo_surface_flush(true_surface);
+        unsigned char *true_surface_data = cairo_image_surface_get_data(true_surface);
         unsigned char *xor_surface_data = cairo_image_surface_get_data(surface);
 
         cairo_format_t nFormat = cairo_image_surface_get_format(m_pSurface);
         assert(nFormat == CAIRO_FORMAT_ARGB32 && "need to implement CAIRO_FORMAT_A1 after all here");
-        sal_Int32 nStride = cairo_format_stride_for_width(nFormat, nWidth * m_fScale);
+        sal_Int32 nStride = cairo_format_stride_for_width(nFormat, nWidth);
         sal_Int32 nUnscaledExtentsLeft = nExtentsLeft * m_fScale;
         sal_Int32 nUnscaledExtentsRight = nExtentsRight * m_fScale;
         sal_Int32 nUnscaledExtentsTop = nExtentsTop * m_fScale;
         sal_Int32 nUnscaledExtentsBottom = nExtentsBottom * m_fScale;
         for (sal_Int32 y = nUnscaledExtentsTop; y < nUnscaledExtentsBottom; ++y)
         {
-            unsigned char *true_row = target_surface_data + (nStride*y);
+            unsigned char *true_row = true_surface_data + (nStride*y);
             unsigned char *xor_row = xor_surface_data + (nStride*y);
             unsigned char *true_data = true_row + (nUnscaledExtentsLeft * 4);
             unsigned char *xor_data = xor_row + (nUnscaledExtentsLeft * 4);
@@ -1386,22 +1364,7 @@ void SvpSalGraphics::releaseCairoContext(cairo_t* cr, bool bXorModeAllowed, cons
                 xor_data+=4;
             }
         }
-        cairo_surface_mark_dirty(target_surface);
-
-        if (target_surface != m_pSurface)
-        {
-            cairo_t* copycr = cairo_create(m_pSurface);
-            //unlikely case we couldn't use m_pSurface directly, copy contents
-            //back from image surface
-            cairo_rectangle(copycr, nExtentsLeft, nExtentsTop,
-                                    nExtentsRight - nExtentsLeft,
-                                    nExtentsBottom - nExtentsTop);
-            cairo_set_source_surface(copycr, target_surface, 0, 0);
-            cairo_paint(copycr);
-            cairo_destroy(copycr);
-            cairo_surface_destroy(target_surface);
-        }
-
+        cairo_surface_mark_dirty(true_surface);
         cairo_surface_destroy(surface);
     }
 
diff --git a/vcl/headless/svpvd.cxx b/vcl/headless/svpvd.cxx
index b5ab755..ca28a52 100644
--- a/vcl/headless/svpvd.cxx
+++ b/vcl/headless/svpvd.cxx
@@ -38,7 +38,7 @@ SvpSalVirtualDevice::~SvpSalVirtualDevice()
 SalGraphics* SvpSalVirtualDevice::AcquireGraphics()
 {
     SvpSalGraphics* pGraphics = new SvpSalGraphics();
-    pGraphics->setSurface(m_pSurface, m_aFrameSize);
+    pGraphics->setSurface(m_pSurface);
     m_aGraphics.push_back( pGraphics );
     return pGraphics;
 }
@@ -62,14 +62,12 @@ bool SvpSalVirtualDevice::SetSizeUsingBuffer( long nNewDX, long nNewDY,
     if (nNewDY == 0)
         nNewDY = 1;
 
-    if (!m_pSurface || m_aFrameSize.getX() != nNewDX ||
-                       m_aFrameSize.getY() != nNewDY )
-    {
-        m_aFrameSize = basegfx::B2IVector(nNewDX, nNewDY);
-
-        nNewDX *= m_fScale;
-        nNewDY *= m_fScale;
+    nNewDX *= m_fScale;
+    nNewDY *= m_fScale;
 
+    if (!m_pSurface || cairo_image_surface_get_width(m_pSurface) != nNewDX ||
+                       cairo_image_surface_get_height(m_pSurface) != nNewDY )
+    {
         if (m_pSurface)
         {
             cairo_surface_destroy(m_pSurface);
@@ -98,19 +96,20 @@ bool SvpSalVirtualDevice::SetSizeUsingBuffer( long nNewDX, long nNewDY,
         // update device in existing graphics
         for( std::list< SvpSalGraphics* >::iterator it = m_aGraphics.begin();
              it != m_aGraphics.end(); ++it )
-            (*it)->setSurface(m_pSurface, m_aFrameSize);
+            (*it)->setSurface(m_pSurface);
+
     }
     return true;
 }
 
 long SvpSalVirtualDevice::GetWidth() const
 {
-    return m_pSurface ? m_aFrameSize.getX() : 0;
+    return m_pSurface ? cairo_image_surface_get_width(m_pSurface) : 0;
 }
 
 long SvpSalVirtualDevice::GetHeight() const
 {
-    return m_pSurface ? m_aFrameSize.getY() : 0;
+    return m_pSurface ? cairo_image_surface_get_height(m_pSurface) : 0;
 }
 
 #endif
diff --git a/vcl/inc/headless/svpgdi.hxx b/vcl/inc/headless/svpgdi.hxx
index 5673706..8083474 100644
--- a/vcl/inc/headless/svpgdi.hxx
+++ b/vcl/inc/headless/svpgdi.hxx
@@ -80,7 +80,6 @@ struct VCL_DLLPUBLIC DamageHandler
 class VCL_DLLPUBLIC SvpSalGraphics : public SalGraphics
 {
     cairo_surface_t*               m_pSurface;
-    basegfx::B2IVector             m_aFrameSize;
     double                         m_fScale;
     SalColor                       m_aLineColor;
     SalColor                       m_aFillColor;
@@ -88,7 +87,7 @@ class VCL_DLLPUBLIC SvpSalGraphics : public SalGraphics
 
 public:
     static GlyphCache& getPlatformGlyphCache();
-    void setSurface(cairo_surface_t* pSurface, const basegfx::B2IVector& rSize);
+    void setSurface(cairo_surface_t* pSurface);
     static cairo_user_data_key_t* getDamageKey();
 
 private:
@@ -116,8 +115,6 @@ protected:
         const SalBitmap* pAlphaBitmap) override;
     virtual bool drawAlphaRect( long nX, long nY, long nWidth, long nHeight, sal_uInt8 nTransparency ) override;
 
-    cairo_t* createTmpCompatibleCairoContext() const;
-
 public:
     SvpSalGraphics();
     virtual ~SvpSalGraphics() override;
diff --git a/vcl/inc/headless/svpvd.hxx b/vcl/inc/headless/svpvd.hxx
index 7ac1563..882f36d 100644
--- a/vcl/inc/headless/svpvd.hxx
+++ b/vcl/inc/headless/svpvd.hxx
@@ -31,7 +31,6 @@ class VCL_DLLPUBLIC SvpSalVirtualDevice : public SalVirtualDevice
 {
     DeviceFormat                        m_eFormat;
     cairo_surface_t*                    m_pSurface;
-    basegfx::B2IVector                  m_aFrameSize;
     double                              m_fScale;
     std::list< SvpSalGraphics* >        m_aGraphics;
 
diff --git a/vcl/inc/unx/gtk/gtkframe.hxx b/vcl/inc/unx/gtk/gtkframe.hxx
index 51977c25..a0c86b3 100644
--- a/vcl/inc/unx/gtk/gtkframe.hxx
+++ b/vcl/inc/unx/gtk/gtkframe.hxx
@@ -246,7 +246,6 @@ class GtkSalFrame : public SalFrame
 #endif
 #if GTK_CHECK_VERSION(3,0,0)
     static gboolean     signalDraw( GtkWidget*, cairo_t *cr, gpointer );
-    static void         signalRealize(GtkWidget*, gpointer frame);
     static void         sizeAllocated(GtkWidget*, GdkRectangle *pAllocation, gpointer frame);
     static gboolean     signalTooltipQuery(GtkWidget*, gint x, gint y,
                                      gboolean keyboard_mode, GtkTooltip *tooltip,
@@ -347,7 +346,6 @@ class GtkSalFrame : public SalFrame
 public:
 #if GTK_CHECK_VERSION(3,0,0)
     cairo_surface_t*                m_pSurface;
-    basegfx::B2IVector              m_aFrameSize;
     DamageHandler                   m_aDamageHandler;
     int                             m_nGrabLevel;
     bool                            m_bSalObjectSetPosSize;
diff --git a/vcl/unx/gtk3/gtk3gtkframe.cxx b/vcl/unx/gtk3/gtk3gtkframe.cxx
index e2d19fe..a74555f 100644
--- a/vcl/unx/gtk3/gtk3gtkframe.cxx
+++ b/vcl/unx/gtk3/gtk3gtkframe.cxx
@@ -1039,7 +1039,6 @@ void GtkSalFrame::InitCommon()
     m_aMouseSignalIds.push_back(g_signal_connect( G_OBJECT(pEventWidget), "scroll-event", G_CALLBACK(signalScroll), this ));
 
     g_signal_connect( G_OBJECT(m_pFixedContainer), "draw", G_CALLBACK(signalDraw), this );
-    g_signal_connect( G_OBJECT(m_pFixedContainer), "realize", G_CALLBACK(signalRealize), this );
     g_signal_connect( G_OBJECT(m_pFixedContainer), "size-allocate", G_CALLBACK(sizeAllocated), this );
 #if GTK_CHECK_VERSION(3,14,0)
     GtkGesture *pSwipe = gtk_gesture_swipe_new(pEventWidget);
@@ -1336,7 +1335,7 @@ SalGraphics* GtkSalFrame::AcquireGraphics()
             AllocateFrame();
             TriggerPaintEvent();
         }
-        m_pGraphics->setSurface(m_pSurface, m_aFrameSize);
+        m_pGraphics->setSurface(m_pSurface);
     }
     m_bGraphics = true;
     return m_pGraphics;
@@ -1563,11 +1562,13 @@ void GtkSalFrame::SetMinClientSize( long nWidth, long nHeight )
     }
 }
 
+// FIXME: we should really be an SvpSalFrame sub-class, and
+// share their AllocateFrame !
 void GtkSalFrame::AllocateFrame()
 {
     basegfx::B2IVector aFrameSize( maGeometry.nWidth, maGeometry.nHeight );
-    if (!m_pSurface || m_aFrameSize.getX() != aFrameSize.getX() ||
-                       m_aFrameSize.getY() != aFrameSize.getY() )
+    if (!m_pSurface || cairo_image_surface_get_width(m_pSurface) != aFrameSize.getX() ||
+                       cairo_image_surface_get_height(m_pSurface) != aFrameSize.getY() )
     {
         if( aFrameSize.getX() == 0 )
             aFrameSize.setX( 1 );
@@ -1577,17 +1578,30 @@ void GtkSalFrame::AllocateFrame()
         if (m_pSurface)
             cairo_surface_destroy(m_pSurface);
 
-        m_pSurface = gdk_window_create_similar_surface(widget_get_window(m_pWindow),
-                                                       CAIRO_CONTENT_COLOR_ALPHA,
-                                                       aFrameSize.getX(),
-                                                       aFrameSize.getY());
-        m_aFrameSize = aFrameSize;
-
+#if GTK_CHECK_VERSION(3,10,0)
+#if CAIRO_VERSION >= CAIRO_VERSION_ENCODE(1, 14, 0)
+        int scale = gtk_widget_get_scale_factor(m_pWindow);
+#else
+        int scale = 1;
+#endif
+        m_pSurface = gdk_window_create_similar_image_surface(widget_get_window(m_pWindow),
+                                                             CAIRO_FORMAT_ARGB32,
+                                                             aFrameSize.getX() * scale,
+                                                             aFrameSize.getY() * scale,
+                                                             scale);
+#if CAIRO_VERSION >= CAIRO_VERSION_ENCODE(1, 14, 0)
+        cairo_surface_set_device_scale(m_pSurface, scale, scale);
+#endif
+#else
+        m_pSurface = cairo_image_surface_create(CAIRO_FORMAT_ARGB32,
+                                                aFrameSize.getX(),
+                                                aFrameSize.getY());
+#endif
         cairo_surface_set_user_data(m_pSurface, SvpSalGraphics::getDamageKey(), &m_aDamageHandler, nullptr);
         SAL_INFO("vcl.gtk3", "allocated Frame size of " << maGeometry.nWidth << " x " << maGeometry.nHeight);
 
         if (m_pGraphics)
-            m_pGraphics->setSurface(m_pSurface, m_aFrameSize);
+            m_pGraphics->setSurface(m_pSurface);
     }
 }
 
@@ -2875,23 +2889,13 @@ gboolean GtkSalFrame::signalDraw(GtkWidget*, cairo_t *cr, gpointer frame)
     return false;
 }
 
-void GtkSalFrame::sizeAllocated(GtkWidget* pWidget, GdkRectangle *pAllocation, gpointer frame)
+void GtkSalFrame::sizeAllocated(GtkWidget*, GdkRectangle *pAllocation, gpointer frame)
 {
     GtkSalFrame* pThis = static_cast<GtkSalFrame*>(frame);
     pThis->maGeometry.nWidth = pAllocation->width;
     pThis->maGeometry.nHeight = pAllocation->height;
-    bool bRealized = gtk_widget_get_realized(pWidget);
-    if (bRealized)
-        pThis->AllocateFrame();
-    pThis->CallCallbackExc( SalEvent::Resize, nullptr );
-    if (bRealized && !pThis->m_bSalObjectSetPosSize)
-        pThis->TriggerPaintEvent();
-}
-
-void GtkSalFrame::signalRealize(GtkWidget*, gpointer frame)
-{
-    GtkSalFrame* pThis = static_cast<GtkSalFrame*>(frame);
     pThis->AllocateFrame();
+    pThis->CallCallbackExc( SalEvent::Resize, nullptr );
     if (pThis->m_bSalObjectSetPosSize)
         return;
     pThis->TriggerPaintEvent();


More information about the Libreoffice-commits mailing list