sd/source/ui/view/viewshe3.cxx |    2 -
 vcl/inc/jsdialog/enabled.hxx   |    8 ++++--
 vcl/jsdialog/enabled.cxx       |   50 +++++++++++++++++++++++++++++++++++++++++
 vcl/source/window/builder.cxx  |   18 ++++++++++++++
 4 files changed, 75 insertions(+), 3 deletions(-)

New commits:
commit adb30ef8e9240995c154d041bf78e2f42c77c16b
Author:     Caolán McNamara <[email protected]>
AuthorDate: Thu Jan 22 19:58:07 2026 +0000
Commit:     Caolán McNamara <[email protected]>
CommitDate: Tue Feb 24 09:21:04 2026 +0100

    add CompleteCommonSidebarCoverage
    
    Change-Id: Icedcbac9e2b79a1985832a29c3c0ec3ef298fa91
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/197871
    Reviewed-by: Caolán McNamara <[email protected]>
    Tested-by: Jenkins CollaboraOffice <[email protected]>
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/200102

diff --git a/vcl/inc/jsdialog/enabled.hxx b/vcl/inc/jsdialog/enabled.hxx
index 76acfc6483ed..d5a6e13e9b1c 100644
--- a/vcl/inc/jsdialog/enabled.hxx
+++ b/vcl/inc/jsdialog/enabled.hxx
@@ -32,6 +32,8 @@ std::vector<OUString> completeWriterDialogList(const 
o3tl::sorted_vector<OUStrin
 std::vector<OUString> completeWriterSidebarList(const 
o3tl::sorted_vector<OUString>& entries);
 // returns vector of common/shared dialog .ui files not seen that should be 
seen to have complete coverage
 std::vector<OUString> completeCommonDialogList(const 
o3tl::sorted_vector<OUString>& entries);
+// returns vector of common/shared sidebar .ui files not seen that should be 
seen to have complete coverage
+std::vector<OUString> completeCommonSidebarList(const 
o3tl::sorted_vector<OUString>& entries);
 }
 
 /* vim:set shiftwidth=4 softtabstop=4 expandtab cinoptions=b1,g0,N-s 
cinkeys+=0=break: */
diff --git a/vcl/jsdialog/enabled.cxx b/vcl/jsdialog/enabled.cxx
index c08f80c4e991..4f4b04b41bd5 100644
--- a/vcl/jsdialog/enabled.cxx
+++ b/vcl/jsdialog/enabled.cxx
@@ -681,6 +681,36 @@ std::vector<OUString> completeWriterSidebarList(const 
o3tl::sorted_vector<OUStri
     return missing;
 }
 
+std::vector<OUString> completeCommonSidebarList(const 
o3tl::sorted_vector<OUString>& entries)
+{
+    std::vector<OUString> missing;
+    for (const auto& entry : SidebarList)
+    {
+        OUString sEntry(entry);
+
+        if (sEntry.startsWith("modules/"))
+            continue;
+        // Skip this one, I don't think it can appear in practice
+        if (entry == u"svx/ui/sidebargallery.ui")
+            continue;
+        // Skip this one, its context means it cannot appear in writer
+        else if (entry == u"svx/ui/sidebarshadow.ui")
+            continue;
+        // Skip this one, its context means it cannot appear in writer
+        else if (entry == u"svx/ui/sidebartexteffect.ui")
+            continue;
+        // Skip this one, its context means it cannot appear in writer
+        else if (entry == u"svx/ui/sidebarlists.ui")
+            continue;
+        // Skip this one, its context means it can only appear in draw/impress
+        else if (entry == u"svx/ui/defaultshapespanel.ui")
+            continue;
+        else if (!entries.contains(sEntry))
+            missing.push_back(sEntry);
+    }
+    return missing;
+}
+
 std::vector<OUString> completeCommonDialogList(const 
o3tl::sorted_vector<OUString>& entries)
 {
     std::vector<OUString> missing;
diff --git a/vcl/source/window/builder.cxx b/vcl/source/window/builder.cxx
index fa174f38eb61..0f7071a596de 100644
--- a/vcl/source/window/builder.cxx
+++ b/vcl/source/window/builder.cxx
@@ -232,6 +232,15 @@ void Application::UICoverageReport(tools::JsonWriter& 
rJson)
         for (const auto& entry : missingCommonDialogUIs)
             rJson.putSimpleValue(entry);
     }
+
+    std::vector<OUString> missingCommonSidebarUIs = 
jsdialog::completeCommonSidebarList(entries);
+    rJson.put("CompleteCommonSidebarCoverage", 
missingCommonSidebarUIs.empty());
+    if (!missingCommonSidebarUIs.empty())
+    {
+        auto childrenNode = rJson.startArray("MissingCommonSidebarCoverage");
+        for (const auto& entry : missingCommonSidebarUIs)
+            rJson.putSimpleValue(entry);
+    }
 }
 
 std::unique_ptr<weld::Builder> Application::CreateBuilder(weld::Widget* 
pParent, const OUString &rUIFile, bool bMobile, sal_uInt64 nLOKWindowId)
commit 26faa9c5a38959cbea12f7dff0bfe255341cd383
Author:     Caolán McNamara <[email protected]>
AuthorDate: Wed Jan 21 14:47:50 2026 +0000
Commit:     Caolán McNamara <[email protected]>
CommitDate: Tue Feb 24 09:20:57 2026 +0100

    add MissingWriterSidebarCoverage result
    
    Change-Id: Ifa20e6859560c518c7722179b475c2801ff8d498
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/197862
    Reviewed-by: Miklos Vajna <[email protected]>
    Tested-by: Jenkins CollaboraOffice <[email protected]>
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/200101
    Reviewed-by: Caolán McNamara <[email protected]>

diff --git a/vcl/inc/jsdialog/enabled.hxx b/vcl/inc/jsdialog/enabled.hxx
index 3b7b33ba9ade..76acfc6483ed 100644
--- a/vcl/inc/jsdialog/enabled.hxx
+++ b/vcl/inc/jsdialog/enabled.hxx
@@ -26,9 +26,11 @@ bool isBuilderEnabledForNavigator(std::u16string_view 
rUIFile);
 bool isBuilderEnabledForQuickFind(std::u16string_view rUIFile);
 bool isInterimBuilderEnabledForNotebookbar(std::u16string_view rUIFile);
 
-// returns vector of writer .ui files not seen that should be seen to have 
complete coverage
+// returns vector of writer dialog .ui files not seen that should be seen to 
have complete coverage
 std::vector<OUString> completeWriterDialogList(const 
o3tl::sorted_vector<OUString>& entries);
-// returns vector of common/shared .ui files not seen that should be seen to 
have complete coverage
+// returns vector of writer sidebar .ui files not seen that should be seen to 
have complete coverage
+std::vector<OUString> completeWriterSidebarList(const 
o3tl::sorted_vector<OUString>& entries);
+// returns vector of common/shared dialog .ui files not seen that should be 
seen to have complete coverage
 std::vector<OUString> completeCommonDialogList(const 
o3tl::sorted_vector<OUString>& entries);
 }
 
diff --git a/vcl/jsdialog/enabled.cxx b/vcl/jsdialog/enabled.cxx
index 85ee271930ba..c08f80c4e991 100644
--- a/vcl/jsdialog/enabled.cxx
+++ b/vcl/jsdialog/enabled.cxx
@@ -661,6 +661,26 @@ std::vector<OUString> completeWriterDialogList(const 
o3tl::sorted_vector<OUStrin
     return missing;
 }
 
+std::vector<OUString> completeWriterSidebarList(const 
o3tl::sorted_vector<OUString>& entries)
+{
+    std::vector<OUString> missing;
+    for (const auto& entry : SidebarList)
+    {
+        OUString sEntry(entry);
+        // Skip these ones, I don't think they can appear in practice
+        if (entry == u"modules/swriter/ui/managechangessidebar.ui" ||
+            entry == u"modules/swriter/ui/pagefooterpanel.ui" ||
+            entry == u"modules/swriter/ui/pageheaderpanel.ui" ||
+            entry == u"modules/swriter/ui/pagestylespanel.ui" ||
+            entry == u"modules/swriter/ui/sidebarstylepresets.ui" ||
+            entry == u"modules/swriter/ui/sidebartheme.ui")
+            continue;
+        else if (sEntry.startsWith("modules/swriter/") && 
!entries.contains(sEntry))
+            missing.push_back(sEntry);
+    }
+    return missing;
+}
+
 std::vector<OUString> completeCommonDialogList(const 
o3tl::sorted_vector<OUString>& entries)
 {
     std::vector<OUString> missing;
diff --git a/vcl/source/window/builder.cxx b/vcl/source/window/builder.cxx
index 78e686eea893..fa174f38eb61 100644
--- a/vcl/source/window/builder.cxx
+++ b/vcl/source/window/builder.cxx
@@ -215,6 +215,15 @@ void Application::UICoverageReport(tools::JsonWriter& 
rJson)
             rJson.putSimpleValue(entry);
     }
 
+    std::vector<OUString> missingWriterSidebarUIs = 
jsdialog::completeWriterSidebarList(entries);
+    rJson.put("CompleteWriterSidebarCoverage", 
missingWriterSidebarUIs.empty());
+    if (!missingWriterSidebarUIs.empty())
+    {
+        auto childrenNode = rJson.startArray("MissingWriterSidebarCoverage");
+        for (const auto& entry : missingWriterSidebarUIs)
+            rJson.putSimpleValue(entry);
+    }
+
     std::vector<OUString> missingCommonDialogUIs = 
jsdialog::completeCommonDialogList(entries);
     rJson.put("CompleteCommonDialogCoverage", missingCommonDialogUIs.empty());
     if (!missingCommonDialogUIs.empty())
commit fea4740379a88ab64380d7d4d569f4a6d18af6ca
Author:     Caolán McNamara <[email protected]>
AuthorDate: Thu Jan 22 13:06:47 2026 +0000
Commit:     Caolán McNamara <[email protected]>
CommitDate: Tue Feb 24 09:20:49 2026 +0100

    cid#1680358 Dereference before null check
    
    Change-Id: Ibf1d4937dca8783f27898af524ed154399b5069a
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/197816
    Tested-by: Jenkins CollaboraOffice <[email protected]>
    Reviewed-by: Miklos Vajna <[email protected]>
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/200100
    Reviewed-by: Caolán McNamara <[email protected]>

diff --git a/sd/source/ui/view/viewshe3.cxx b/sd/source/ui/view/viewshe3.cxx
index 6c7cd1f06d0d..da990a1ea057 100644
--- a/sd/source/ui/view/viewshe3.cxx
+++ b/sd/source/ui/view/viewshe3.cxx
@@ -164,7 +164,7 @@ SdPage* ViewShell::CreateOrDuplicatePage (
     SdPage* pPage,
     const sal_Int32 nInsertPosition)
 {
-    if (pPage->IsCanvasPage())
+    if (pPage && pPage->IsCanvasPage())
         return nullptr;
     sal_uInt16 nSId = rRequest.GetSlot();
     SdDrawDocument* pDocument = GetDoc();

Reply via email to