[Libreoffice-commits] core.git: Branch 'feature/window-iter' - 51 commits - bin/gla11y bin/lo-all-static-libs comphelper/source compilerplugins/clang configure.ac cui/source cui/uiconfig dbaccess/inc desktop/source editeng/source external/cppunit framework/source include/editeng include/osl include/postmac.h include/premac.h include/sfx2 include/svl include/svx include/toolkit include/tools include/vcl ios/source lotuswordpro/source odk/examples oox/source reportdesign/source sal/osl sal/util schema/mathml2 sc/inc sc/qa sc/source sc/uiconfig sdext/source sd/inc sd/source setup_native/Library_inst_msu_msi.mk setup_native/Library_instooofiltmsi.mk setup_native/Library_qslnkmsi.mk setup_native/Library_reg4allmsdoc.mk setup_native/Library_regactivex.mk setup_native/Library_sdqsmsi.mk setup_native/Library_sellangmsi.mk setup_native/Library_shlxtmsi.mk setup_native/Library_sn_tools.mk setup_native/source sfx2/source slideshow/source solenv/doc solenv/inc solenv/sanitizers starmath/source svl/source svx /inc svx/source sw/inc sw/PythonTest_sw_python.mk sw/qa sw/source sw/uiconfig toolkit/qa toolkit/source uitest/libreoffice uitest/uitest vcl/CustomTarget_qt5_moc.mk vcl/inc vcl/Library_vclplug_qt5.mk vcl/qt5 vcl/README.scheduler vcl/source vcl/uiconfig vcl/unx wizards/com writerfilter/source xmlsecurity/source
Libreoffice Gerrit user
logerrit at kemper.freedesktop.org
Fri Sep 28 23:50:15 UTC 2018
Rebased ref, commits from common ancestor:
commit 359a32c8e00b6a3e913a63864e60485f3068cc28
Author: Jan-Marek Glogowski <glogow at fbihome.de>
AuthorDate: Fri Sep 28 23:17:03 2018 +0000
Commit: Jan-Marek Glogowski <glogow at fbihome.de>
CommitDate: Sat Sep 29 01:25:49 2018 +0200
Window Iterator without parent vector
diff --git a/vcl/source/window/dlgctrl.cxx b/vcl/source/window/dlgctrl.cxx
index 81f1d128774d..674c8ac01261 100644
--- a/vcl/source/window/dlgctrl.cxx
+++ b/vcl/source/window/dlgctrl.cxx
@@ -111,7 +111,7 @@ class WindowIterator
const value_type m_pParent, m_pRealParent, m_pWindow;
const bool m_bTestEnabled;
value_type m_pCurrentWindow;
- std::vector<value_type> m_aWindowStack;
+ value_type m_pCurrentParent;
bool m_bCurrentWindowMayHaveChildren;
bool m_bIsTabControl;
@@ -127,7 +127,7 @@ public:
, m_pWindow(pWindow)
, m_bTestEnabled(bEnabled)
, m_pCurrentWindow(m_pRealParent)
- , m_aWindowStack({nullptr})
+ , m_pCurrentParent(nullptr)
, m_bCurrentWindowMayHaveChildren(true)
, m_bIsTabControl(false)
{
@@ -178,16 +178,15 @@ public:
#ifdef DUMP_ITER
SAL_DEBUG("!window " << WT(pNextImplWindow));
#endif
+ if (pNextWindow == m_pRealParent)
+ break;
+
vcl::Window* pParent = nullptr;
while (true)
{
assert(!pWindow);
- if (nullptr != pParent)
- m_aWindowStack.pop_back();
- pParent = m_aWindowStack.back();
- if (nullptr == pParent)
- break;
+ pParent = getNonLayoutParent(pNextWindow)->GetWindow(GetWindowType::Border);
vcl::Window* pImplParent = pParent->ImplGetWindow();
if (pImplParent->GetType() == WindowType::TABCONTROL)
@@ -204,7 +203,11 @@ public:
SAL_DEBUG("nextLogicalChildOfParent " << pImplParent << " " << pNextWindow << " >> " << WT(pWindow));
#endif
if (!pWindow)
+ {
+ if (pImplParent == m_pRealParent)
+ break;
pNextWindow = pParent;
+ }
else
{
pNextImplWindow = pWindow->ImplGetWindow();
@@ -213,6 +216,7 @@ public:
else
{
pNextWindow = pWindow;
+ m_pCurrentParent = pImplParent;
break;
}
}
@@ -225,7 +229,7 @@ public:
}
else if (m_bCurrentWindowMayHaveChildren || m_bIsTabControl)
{
- m_aWindowStack.push_back(pNextWindow);
+ m_pCurrentParent = pNextWindow;
pNextWindow = pWindow;
pNextImplWindow = pNextWindow->ImplGetWindow();
}
@@ -249,9 +253,9 @@ public:
m_bIsTabControl = false;
}
- pWindow = nextLogicalChildOfParent(m_aWindowStack.back(), pNextWindow);
+ pWindow = nextLogicalChildOfParent(m_pCurrentParent, pNextWindow);
#ifdef DUMP_ITER
- SAL_DEBUG("nextLogicalChildOfParent " << m_aWindowStack.back() << " " << pNextWindow << " => " << WT(pWindow));
+ SAL_DEBUG("nextLogicalChildOfParent " << m_pCurrentParent << " " << pNextWindow << " => " << WT(pWindow));
#endif
if (pWindow)
{
commit 1331ccdf1d9267aa6dfb3a01033173a48be6289f
Author: Jan-Marek Glogowski <glogow at fbihome.de>
AuthorDate: Wed Sep 26 17:33:22 2018 +0200
Commit: Jan-Marek Glogowski <glogow at fbihome.de>
CommitDate: Sat Sep 29 01:25:48 2018 +0200
Debug infrastructure
Change-Id: Idd09c131240c1372a40c36feb07094e28c2a1581
diff --git a/vcl/source/window/dlgctrl.cxx b/vcl/source/window/dlgctrl.cxx
index dcb6cde57926..81f1d128774d 100644
--- a/vcl/source/window/dlgctrl.cxx
+++ b/vcl/source/window/dlgctrl.cxx
@@ -35,6 +35,17 @@
#include <com/sun/star/i18n/XCharacterClassification.hpp>
+// #define ITER_ONLY
+// #define DUMP_ITER
+// #define DUMP_SUBCHILD
+// #define DUMP_IMPL_FIND_DLGCTRL
+// #define DUMP_IMPL_DLGCTL
+// #define DUMP_UPDATE_DEF_BUTTON
+
+#if (defined(DUMP_ITER) || defined(DUMP_SUBCHILD) || defined(DUMP_IMPL_FIND_DLGCTRL))
+#define WT(a) " " << a << " (" << (a ? a->ImplGetWindow() : nullptr) << " " << (a ? (int) a->GetType() - 0x130 : 0) << ")"
+#endif
+
using namespace ::com::sun::star;
static bool ImplHasIndirectTabParent( vcl::Window* pWindow )
@@ -120,13 +131,22 @@ public:
, m_bCurrentWindowMayHaveChildren(true)
, m_bIsTabControl(false)
{
+#ifdef DUMP_ITER
+ SAL_DEBUG("Iter construct start " << m_pRealParent << " " << pWindow << " " << m_bTestEnabled);
+#endif
if (m_pRealParent->GetType() == WindowType::TABCONTROL)
m_bIsTabControl = true;
++(*this);
+#ifdef DUMP_ITER
+ SAL_DEBUG("Iter construct end " << m_bIsTabControl);
+#endif
}
WindowIterator& operator++()
{
+#ifdef DUMP_ITER
+ SAL_DEBUG("++ In");
+#endif
vcl::Window* pWindow = nullptr;
vcl::Window* pNextWindow = m_pCurrentWindow;
vcl::Window* pNextImplWindow = pNextWindow ? pNextWindow->ImplGetWindow() : nullptr;
@@ -138,13 +158,26 @@ public:
// check if pNextWindow has children => not in dispose
pWindow = firstLogicalChildOfParent(pNextWindow);
if (pWindow)
+ {
pWindow = ImplGetCurTabWindow(pNextImplWindow);
+#ifdef DUMP_ITER
+ SAL_DEBUG("ImplGetTabWindow " << pNextImplWindow << " => " << WT(pWindow));
+#endif
+ }
}
else if (m_bCurrentWindowMayHaveChildren)
+ {
pWindow = firstLogicalChildOfParent(pNextImplWindow);
+#ifdef DUMP_ITER
+ SAL_DEBUG("firstLogicalChildOfParent " << pNextImplWindow << " => " << WT(pWindow));
+#endif
+ }
if (!pWindow)
{
+#ifdef DUMP_ITER
+ SAL_DEBUG("!window " << WT(pNextImplWindow));
+#endif
vcl::Window* pParent = nullptr;
while (true)
{
@@ -159,11 +192,17 @@ public:
if (pImplParent->GetType() == WindowType::TABCONTROL)
{
+#ifdef DUMP_ITER
+ SAL_DEBUG("IsTabcontrol " << WT(pImplParent));
+#endif
pNextWindow = pParent;
continue;
}
pWindow = nextLogicalChildOfParent(pImplParent, pNextWindow);
+#ifdef DUMP_ITER
+ SAL_DEBUG("nextLogicalChildOfParent " << pImplParent << " " << pNextWindow << " >> " << WT(pWindow));
+#endif
if (!pWindow)
pNextWindow = pParent;
else
@@ -178,6 +217,9 @@ public:
}
}
}
+#ifdef DUMP_ITER
+ SAL_DEBUG("!window end " << pWindow);
+#endif
if (!pWindow)
break;
}
@@ -193,6 +235,9 @@ public:
{
m_bIsTabControl = (pImplWindow->GetType() == WindowType::TABCONTROL);
m_bCurrentWindowMayHaveChildren = pImplWindow->GetStyle() & (WB_DIALOGCONTROL | WB_CHILDDLGCTRL);
+#ifdef DUMP_ITER
+ SAL_DEBUG("isVisibleInLayout " << pImplWindow << " " << m_bCurrentWindowMayHaveChildren << " " << m_bIsTabControl);
+#endif
if (m_bCurrentWindowMayHaveChildren && !m_bIsTabControl)
continue;
else
@@ -205,6 +250,9 @@ public:
}
pWindow = nextLogicalChildOfParent(m_aWindowStack.back(), pNextWindow);
+#ifdef DUMP_ITER
+ SAL_DEBUG("nextLogicalChildOfParent " << m_aWindowStack.back() << " " << pNextWindow << " => " << WT(pWindow));
+#endif
if (pWindow)
{
pNextWindow = pWindow;
@@ -212,6 +260,9 @@ public:
}
}
+#ifdef DUMP_ITER
+ SAL_DEBUG("++ >> " << WT(pWindow));
+#endif
m_pCurrentWindow = pWindow;
return *this;
}
@@ -242,6 +293,10 @@ static vcl::Window* ImplGetSubChildWindow( vcl::Window* pParent, sal_uInt16 n, s
vcl::Window* pFoundWindow = nullptr;
vcl::Window* pWindow = firstLogicalChildOfParent(pParent);
+
+#ifdef DUMP_SUBCHILD
+ SAL_DEBUG(nIndex << " firstLogicalChildOfParent " << pParent << " => " << WT(pWindow));
+#endif
vcl::Window* pNextWindow = pWindow;
// process just the current page of a tab control
@@ -262,7 +317,12 @@ static vcl::Window* ImplGetSubChildWindow( vcl::Window* pParent, sal_uInt16 n, s
if (pWindow->GetType() == WindowType::TABCONTROL)
{
if (n == nIndex)
+ {
+#ifdef DUMP_SUBCHILD
+ SAL_DEBUG(nIndex << " << 1. " << WT(pWindow));
+#endif
return pWindow;
+ }
++nIndex;
}
if (pWindow->GetStyle() & (WB_DIALOGCONTROL | WB_CHILDDLGCTRL))
@@ -271,15 +331,26 @@ static vcl::Window* ImplGetSubChildWindow( vcl::Window* pParent, sal_uInt16 n, s
pFoundWindow = pWindow;
if (n == nIndex)
+ {
+#ifdef DUMP_SUBCHILD
+ SAL_DEBUG(nIndex << " << 2. " << WT(pFoundWindow));
+#endif
return pFoundWindow;
+ }
++nIndex;
}
pWindow = nextLogicalChildOfParent(pParent, pNextWindow);
+#ifdef DUMP_SUBCHILD
+ SAL_DEBUG(nIndex << " nextLogicalChildOfParent " << pParent << " " << pNextWindow << " => " << WT(pWindow));
+#endif
pNextWindow = pWindow;
}
--nIndex;
+#ifdef DUMP_SUBCHILD
+ SAL_DEBUG(nIndex << " << 3. " << WT(pFoundWindow));
+#endif
assert(!pFoundWindow || (pFoundWindow == pFoundWindow->ImplGetWindow()));
return pFoundWindow;
}
@@ -447,6 +518,14 @@ vcl::Window* ImplFindDlgCtrlWindow( vcl::Window* pParent, vcl::Window* pWindow,
sal_uInt16 nSecondFormStart = 0;
sal_uInt16 nFormEnd;
+#ifdef DUMP_IMPL_FIND_DLGCTRL
+ SAL_DEBUG("ImplFindDlgCtrlWindow " << pParent << " " << pWindow);
+#define DUMP_WINDOW(prefix, window) \
+ do { if (window) SAL_DEBUG(prefix << " " << i << WT(window)); } while (false)
+#else
+#define DUMP_WINDOW(a, b)
+#endif
+
// find focus window in the child list
vcl::Window* pFirstChildWindow = pSWindow = ImplGetChildWindow( pParent, 0, i, false );
@@ -463,6 +542,9 @@ vcl::Window* ImplFindDlgCtrlWindow( vcl::Window* pParent, vcl::Window* pWindow,
// SecondWindow for composite controls like ComboBoxes and arrays
if ( pSWindow->ImplIsWindowOrChild( pWindow ) )
{
+#ifdef DUMP_IMPL_FIND_DLGCTRL
+ SAL_DEBUG("SecondWindow");
+#endif
pSecondWindow = pSWindow;
nSecond_i = i;
nSecondFormStart = nFormStart;
@@ -473,8 +555,11 @@ vcl::Window* ImplFindDlgCtrlWindow( vcl::Window* pParent, vcl::Window* pWindow,
pSWindow = ImplGetNextWindow( pParent, i, i, false );
if ( !i )
pSWindow = nullptr;
+ DUMP_WINDOW("1", pSWindow);
}
+ DUMP_WINDOW("2", pSWindow);
+
if ( !pSWindow )
{
// Window not found; we cannot handle it
@@ -505,6 +590,8 @@ vcl::Window* ImplFindDlgCtrlWindow( vcl::Window* pParent, vcl::Window* pWindow,
&& pTempWindow->ImplGetWindow()->IsDialogControlStart() ) )
break;
+ DUMP_WINDOW("3", pTempWindow);
+
if ( pTempWindow && pTempWindow == pFirstChildWindow )
{
// It is possible to go through the begin of hierarchy once
@@ -732,6 +819,10 @@ bool Window::ImplDlgCtrl( const KeyEvent& rKEvt, bool bKeyInput )
vcl::Window* pTempWindow;
vcl::Window* pButtonWindow;
sal_uInt16 i;
+#ifndef ITER_ONLY
+ sal_uInt16 iButton;
+ sal_uInt16 iButtonStart;
+#endif
sal_uInt16 iTemp;
sal_uInt16 nIndex;
sal_uInt16 nFormStart;
@@ -763,15 +854,43 @@ bool Window::ImplDlgCtrl( const KeyEvent& rKEvt, bool bKeyInput )
pButtonWindow = nullptr;
+#ifdef DUMP_IMPL_DLGCTL
+ SAL_DEBUG("Window::ImplDlgCtrl");
+#endif
if ( nKeyCode == KEY_RETURN )
{
// search first for a DefPushButton
WindowIterator aIter(this, pFocusWindow, true);
+#ifdef ITER_ONLY
for (; *aIter; ++aIter)
if ( (aIter->GetStyle() & WB_DEFBUTTON) &&
aIter->mpWindowImpl->mbPushButton )
break;
pButtonWindow = *aIter;
+#else
+ pButtonWindow = ImplGetChildWindow(this, nFormStart, iButton, true);
+ iButtonStart = iButton;
+#ifdef DUMP_IMPL_DLGCTL
+ SAL_DEBUG("iter start: " << nFormStart << " " << iButton << " " << this << " " << pFocusWindow);
+ SAL_DEBUG("old: " << pButtonWindow << " new: " << *aIter);
+#endif
+ assert(pButtonWindow == *aIter);
+ while ( pButtonWindow )
+ {
+ if ( (pButtonWindow->GetStyle() & WB_DEFBUTTON) &&
+ pButtonWindow->mpWindowImpl->mbPushButton )
+ break;
+
+ pButtonWindow = ImplGetNextWindow( this, iButton, iButton, true );
+ if ( (iButton <= iButtonStart) || (iButton > nFormEnd) )
+ pButtonWindow = nullptr;
+ ++aIter;
+#ifdef DUMP_IMPL_DLGCTL
+ SAL_DEBUG("old: " << pButtonWindow << " new: " << *aIter);
+#endif
+ assert(pButtonWindow == *aIter);
+ }
+#endif // !ITER_ONLY
if ( bKeyInput && !pButtonWindow && (nDlgCtrlFlags & DialogControlFlags::Return) )
{
@@ -837,10 +956,34 @@ bool Window::ImplDlgCtrl( const KeyEvent& rKEvt, bool bKeyInput )
{
// search first for a CancelButton
WindowIterator aIter(this, pFocusWindow, true);
+#ifdef ITER_ONLY
for (; *aIter; ++aIter)
if (aIter->GetType() == WindowType::CANCELBUTTON)
break;
pButtonWindow = *aIter;
+#else
+ pButtonWindow = ImplGetChildWindow(this, nFormStart, iButton, true);
+ iButtonStart = iButton;
+#ifdef DUMP_IMPL_DLGCTL
+ SAL_DEBUG("iter start: " << nFormStart << " " << iButton << " " << this << " " << pFocusWindow);
+ SAL_DEBUG("old: " << pButtonWindow << " new: " << *aIter);
+#endif
+ assert(pButtonWindow == *aIter);
+ while ( pButtonWindow )
+ {
+ if ( pButtonWindow->GetType() == WindowType::CANCELBUTTON )
+ break;
+
+ pButtonWindow = ImplGetNextWindow( this, iButton, iButton, true );
+ if ( (iButton <= iButtonStart) || (iButton > nFormEnd) )
+ pButtonWindow = nullptr;
+ ++aIter;
+#ifdef DUMP_IMPL_DLGCTL
+ SAL_DEBUG("old: " << pButtonWindow << " new: " << *aIter);
+#endif
+ assert(pButtonWindow == *aIter);
+ }
+#endif // !ITER_ONLY
if ( bKeyInput && mpWindowImpl->mpDlgCtrlDownWindow )
{
@@ -870,7 +1013,13 @@ bool Window::ImplDlgCtrl( const KeyEvent& rKEvt, bool bKeyInput )
// search group
vcl::Window* pFormularFirstWindow = nullptr;
vcl::Window* pLastFormularFirstWindow = nullptr;
+ WindowIterator aIter(this, nullptr, false);
pTempWindow = ImplGetChildWindow( this, 0, iTemp, false );
+#ifdef DUMP_IMPL_DLGCTL
+ SAL_DEBUG("iter start: " << iTemp << " " << i << " " << this);
+ SAL_DEBUG("old: " << pTempWindow << " new: " << *aIter);
+#endif
+ assert(pTempWindow == *aIter);
vcl::Window* pPrevFirstFormularFirstWindow = nullptr;
vcl::Window* pFirstFormularFirstWindow = pTempWindow;
while ( pTempWindow )
@@ -893,9 +1042,14 @@ bool Window::ImplDlgCtrl( const KeyEvent& rKEvt, bool bKeyInput )
pLastFormularFirstWindow = pTempWindow;
}
+ ++aIter;
pTempWindow = ImplGetNextWindow( this, iTemp, iTemp, false );
if ( !iTemp )
pTempWindow = nullptr;
+#ifdef DUMP_IMPL_DLGCTL
+ SAL_DEBUG("old: " << pTempWindow << " new: " << *aIter);
+#endif
+ assert(pTempWindow == *aIter);
}
if ( bFormular )
@@ -1141,7 +1295,18 @@ static void ImplDlgCtrlUpdateDefButton( vcl::Window* pParent, vcl::Window* pFocu
nFormEnd = 0xFFFF;
}
+ WindowIterator aIter(pParent, pFocusWindow, false);
+#ifdef ITER_ONLY
+ pSWindow = *aIter;
+#else
pSWindow = ImplGetChildWindow( pParent, nFormStart, i, false );
+#endif
+#ifdef DUMP_UPDATE_DEF_BUTTON
+ SAL_DEBUG("ImplDlgCtrlUpdateDefButton");
+ SAL_DEBUG("iter start: " << nFormStart << " " << i << " " << pParent << " " << pFocusWindow << " " << pSWindow);
+ SAL_DEBUG("old: " << pSWindow << " new: " << *aIter);
+#endif
+ assert(pSWindow == *aIter);
while ( pSWindow )
{
if ( pSWindow->ImplIsPushButton() )
@@ -1155,9 +1320,18 @@ static void ImplDlgCtrlUpdateDefButton( vcl::Window* pParent, vcl::Window* pFocu
pNewDefButton = pPushButton;
}
+ ++aIter;
+#ifdef ITER_ONLY
+ pSWindow = *aIter;
+#else
pSWindow = ImplGetNextWindow( pParent, i, i, false );
if ( !i || (i > nFormEnd) )
pSWindow = nullptr;
+#endif
+#ifdef DUMP_UPDATE_DEF_BUTTON
+ SAL_DEBUG("old: " << pSWindow << " new: " << *aIter << " " << i);
+#endif
+ assert(pSWindow == *aIter);
}
if ( !bGetFocus )
commit 5a8aa2f18b16d65a8c92b28af3535b5d4c46dfcf
Author: Jan-Marek Glogowski <glogow at fbihome.de>
AuthorDate: Wed Sep 26 14:16:09 2018 +0200
Commit: Jan-Marek Glogowski <glogow at fbihome.de>
CommitDate: Sat Sep 29 01:25:47 2018 +0200
Initial vcl::Window iterator
Change-Id: I414d9eb3539d6a2a8844e24a7ef245fa99935f1b
diff --git a/vcl/source/window/dlgctrl.cxx b/vcl/source/window/dlgctrl.cxx
index 36dcf861c566..dcb6cde57926 100644
--- a/vcl/source/window/dlgctrl.cxx
+++ b/vcl/source/window/dlgctrl.cxx
@@ -92,6 +92,148 @@ static vcl::Window* ImplGetCurTabWindow(const vcl::Window* pWindow)
return nullptr;
}
+namespace {
+
+class WindowIterator
+ : public std::iterator<std::forward_iterator_tag, vcl::Window*>
+{
+ const value_type m_pParent, m_pRealParent, m_pWindow;
+ const bool m_bTestEnabled;
+ value_type m_pCurrentWindow;
+ std::vector<value_type> m_aWindowStack;
+ bool m_bCurrentWindowMayHaveChildren;
+ bool m_bIsTabControl;
+
+ inline bool IsEnabled(value_type pWindow)
+ {
+ return (!m_bTestEnabled || (isEnabledInLayout(pWindow) && pWindow->IsInputEnabled()));
+ }
+
+public:
+ explicit WindowIterator(value_type pParent, value_type pWindow, bool bEnabled)
+ : m_pParent(pParent)
+ , m_pRealParent(ImplGetTopParentOfTabHierarchy(pParent)->ImplGetWindow())
+ , m_pWindow(pWindow)
+ , m_bTestEnabled(bEnabled)
+ , m_pCurrentWindow(m_pRealParent)
+ , m_aWindowStack({nullptr})
+ , m_bCurrentWindowMayHaveChildren(true)
+ , m_bIsTabControl(false)
+ {
+ if (m_pRealParent->GetType() == WindowType::TABCONTROL)
+ m_bIsTabControl = true;
+ ++(*this);
+ }
+
+ WindowIterator& operator++()
+ {
+ vcl::Window* pWindow = nullptr;
+ vcl::Window* pNextWindow = m_pCurrentWindow;
+ vcl::Window* pNextImplWindow = pNextWindow ? pNextWindow->ImplGetWindow() : nullptr;
+
+ while (true)
+ {
+ if (m_bIsTabControl)
+ {
+ // check if pNextWindow has children => not in dispose
+ pWindow = firstLogicalChildOfParent(pNextWindow);
+ if (pWindow)
+ pWindow = ImplGetCurTabWindow(pNextImplWindow);
+ }
+ else if (m_bCurrentWindowMayHaveChildren)
+ pWindow = firstLogicalChildOfParent(pNextImplWindow);
+
+ if (!pWindow)
+ {
+ vcl::Window* pParent = nullptr;
+ while (true)
+ {
+ assert(!pWindow);
+
+ if (nullptr != pParent)
+ m_aWindowStack.pop_back();
+ pParent = m_aWindowStack.back();
+ if (nullptr == pParent)
+ break;
+ vcl::Window* pImplParent = pParent->ImplGetWindow();
+
+ if (pImplParent->GetType() == WindowType::TABCONTROL)
+ {
+ pNextWindow = pParent;
+ continue;
+ }
+
+ pWindow = nextLogicalChildOfParent(pImplParent, pNextWindow);
+ if (!pWindow)
+ pNextWindow = pParent;
+ else
+ {
+ pNextImplWindow = pWindow->ImplGetWindow();
+ if (!ImplHasIndirectTabParent(pWindow) && pNextImplWindow->IsDialogControlStart())
+ pWindow = nullptr;
+ else
+ {
+ pNextWindow = pWindow;
+ break;
+ }
+ }
+ }
+ if (!pWindow)
+ break;
+ }
+ else if (m_bCurrentWindowMayHaveChildren || m_bIsTabControl)
+ {
+ m_aWindowStack.push_back(pNextWindow);
+ pNextWindow = pWindow;
+ pNextImplWindow = pNextWindow->ImplGetWindow();
+ }
+
+ vcl::Window* pImplWindow = pWindow->ImplGetWindow();
+ if (isVisibleInLayout(pImplWindow) && IsEnabled(pImplWindow))
+ {
+ m_bIsTabControl = (pImplWindow->GetType() == WindowType::TABCONTROL);
+ m_bCurrentWindowMayHaveChildren = pImplWindow->GetStyle() & (WB_DIALOGCONTROL | WB_CHILDDLGCTRL);
+ if (m_bCurrentWindowMayHaveChildren && !m_bIsTabControl)
+ continue;
+ else
+ break;
+ }
+ else
+ {
+ m_bCurrentWindowMayHaveChildren = false;
+ m_bIsTabControl = false;
+ }
+
+ pWindow = nextLogicalChildOfParent(m_aWindowStack.back(), pNextWindow);
+ if (pWindow)
+ {
+ pNextWindow = pWindow;
+ pNextImplWindow = pNextWindow->ImplGetWindow();
+ }
+ }
+
+ m_pCurrentWindow = pWindow;
+ return *this;
+ }
+ WindowIterator operator++(int)
+ { WindowIterator retval = *this; ++(*this); return retval; }
+
+ bool operator==(WindowIterator other) const { return m_pCurrentWindow == other.m_pCurrentWindow; }
+ bool operator!=(WindowIterator other) const { return m_pCurrentWindow != other.m_pCurrentWindow; }
+ value_type operator*() const { return m_pCurrentWindow ? m_pCurrentWindow->ImplGetWindow() : nullptr; }
+ value_type operator->() const { return this->operator*(); }
+ WindowIterator begin()
+ { return WindowIterator(m_pParent, m_pWindow, m_bTestEnabled); }
+ WindowIterator end()
+ {
+ WindowIterator aEnd(m_pParent, m_pWindow, m_bTestEnabled);
+ aEnd.m_pCurrentWindow = nullptr;
+ return aEnd;
+ }
+};
+
+};
+
static vcl::Window* ImplGetSubChildWindow( vcl::Window* pParent, sal_uInt16 n, sal_uInt16& nIndex )
{
// ignore border window
@@ -590,8 +732,6 @@ bool Window::ImplDlgCtrl( const KeyEvent& rKEvt, bool bKeyInput )
vcl::Window* pTempWindow;
vcl::Window* pButtonWindow;
sal_uInt16 i;
- sal_uInt16 iButton;
- sal_uInt16 iButtonStart;
sal_uInt16 iTemp;
sal_uInt16 nIndex;
sal_uInt16 nFormStart;
@@ -625,19 +765,13 @@ bool Window::ImplDlgCtrl( const KeyEvent& rKEvt, bool bKeyInput )
if ( nKeyCode == KEY_RETURN )
{
- // search first for a DefPushButton/CancelButton
- pButtonWindow = ImplGetChildWindow( this, nFormStart, iButton, true );
- iButtonStart = iButton;
- while ( pButtonWindow )
- {
- if ( (pButtonWindow->GetStyle() & WB_DEFBUTTON) &&
- pButtonWindow->mpWindowImpl->mbPushButton )
+ // search first for a DefPushButton
+ WindowIterator aIter(this, pFocusWindow, true);
+ for (; *aIter; ++aIter)
+ if ( (aIter->GetStyle() & WB_DEFBUTTON) &&
+ aIter->mpWindowImpl->mbPushButton )
break;
-
- pButtonWindow = ImplGetNextWindow( this, iButton, iButton, true );
- if ( (iButton <= iButtonStart) || (iButton > nFormEnd) )
- pButtonWindow = nullptr;
- }
+ pButtonWindow = *aIter;
if ( bKeyInput && !pButtonWindow && (nDlgCtrlFlags & DialogControlFlags::Return) )
{
@@ -701,18 +835,12 @@ bool Window::ImplDlgCtrl( const KeyEvent& rKEvt, bool bKeyInput )
}
else if ( nKeyCode == KEY_ESCAPE )
{
- // search first for a DefPushButton/CancelButton
- pButtonWindow = ImplGetChildWindow( this, nFormStart, iButton, true );
- iButtonStart = iButton;
- while ( pButtonWindow )
- {
- if ( pButtonWindow->GetType() == WindowType::CANCELBUTTON )
+ // search first for a CancelButton
+ WindowIterator aIter(this, pFocusWindow, true);
+ for (; *aIter; ++aIter)
+ if (aIter->GetType() == WindowType::CANCELBUTTON)
break;
-
- pButtonWindow = ImplGetNextWindow( this, iButton, iButton, true );
- if ( (iButton <= iButtonStart) || (iButton > nFormEnd) )
- pButtonWindow = nullptr;
- }
+ pButtonWindow = *aIter;
if ( bKeyInput && mpWindowImpl->mpDlgCtrlDownWindow )
{
commit 0e75a2d4c9d7704f49d0600632cf92aed5b00734
Author: Jan-Marek Glogowski <glogow at fbihome.de>
AuthorDate: Wed Sep 26 14:09:59 2018 +0200
Commit: Jan-Marek Glogowski <glogow at fbihome.de>
CommitDate: Sat Sep 29 01:22:05 2018 +0200
Handle initial TabControl and border window
ImplGetSubChildWindow has special code to handle a TabControl and
its pages. If the function finds a TabControl as a child it'll
return its window and then recurse into the current page.
This currently breaks in the case where the initial parent is a
TabControl. where the function will walk all of the tab pages.
The function also ignores border windows, but not if the initial
parent is a border window.
This patch correctly handles both cases and as a bonus drops all
the special page handling during child iteration.
Change-Id: Ie8699dae8d08628b66b33e0704237b9e219874bc
diff --git a/include/vcl/layout.hxx b/include/vcl/layout.hxx
index 0f8818989268..22d494dfa6e2 100644
--- a/include/vcl/layout.hxx
+++ b/include/vcl/layout.hxx
@@ -769,6 +769,13 @@ public:
//of children
VCL_DLLPUBLIC vcl::Window* firstLogicalChildOfParent(const vcl::Window *pTopLevel);
+//Get last window of a pTopLevel window as
+//if any intermediate layout widgets didn't exist
+//i.e. acts like pChild = pChild->GetWindow(GetWindowType::LastChild);
+//in a flat hierarchy where dialogs only have one layer
+//of children
+VCL_DLLPUBLIC vcl::Window* lastLogicalChildOfParent(const vcl::Window *pTopLevel);
+
//Get next window after pChild of a pTopLevel window as
//if any intermediate layout widgets didn't exist
//i.e. acts like pChild = pChild->GetWindow(GetWindowType::Next);
diff --git a/vcl/source/window/dialog.cxx b/vcl/source/window/dialog.cxx
index 99b1cede0a8b..f3e977e42c63 100644
--- a/vcl/source/window/dialog.cxx
+++ b/vcl/source/window/dialog.cxx
@@ -186,6 +186,14 @@ vcl::Window * firstLogicalChildOfParent(const vcl::Window *pTopLevel)
return const_cast<vcl::Window *>(pChild);
}
+vcl::Window * lastLogicalChildOfParent(const vcl::Window *pTopLevel)
+{
+ const vcl::Window *pChild = pTopLevel->GetWindow(GetWindowType::LastChild);
+ if (pChild && isContainerWindow(*pChild))
+ pChild = prevLogicalChildOfParent(pTopLevel, pChild);
+ return const_cast<vcl::Window *>(pChild);
+}
+
void Accelerator::GenerateAutoMnemonicsOnHierarchy(vcl::Window* pWindow)
{
MnemonicGenerator aMnemonicGenerator;
diff --git a/vcl/source/window/dlgctrl.cxx b/vcl/source/window/dlgctrl.cxx
index 4479291b6f24..36dcf861c566 100644
--- a/vcl/source/window/dlgctrl.cxx
+++ b/vcl/source/window/dlgctrl.cxx
@@ -94,49 +94,51 @@ static vcl::Window* ImplGetCurTabWindow(const vcl::Window* pWindow)
static vcl::Window* ImplGetSubChildWindow( vcl::Window* pParent, sal_uInt16 n, sal_uInt16& nIndex )
{
- vcl::Window* pTabPage = nullptr;
- vcl::Window* pFoundWindow = nullptr;
+ // ignore border window
+ pParent = pParent->ImplGetWindow();
+ assert(pParent == pParent->ImplGetWindow());
- vcl::Window* pWindow = firstLogicalChildOfParent(pParent);
- vcl::Window* pNextWindow = pWindow;
- while ( pWindow )
+ vcl::Window* pFoundWindow = nullptr;
+ vcl::Window* pWindow = firstLogicalChildOfParent(pParent);
+ vcl::Window* pNextWindow = pWindow;
+
+ // process just the current page of a tab control
+ if (pWindow && pParent->GetType() == WindowType::TABCONTROL)
+ {
+ pWindow = ImplGetCurTabWindow(pParent);
+ pNextWindow = lastLogicalChildOfParent(pParent);
+ }
+
+ while (pWindow)
{
pWindow = pWindow->ImplGetWindow();
// skip invisible and disabled windows
- if ( pTabPage || isVisibleInLayout(pWindow) )
+ if (isVisibleInLayout(pWindow))
{
- // if the last control was a TabControl, take its TabPage
- if ( pTabPage )
+ // return the TabControl itself, before handling its page
+ if (pWindow->GetType() == WindowType::TABCONTROL)
{
- pFoundWindow = ImplGetSubChildWindow( pTabPage, n, nIndex );
- pTabPage = nullptr;
+ if (n == nIndex)
+ return pWindow;
+ ++nIndex;
}
+ if (pWindow->GetStyle() & (WB_DIALOGCONTROL | WB_CHILDDLGCTRL))
+ pFoundWindow = ImplGetSubChildWindow(pWindow, n, nIndex);
else
- {
pFoundWindow = pWindow;
- // for a TabControl, remember the current TabPage for later use
- if ( pWindow->GetType() == WindowType::TABCONTROL )
- pTabPage = ImplGetCurTabWindow(pWindow);
- else if (pWindow->GetStyle() & (WB_DIALOGCONTROL | WB_CHILDDLGCTRL))
- pFoundWindow = ImplGetSubChildWindow( pWindow, n, nIndex );
- }
- if ( n == nIndex )
+ if (n == nIndex)
return pFoundWindow;
- nIndex++;
+ ++nIndex;
}
- if ( pTabPage )
- pWindow = pTabPage;
- else
- {
- pWindow = nextLogicalChildOfParent(pParent, pNextWindow);
- pNextWindow = pWindow;
- }
+ pWindow = nextLogicalChildOfParent(pParent, pNextWindow);
+ pNextWindow = pWindow;
}
- nIndex--;
+ --nIndex;
+ assert(!pFoundWindow || (pFoundWindow == pFoundWindow->ImplGetWindow()));
return pFoundWindow;
}
commit 43ace67cee8d9429ae1f9437eb0b51238f3dbda7
Author: Jan-Marek Glogowski <glogow at fbihome.de>
AuthorDate: Fri Sep 28 20:58:32 2018 +0000
Commit: Jan-Marek Glogowski <glogow at fbihome.de>
CommitDate: Fri Sep 28 23:05:44 2018 +0200
Add number comments to WindowType
Change-Id: Icc8bddb00a26f3844d8b264acd5535951ac64f1c
diff --git a/include/tools/wintypes.hxx b/include/tools/wintypes.hxx
index 9f5229806e3f..baa8119e785d 100644
--- a/include/tools/wintypes.hxx
+++ b/include/tools/wintypes.hxx
@@ -26,8 +26,8 @@
enum class WindowType : sal_uInt16
{
NONE = 0,
- FIRST = 0x0130,
- MESSBOX = FIRST,
+ FIRST = 0x0130, // 304
+ MESSBOX = FIRST, // 0
INFOBOX ,
WARNINGBOX ,
ERRORBOX ,
@@ -37,7 +37,7 @@ enum class WindowType : sal_uInt16
CONTAINER ,
FLOATINGWINDOW ,
DIALOG ,
- MODELESSDIALOG ,
+ MODELESSDIALOG , // 10 (314)
MODALDIALOG ,
CONTROL ,
PUSHBUTTON ,
@@ -47,7 +47,7 @@ enum class WindowType : sal_uInt16
IMAGEBUTTON ,
MENUBUTTON ,
MOREBUTTON ,
- SPINBUTTON ,
+ SPINBUTTON , // 20 (324)
RADIOBUTTON ,
CHECKBOX ,
TRISTATEBOX ,
@@ -57,7 +57,7 @@ enum class WindowType : sal_uInt16
LISTBOX ,
MULTILISTBOX ,
FIXEDTEXT ,
- FIXEDLINE ,
+ FIXEDLINE , // 30 (334)
FIXEDBITMAP ,
FIXEDIMAGE ,
GROUPBOX ,
@@ -67,7 +67,7 @@ enum class WindowType : sal_uInt16
SPLITWINDOW ,
SPINFIELD ,
PATTERNFIELD ,
- NUMERICFIELD ,
+ NUMERICFIELD , // 40 (344)
METRICFIELD ,
CURRENCYFIELD ,
DATEFIELD ,
@@ -77,7 +77,7 @@ enum class WindowType : sal_uInt16
METRICBOX ,
CURRENCYBOX ,
DATEBOX ,
- TIMEBOX ,
+ TIMEBOX , // 50 (354)
LONGCURRENCYFIELD ,
LONGCURRENCYBOX ,
SCROLLWINDOW ,
@@ -87,7 +87,7 @@ enum class WindowType : sal_uInt16
TABPAGE ,
TABCONTROL ,
TABDIALOG ,
- BORDERWINDOW ,
+ BORDERWINDOW , // 60 (364)
BUTTONDIALOG ,
SYSTEMCHILDWINDOW ,
SLIDER ,
@@ -97,7 +97,7 @@ enum class WindowType : sal_uInt16
INTROWINDOW ,
LISTBOXWINDOW ,
DOCKINGAREA ,
- RULER ,
+ RULER , // 70 (374)
CALCINPUTLINE ,
LAST = CALCINPUTLINE,
// only used in vclxtoolkit.cxx
@@ -163,6 +163,7 @@ WinBits const WB_AUTOHSCROLL = SAL_CONST_INT64(0x10000000);
WinBits const WB_DOCKABLE = SAL_CONST_INT64(0x20000000);
WinBits const WB_AUTOVSCROLL = SAL_CONST_INT64(0x40000000);
WinBits const WB_HYPHENATION = SAL_CONST_INT64(0x800000000) | WB_WORDBREAK;
+// #i93011# style bit for some child windows, that want their children checked for accelerators
WinBits const WB_CHILDDLGCTRL = SAL_CONST_INT64(0x100000000000);
// system floating window
commit 458c9af2e5002893414c6fce53dd8bd558c4c7d0
Author: Jan-Marek Glogowski <glogow at fbihome.de>
AuthorDate: Thu Sep 27 17:58:55 2018 +0200
Commit: Jan-Marek Glogowski <glogow at fbihome.de>
CommitDate: Fri Sep 28 11:05:46 2018 +0200
gla11y: check element visibility
Add warnings for different visibility settings in the "label-for"
and "labelled-by" elements.
Sine LO doesn't support multiple annotations per accessibility
element, we have to switch them manually, if we change the
visibility of one element of a pair.
Change-Id: I9b3d941248b804b8435591536277677e99b77340
Reviewed-on: https://gerrit.libreoffice.org/61050
Tested-by: Jenkins
Reviewed-by: Jan-Marek Glogowski <glogow at fbihome.de>
diff --git a/bin/gla11y b/bin/gla11y
index f18e2f48c960..b09d259a8a87 100755
--- a/bin/gla11y
+++ b/bin/gla11y
@@ -908,6 +908,18 @@ def check_props(filename, tree, root, elm, forward):
err(filename, tree, elm, "undeclared-target", forward + " uses undeclared target '%s'" % prop.text)
return props
+def is_visible(obj):
+ visible = False
+ visible_prop = obj.findall("property[@name='visible']")
+ visible_len = len(visible_prop)
+ if visible_len:
+ visible_txt = visible_prop[visible_len - 1].text
+ if visible_txt.lower() == "true":
+ visible = True
+ elif visible_txt.lower() == "false":
+ visible = False
+ return visible
+
def check_rels(filename, tree, root, elm, forward, backward = None):
"""
Check the relations given by forward
@@ -968,6 +980,8 @@ def check_a11y_relation(filename, tree):
# Check labelled-by and its dual label-for
labelled_by = check_rels(filename, tree, root, obj, "labelled-by", "label-for")
+ visible = is_visible(obj)
+
# Should have only one label
if len(labelled_by) >= 1:
if oid in mnemonic_for_elm:
@@ -978,6 +992,10 @@ def check_a11y_relation(filename, tree):
if oid in label_for_elm:
if len(label_for_elm[oid]) > 1:
warn(filename, tree, obj, "duplicate-label-for", "is referenced by multiple label-for " + elms_names_lines(label_for_elm[oid]))
+ elif len(label_for_elm[oid]) == 1:
+ paired = label_for_elm[oid][0]
+ if visible != is_visible(paired):
+ warn(filename, tree, obj, "visibility-conflict", "visibility conflicts with paired " + paired.attrib.get('id'))
if oid in mnemonic_for_elm:
if len(mnemonic_for_elm[oid]) > 1:
warn(filename, tree, obj, "duplicate-mnemonic", "is referenced by multiple mnemonic_widget " + elms_names_lines(mnemonic_for_elm[oid]))
diff --git a/sw/source/ui/fldui/flddb.cxx b/sw/source/ui/fldui/flddb.cxx
index 7447a7708c87..3feac5488241 100644
--- a/sw/source/ui/fldui/flddb.cxx
+++ b/sw/source/ui/fldui/flddb.cxx
@@ -341,6 +341,10 @@ void SwFieldDBPage::TypeHdl( ListBox const * pBox )
m_pNumFormatLB->Show();
m_pFormatLB->Hide();
+ m_pNewFormatRB->SetAccessibleRelationLabelFor(m_pNumFormatLB);
+ m_pNumFormatLB->SetAccessibleRelationLabeledBy(m_pNewFormatRB);
+ m_pFormatLB->SetAccessibleRelationLabelFor(nullptr);
+
if (pBox) // type was changed by user
m_pDBFormatRB->Check();
@@ -376,6 +380,11 @@ void SwFieldDBPage::TypeHdl( ListBox const * pBox )
m_pNewFormatRB->Check();
m_pNumFormatLB->Hide();
m_pFormatLB->Show();
+
+ m_pNewFormatRB->SetAccessibleRelationLabelFor(m_pFormatLB);
+ m_pFormatLB->SetAccessibleRelationLabeledBy(m_pNewFormatRB);
+ m_pNumFormatLB->SetAccessibleRelationLabelFor(nullptr);
+
if( IsFieldEdit() )
{
for( sal_Int32 nI = m_pFormatLB->GetEntryCount(); nI; )
diff --git a/sw/uiconfig/swriter/ui/flddbpage.ui b/sw/uiconfig/swriter/ui/flddbpage.ui
index f1b9b0ae0507..a9b1d65f39ea 100644
--- a/sw/uiconfig/swriter/ui/flddbpage.ui
+++ b/sw/uiconfig/swriter/ui/flddbpage.ui
@@ -318,7 +318,6 @@
<property name="draw_indicator">True</property>
<property name="group">fromdatabasecb</property>
<accessibility>
- <relation type="label-for" target="format"/>
<relation type="label-for" target="numformat"/>
</accessibility>
</object>
@@ -339,9 +338,6 @@
<property name="no_show_all">True</property>
<property name="entry_text_column">0</property>
<property name="id_column">1</property>
- <accessibility>
- <relation type="labelled-by" target="userdefinedcb"/>
- </accessibility>
</object>
<packing>
<property name="expand">False</property>
diff --git a/vcl/source/window/printdlg.cxx b/vcl/source/window/printdlg.cxx
index 725cba29a8d0..50726365af1e 100644
--- a/vcl/source/window/printdlg.cxx
+++ b/vcl/source/window/printdlg.cxx
@@ -1252,6 +1252,10 @@ void PrintDialog::setupOptionalUI()
maNUpPage.mpPagesBoxTitleTxt->SetText( maNUpPage.mpPagesBtn->GetText() );
maNUpPage.mpPagesBoxTitleTxt->Show();
maNUpPage.mpPagesBtn->Show( false );
+
+ maNUpPage.mpPagesBoxTitleTxt->SetAccessibleRelationLabelFor(maNUpPage.mpNupPagesBox);
+ maNUpPage.mpNupPagesBox->SetAccessibleRelationLabeledBy(maNUpPage.mpPagesBoxTitleTxt);
+ maNUpPage.mpPagesBtn->SetAccessibleRelationLabelFor(nullptr);
}
// update enable states
diff --git a/vcl/uiconfig/ui/printdialog.ui b/vcl/uiconfig/ui/printdialog.ui
index 62faa172026d..08e55202e2ba 100644
--- a/vcl/uiconfig/ui/printdialog.ui
+++ b/vcl/uiconfig/ui/printdialog.ui
@@ -1075,7 +1075,7 @@
<property name="can_focus">False</property>
<property name="model">liststore1</property>
<accessibility>
- <relation type="labelled-by" target="pagespersheettxt"/>
+ <relation type="labelled-by" target="pagespersheetbtn"/>
</accessibility>
</object>
<packing>
@@ -1099,6 +1099,9 @@
<property name="active">True</property>
<property name="draw_indicator">True</property>
<property name="group">brochure</property>
+ <accessibility>
+ <relation type="label-for" target="paperspersheetlb"/>
+ </accessibility>
</object>
<packing>
<property name="expand">False</property>
@@ -1109,9 +1112,6 @@
<child>
<object class="GtkLabel" id="pagespersheettxt">
<property name="can_focus">False</property>
- <accessibility>
- <relation type="label-for" target="paperspersheetlb"/>
- </accessibility>
</object>
<packing>
<property name="expand">False</property>
commit eb602dd74518ba30b5a692eae99bb20a3e9c47d7
Author: Samuel Mehrbrodt <Samuel.Mehrbrodt at cib.de>
AuthorDate: Fri Sep 28 09:28:12 2018 +0200
Commit: Samuel Mehrbrodt <Samuel.Mehrbrodt at cib.de>
CommitDate: Fri Sep 28 11:05:23 2018 +0200
Qt5AccessibleWidget: Add state mapping
Change-Id: I6c846fcb56ecfc24d966dfd01b97c47460fdf16b
Reviewed-on: https://gerrit.libreoffice.org/61068
Tested-by: Jenkins
Reviewed-by: Samuel Mehrbrodt <Samuel.Mehrbrodt at cib.de>
diff --git a/vcl/qt5/Qt5AccessibleWidget.cxx b/vcl/qt5/Qt5AccessibleWidget.cxx
index 5228e29d4946..b07182fbee8f 100644
--- a/vcl/qt5/Qt5AccessibleWidget.cxx
+++ b/vcl/qt5/Qt5AccessibleWidget.cxx
@@ -28,11 +28,15 @@
#include <Qt5Widget.hxx>
#include <com/sun/star/accessibility/AccessibleRole.hpp>
+#include <com/sun/star/accessibility/AccessibleStateType.hpp>
+#include <com/sun/star/accessibility/XAccessible.hpp>
+#include <com/sun/star/accessibility/XAccessibleStateSet.hpp>
#include <sal/log.hxx>
#include <vcl/popupmenuwindow.hxx>
using namespace css::accessibility;
+using namespace css::uno;
Qt5AccessibleWidget::Qt5AccessibleWidget(Qt5Widget* pFrame, vcl::Window* pWindow)
: m_pFrame(pFrame)
@@ -428,9 +432,130 @@ QAccessible::Role Qt5AccessibleWidget::role() const
}
return QAccessible::NoRole;
}
+
+namespace
+{
+void lcl_addState(QAccessible::State* state, sal_Int16 nState)
+{
+ switch (nState)
+ {
+ case AccessibleStateType::INVALID:
+ state->invalid = true;
+ break;
+ case AccessibleStateType::ACTIVE:
+ state->active = true;
+ break;
+ case AccessibleStateType::ARMED:
+ // No match
+ break;
+ case AccessibleStateType::BUSY:
+ state->busy = true;
+ break;
+ case AccessibleStateType::CHECKED:
+ state->checked = true;
+ break;
+ case AccessibleStateType::EDITABLE:
+ state->editable = true;
+ break;
+ case AccessibleStateType::ENABLED:
+ state->disabled = false;
+ break;
+ case AccessibleStateType::EXPANDABLE:
+ state->expandable = true;
+ break;
+ case AccessibleStateType::FOCUSABLE:
+ state->focusable = true;
+ break;
+ case AccessibleStateType::FOCUSED:
+ state->focused = true;
+ break;
+ case AccessibleStateType::HORIZONTAL:
+ //state->horizontal = true;
+ break;
+ case AccessibleStateType::ICONIFIED:
+ //state->iconified = true;
+ break;
+ case AccessibleStateType::INDETERMINATE:
+ // No match
+ break;
+ case AccessibleStateType::MANAGES_DESCENDANTS:
+ // No match
+ break;
+ case AccessibleStateType::MODAL:
+ state->modal = true;
+ break;
+ case AccessibleStateType::OPAQUE:
+ // No match
+ break;
+ case AccessibleStateType::PRESSED:
+ state->pressed = true;
+ break;
+ case AccessibleStateType::RESIZABLE:
+ state->sizeable = true;
+ break;
+ case AccessibleStateType::SELECTABLE:
+ state->selectable = true;
+ break;
+ case AccessibleStateType::SELECTED:
+ state->selected = true;
+ break;
+ case AccessibleStateType::SENSITIVE:
+ // No match
+ break;
+ case AccessibleStateType::SHOWING:
+ // No match
+ break;
+ case AccessibleStateType::SINGLE_LINE:
+ // No match
+ break;
+ case AccessibleStateType::STALE:
+ // No match
+ break;
+ case AccessibleStateType::TRANSIENT:
+ // No match
+ break;
+ case AccessibleStateType::VERTICAL:
+ // No match
+ break;
+ case AccessibleStateType::VISIBLE:
+ state->invisible = false;
+ break;
+ case AccessibleStateType::DEFAULT:
+ // No match
+ break;
+ case AccessibleStateType::DEFUNC:
+ state->invalid = true;
+ break;
+ case AccessibleStateType::MULTI_SELECTABLE:
+ state->multiSelectable = true;
+ break;
+ default:
+ SAL_WARN("vcl.qt5", "Unmapped state: " << nState);
+ break;
+ }
+}
+}
+
QAccessible::State Qt5AccessibleWidget::state() const
{
QAccessible::State state;
+
+ Reference<XAccessible> xAccessible(m_pWindow->GetAccessible());
+ if (!xAccessible.is())
+ return state;
+ Reference<XAccessibleStateSet> xStateSet(
+ xAccessible->getAccessibleContext()->getAccessibleStateSet());
+
+ if (!xStateSet.is())
+ return state;
+
+ Sequence<sal_Int16> aStates = xStateSet->getStates();
+
+ for (sal_Int32 n = 0; n < aStates.getLength(); n++)
+ {
+ lcl_addState(&state, n);
+ }
+
return state;
}
commit 6b787aec5241b22c40a3acccc9a861f8b8dfd65b
Author: Samuel Mehrbrodt <Samuel.Mehrbrodt at cib.de>
AuthorDate: Thu Sep 27 17:03:12 2018 +0200
Commit: Samuel Mehrbrodt <Samuel.Mehrbrodt at cib.de>
CommitDate: Fri Sep 28 11:05:01 2018 +0200
Qt5AccessibleWidget: Implement foreground and background color
Change-Id: Ice848f429ce8b9d4395e3cf1c23c22aa806fb5f9
Reviewed-on: https://gerrit.libreoffice.org/61043
Tested-by: Jenkins
Reviewed-by: Samuel Mehrbrodt <Samuel.Mehrbrodt at cib.de>
diff --git a/vcl/qt5/Qt5AccessibleWidget.cxx b/vcl/qt5/Qt5AccessibleWidget.cxx
index e0bfa982a591..5228e29d4946 100644
--- a/vcl/qt5/Qt5AccessibleWidget.cxx
+++ b/vcl/qt5/Qt5AccessibleWidget.cxx
@@ -434,8 +434,14 @@ QAccessible::State Qt5AccessibleWidget::state() const
return state;
}
-QColor Qt5AccessibleWidget::foregroundColor() const { return QColor(); }
-QColor Qt5AccessibleWidget::backgroundColor() const { return QColor(); }
+QColor Qt5AccessibleWidget::foregroundColor() const
+{
+ return toQColor(m_pWindow->GetControlForeground());
+}
+QColor Qt5AccessibleWidget::backgroundColor() const
+{
+ return toQColor(m_pWindow->GetControlBackground());
+}
void* Qt5AccessibleWidget::interface_cast(QAccessible::InterfaceType /* t */)
{
commit e9efc76f90291ba54dd2c6359f6fecef8c540841
Author: Serge Krot <Serge.Krot at cib.de>
AuthorDate: Wed Sep 26 16:28:19 2018 +0200
Commit: Thorsten Behrens <Thorsten.Behrens at CIB.de>
CommitDate: Fri Sep 28 10:26:24 2018 +0200
sw: new unit test for XTextRangeCompare
Change-Id: Ia0d216b94f8090c3479c6e4c593baf84cb28e5e2
Reviewed-on: https://gerrit.libreoffice.org/61005
Tested-by: Jenkins
Reviewed-by: Thorsten Behrens <Thorsten.Behrens at CIB.de>
diff --git a/sw/PythonTest_sw_python.mk b/sw/PythonTest_sw_python.mk
index a2d677045367..6c5a4c818fe8 100644
--- a/sw/PythonTest_sw_python.mk
+++ b/sw/PythonTest_sw_python.mk
@@ -26,6 +26,7 @@ $(eval $(call gb_PythonTest_add_modules,sw_python,$(SRCDIR)/sw/qa/python,\
check_xtexttable \
check_table \
check_xnamedgraph \
+ check_xtextrangecompare \
get_expression \
set_expression \
text_portion_enumeration_test \
diff --git a/sw/qa/python/check_xtextrangecompare.py b/sw/qa/python/check_xtextrangecompare.py
new file mode 100644
index 000000000000..002e54c40a14
--- /dev/null
+++ b/sw/qa/python/check_xtextrangecompare.py
@@ -0,0 +1,167 @@
+#! /usr/bin/env python
+# -*- tab-width: 4; indent-tabs-mode: nil; py-indent-offset: 4 -*-
+#
+# This file is part of the LibreOffice project.
+#
+# This Source Code Form is subject to the terms of the Mozilla Public
+# License, v. 2.0. If a copy of the MPL was not distributed with this
+# file, You can obtain one at http://mozilla.org/MPL/2.0/.
+#
+import unittest
+from org.libreoffice.unotest import UnoInProcess
+from com.sun.star.lang import IllegalArgumentException
+
+
+class XTextRangeCompare(unittest.TestCase):
+
+ @classmethod
+ def setUpClass(cls):
+ cls._uno = UnoInProcess()
+ cls._uno.setUp()
+
+ @classmethod
+ def tearDownClass(cls):
+ cls._uno.tearDown()
+
+ def test_compareRegionStarts(self):
+ xDoc = self._uno.openEmptyWriterDoc()
+
+ cursor = xDoc.Text.createTextCursor()
+ xDoc.Text.insertString(cursor, "The first paragraph", 0)
+
+ self.assertEqual(0, xDoc.Text.compareRegionStarts(cursor, cursor))
+
+ with self.assertRaises(IllegalArgumentException):
+ xDoc.Text.compareRegionStarts(cursor, None)
+
+ with self.assertRaises(IllegalArgumentException):
+ xDoc.Text.compareRegionStarts(None, cursor)
+
+ with self.assertRaises(IllegalArgumentException):
+ xDoc.Text.compareRegionStarts(None, None)
+
+ xDoc.close(True)
+
+ def test_compareRegionEnds(self):
+ xDoc = self._uno.openEmptyWriterDoc()
+
+ cursor = xDoc.Text.createTextCursor()
+ xDoc.Text.insertString(cursor, "The first paragraph", 0)
+
+ self.assertEqual(0, xDoc.Text.compareRegionEnds(cursor, cursor))
+
+ with self.assertRaises(IllegalArgumentException):
+ xDoc.Text.compareRegionEnds(cursor, None)
+
+ with self.assertRaises(IllegalArgumentException):
+ xDoc.Text.compareRegionEnds(None, cursor)
+
+ with self.assertRaises(IllegalArgumentException):
+ xDoc.Text.compareRegionEnds(None, None)
+
+ xDoc.close(True)
+
+ def test_compareRegionStarts_Different(self):
+ xDoc = self._uno.openEmptyWriterDoc()
+
+ cursor1 = xDoc.Text.createTextCursor()
+ cursor2 = xDoc.Text.createTextCursor()
+
+ xDoc.Text.insertString(cursor1, "The first paragraph", 0)
+
+ cursor1.gotoStart(False)
+ cursor2.gotoEnd(False)
+
+ self.assertTrue(cursor1.isCollapsed())
+ self.assertTrue(cursor1.isCollapsed())
+
+ self.assertEqual(1, xDoc.Text.compareRegionStarts(cursor1, cursor2))
+ self.assertEqual(-1, xDoc.Text.compareRegionStarts(cursor2, cursor1))
+
+ xDoc.close(True)
+
+ def test_compareRegionStarts_DiffSelection(self):
+ xDoc = self._uno.openEmptyWriterDoc()
+
+ cursor1 = xDoc.Text.createTextCursor()
+ cursor2 = xDoc.Text.createTextCursor()
+
+ xDoc.Text.insertString(cursor1, "The first paragraph", 0)
+
+ cursor1.gotoStart(False)
+ cursor1.gotoEnd(True)
+ cursor2.gotoEnd(False)
+ cursor2.gotoStart(True)
+
+ self.assertFalse(cursor1.isCollapsed())
+ self.assertFalse(cursor1.isCollapsed())
+
+ self.assertEqual(0, xDoc.Text.compareRegionStarts(cursor1, cursor2))
+ self.assertEqual(0, xDoc.Text.compareRegionEnds(cursor1, cursor2))
+
+ xDoc.close(True)
+
+ def test_compareRegionStarts_DiffSelection(self):
+ xDoc = self._uno.openEmptyWriterDoc()
+
+ cursor1 = xDoc.Text.createTextCursor()
+ cursor2 = xDoc.Text.createTextCursor()
+
+ xDoc.Text.insertString(cursor1, "The first paragraph", 0)
+
+ cursor1.gotoStart(False)
+ cursor1.gotoEnd(True)
+ cursor1.goLeft(2, True)
+ cursor2.gotoEnd(False)
+ cursor2.gotoStart(True)
+ cursor2.goRight(2, True)
+
+ self.assertFalse(cursor1.isCollapsed())
+ self.assertFalse(cursor1.isCollapsed())
+
+ # whole text: 123456789
+ # cursor1: 1234567
+ # cursor2: 3456789
+
+ self.assertEqual(1, xDoc.Text.compareRegionStarts(cursor1, cursor2))
+ self.assertEqual(1, xDoc.Text.compareRegionEnds(cursor1, cursor2))
+
+ self.assertEqual(-1, xDoc.Text.compareRegionStarts(cursor2, cursor1))
+ self.assertEqual(-1, xDoc.Text.compareRegionEnds(cursor2, cursor1))
+
+ xDoc.close(True)
+
+ def test_compareRegionStarts_SameStart(self):
+ xDoc = self._uno.openEmptyWriterDoc()
+
+ cursor1 = xDoc.Text.createTextCursor()
+ cursor2 = xDoc.Text.createTextCursor()
+
+ xDoc.Text.insertString(cursor1, "The first paragraph", 0)
+
+ cursor1.gotoStart(False)
+ cursor1.goRight(2, False)
+ cursor1.goRight(5, True)
+
+ cursor2.gotoStart(False)
+ cursor2.goRight(2, False)
+ cursor2.goRight(7, True)
+
+ self.assertFalse(cursor1.isCollapsed())
+ self.assertFalse(cursor1.isCollapsed())
+
+ # whole text: 123456789
+ # cursor1: 34567
+ # cursor2: 3456789
+
+ self.assertEqual(0, xDoc.Text.compareRegionStarts(cursor1, cursor2))
+ self.assertEqual(0, xDoc.Text.compareRegionStarts(cursor2, cursor1))
+
+ self.assertEqual(1, xDoc.Text.compareRegionEnds(cursor1, cursor2))
+ self.assertEqual(-1, xDoc.Text.compareRegionEnds(cursor2, cursor1))
+
+ xDoc.close(True)
+
+
+if __name__ == '__main__':
+ unittest.main()
commit 93035efada5b7a242faf998b2152e9a8c4095e5d
Author: Andrea Gelmini <andrea.gelmini at gelma.net>
AuthorDate: Wed Sep 26 18:04:34 2018 +0200
Commit: Julien Nabet <serval2412 at yahoo.fr>
CommitDate: Fri Sep 28 10:21:02 2018 +0200
Fix TRANPARENT -> TRANSPARENT
It passed "make check" on Linux.
Change-Id: I70ccaae61eb7961a331cabcd8f4e56b5ea5dfc4c
Reviewed-on: https://gerrit.libreoffice.org/61045
Tested-by: Jenkins
Reviewed-by: Julien Nabet <serval2412 at yahoo.fr>
diff --git a/solenv/doc/gbuild/doxygen.cfg b/solenv/doc/gbuild/doxygen.cfg
index 7c1359a9d0dd..cb22507aff19 100644
--- a/solenv/doc/gbuild/doxygen.cfg
+++ b/solenv/doc/gbuild/doxygen.cfg
@@ -1173,7 +1173,7 @@ EXT_LINKS_IN_WINDOW = NO
FORMULA_FONTSIZE = 10
-# Use the FORMULA_TRANPARENT tag to determine whether or not the images
+# Use the FORMULA_TRANSPARENT tag to determine whether or not the images
# generated for formulas are transparent PNGs. Transparent PNGs are
# not supported properly for IE 6.0, but are supported on all modern browsers.
# Note that when changing this option you need to delete any form_*.png files
diff --git a/solenv/inc/doxygen.cfg b/solenv/inc/doxygen.cfg
index 86951b598114..2bdabc731935 100644
--- a/solenv/inc/doxygen.cfg
+++ b/solenv/inc/doxygen.cfg
@@ -1427,7 +1427,7 @@ EXT_LINKS_IN_WINDOW = NO
FORMULA_FONTSIZE = 10
-# Use the FORMULA_TRANPARENT tag to determine whether or not the images
+# Use the FORMULA_TRANSPARENT tag to determine whether or not the images
# generated for formulas are transparent PNGs. Transparent PNGs are not
# supported properly for IE 6.0, but are supported on all modern browsers.
#
diff --git a/solenv/inc/doxygen_doc.cfg b/solenv/inc/doxygen_doc.cfg
index 4f50551bbd0c..dfcf174ee559 100644
--- a/solenv/inc/doxygen_doc.cfg
+++ b/solenv/inc/doxygen_doc.cfg
@@ -1427,7 +1427,7 @@ EXT_LINKS_IN_WINDOW = NO
FORMULA_FONTSIZE = 10
-# Use the FORMULA_TRANPARENT tag to determine whether or not the images
+# Use the FORMULA_TRANSPARENT tag to determine whether or not the images
# generated for formulas are transparent PNGs. Transparent PNGs are not
# supported properly for IE 6.0, but are supported on all modern browsers.
#
diff --git a/solenv/inc/doxygen_tag.cfg b/solenv/inc/doxygen_tag.cfg
index 3e4a43b22204..a2f2e602612b 100644
--- a/solenv/inc/doxygen_tag.cfg
+++ b/solenv/inc/doxygen_tag.cfg
@@ -1427,7 +1427,7 @@ EXT_LINKS_IN_WINDOW = NO
FORMULA_FONTSIZE = 10
-# Use the FORMULA_TRANPARENT tag to determine whether or not the images
+# Use the FORMULA_TRANSPARENT tag to determine whether or not the images
# generated for formulas are transparent PNGs. Transparent PNGs are not
# supported properly for IE 6.0, but are supported on all modern browsers.
#
commit 9f969799629fe6bdf8b922d8cb922846aa646ece
Author: Justin Luth <justin.luth at collabora.com>
AuthorDate: Thu Sep 27 21:46:18 2018 +0300
Commit: Michael Meeks <michael.meeks at collabora.com>
CommitDate: Fri Sep 28 09:57:28 2018 +0200
tdf#111980 oox: connect empty radio groups
affects doc, docx, xls, xlsx (at least). Handling optionbutton
groups is new since 2017, so incremental enhancements are OK.
In LO, if an option button with an empty groupName (like any form
control which has no groupName option), then it stands alone,
which is a ridiculous position to be in for a radio button.
So, lets put them all together into an automatic group.
In MSO, buttons without any explicit group stick together,
so the effective group is the entire document, or entire sheet.
One complication is that ActiveX radio buttons don't
interact with Form radio buttons, even if all of them
have no group name. That situation is not handled by
this patch (and not very likely to happen since ActiveX
defaults the group name to the sheet name).
(A Group Box can also be used, which automatically groups
all buttons fully within its area. That will be much harder
to implement since every object will need to first be
categorized as groupbox or optionControl - meaning that everything
must first be imported. That implies a function call from every
application doing the import.)
Change-Id: I204adaea75ce99999a16c0cc4e9c3b8b08da9433
Reviewed-on: https://gerrit.libreoffice.org/61064
Tested-by: Jenkins
Reviewed-by: Michael Meeks <michael.meeks at collabora.com>
diff --git a/oox/source/ole/axcontrol.cxx b/oox/source/ole/axcontrol.cxx
index 2eab7a0fa861..350fe0e315f9 100644
--- a/oox/source/ole/axcontrol.cxx
+++ b/oox/source/ole/axcontrol.cxx
@@ -1554,7 +1554,17 @@ void AxMorphDataModelBase::convertProperties( PropertyMap& rPropMap, const Contr
rPropMap.setProperty( PROP_Enabled, getFlag( mnFlags, AX_FLAGS_ENABLED ) );
rConv.convertColor( rPropMap, PROP_TextColor, mnTextColor );
if ( mnDisplayStyle == AX_DISPLAYSTYLE_OPTBUTTON )
- rPropMap.setProperty( PROP_GroupName, maGroupName );
+ {
+ // Form Radio Controls (non-ActiveX) have no group name, but autoGroup
+ // with their group box, or frame, or sheet, or document.
+ // So ensure that SOME name is given for a group name
+ // TODO: ActiveX controls without a Group name shouldn't autogroup
+ // with non-ActiveX option buttons.
+ // TODO: each application should test if control's area is fully inside
+ // a GroupBox, and give those a separate group name.
+ OUString sGroupName = !maGroupName.isEmpty() ? maGroupName : "autoGroup_";
+ rPropMap.setProperty( PROP_GroupName, sGroupName );
+ }
AxFontDataModel::convertProperties( rPropMap, rConv );
}
diff --git a/sc/qa/unit/data/xlsx/tdf111980_radioButtons.xlsx b/sc/qa/unit/data/xlsx/tdf111980_radioButtons.xlsx
new file mode 100644
index 000000000000..9f97d9e00a48
Binary files /dev/null and b/sc/qa/unit/data/xlsx/tdf111980_radioButtons.xlsx differ
diff --git a/sc/qa/unit/subsequent_filters-test.cxx b/sc/qa/unit/subsequent_filters-test.cxx
index b896d3e47370..ef2b5ee22aef 100644
--- a/sc/qa/unit/subsequent_filters-test.cxx
+++ b/sc/qa/unit/subsequent_filters-test.cxx
@@ -177,6 +177,7 @@ public:
//test shape import
void testControlImport();
+ void testActiveXOptionButtonGroup();
void testChartImportODS();
#if HAVE_MORE_FONTS
void testChartImportXLS();
@@ -290,6 +291,7 @@ public:
CPPUNIT_TEST(testCellValueXLSX);
CPPUNIT_TEST(testRowIndex1BasedXLSX);
CPPUNIT_TEST(testControlImport);
+ CPPUNIT_TEST(testActiveXOptionButtonGroup);
CPPUNIT_TEST(testChartImportODS);
#if HAVE_MORE_FONTS
CPPUNIT_TEST(testChartImportXLS);
@@ -1676,6 +1678,36 @@ void ScFiltersTest::testControlImport()
xDocSh->DoClose();
}
+void ScFiltersTest::testActiveXOptionButtonGroup()
+{
+ ScDocShellRef xDocSh = loadDoc("tdf111980_radioButtons.", FORMAT_XLSX);
+ CPPUNIT_ASSERT_MESSAGE("Failed to load singlecontrol.xlsx", xDocSh.is());
+ uno::Reference< frame::XModel > xModel = xDocSh->GetModel();
+ uno::Reference< sheet::XSpreadsheetDocument > xDoc(xModel, UNO_QUERY_THROW);
+ uno::Reference< container::XIndexAccess > xIA(xDoc->getSheets(), UNO_QUERY_THROW);
+ uno::Reference< drawing::XDrawPageSupplier > xDrawPageSupplier( xIA->getByIndex(0), UNO_QUERY_THROW);
+ uno::Reference< container::XIndexAccess > xIA_DrawPage(xDrawPageSupplier->getDrawPage(), UNO_QUERY_THROW);
+
+ OUString sGroupName;
+ uno::Reference< drawing::XControlShape > xControlShape(xIA_DrawPage->getByIndex(0), UNO_QUERY_THROW);
+ uno::Reference<beans::XPropertySet> xPropertySet(xControlShape->getControl(), uno::UNO_QUERY_THROW);
+ xPropertySet->getPropertyValue("GroupName") >>= sGroupName;
+ CPPUNIT_ASSERT_EQUAL(OUString("Sheet1"), sGroupName);
+
+ // Form optionbuttons (without Group names) were not grouped.
+ // The two optionbuttons should have the same auto-generated group name.
+ xControlShape.set(xIA_DrawPage->getByIndex(4), uno::UNO_QUERY_THROW);
+ xPropertySet.set(xControlShape->getControl(), uno::UNO_QUERY_THROW);
+ xPropertySet->getPropertyValue("GroupName") >>= sGroupName;
+ CPPUNIT_ASSERT_EQUAL(false, sGroupName.isEmpty());
+
+ OUString sGroupName5;
+ xControlShape.set(xIA_DrawPage->getByIndex(5), uno::UNO_QUERY_THROW);
+ xPropertySet.set(xControlShape->getControl(), uno::UNO_QUERY_THROW);
+ xPropertySet->getPropertyValue("GroupName") >>= sGroupName5;
+ CPPUNIT_ASSERT_EQUAL(sGroupName, sGroupName5);
+}
+
void ScFiltersTest::testChartImportODS()
{
ScDocShellRef xDocSh = loadDoc("chart-import-basic.", FORMAT_ODS);
commit 598f2ee618a2bb14a13630168dd82601e2c8f69f
Author: Andrea Gelmini <andrea.gelmini at gelma.net>
AuthorDate: Wed Sep 26 18:04:06 2018 +0200
Commit: Julien Nabet <serval2412 at yahoo.fr>
CommitDate: Fri Sep 28 09:51:33 2018 +0200
Fix dictionnary -> dictionary
It passed "make check" on Linux.
Change-Id: I893b7873f3a7d3f43bf742f2ee126524310dfafb
Reviewed-on: https://gerrit.libreoffice.org/61029
Reviewed-by: Julien Nabet <serval2412 at yahoo.fr>
Tested-by: Julien Nabet <serval2412 at yahoo.fr>
diff --git a/schema/mathml2/presentation/common-attribs.xsd b/schema/mathml2/presentation/common-attribs.xsd
index 2dff7e33a0e1..3e9432c7b1ed 100644
--- a/schema/mathml2/presentation/common-attribs.xsd
+++ b/schema/mathml2/presentation/common-attribs.xsd
@@ -66,31 +66,31 @@
</xs:restriction>
</xs:simpleType>
</xs:attribute>
- <!-- set by dictionnary, else it is "thickmathspace" -->
+ <!-- set by dictionary, else it is "thickmathspace" -->
<xs:attribute name="lspace">
<xs:simpleType>
<xs:union memberTypes="length-with-unit named-space"/>
</xs:simpleType>
- </xs:attribute>
- <!-- set by dictionnary, else it is "thickmathspace" -->
+ </xs:attribute>
+ <!-- set by dictionary, else it is "thickmathspace" -->
<xs:attribute name="rspace">
<xs:simpleType>
<xs:union memberTypes="length-with-unit named-space"/>
</xs:simpleType>
</xs:attribute>
- <!-- set by dictionnary, else it is "false" -->
+ <!-- set by dictionary, else it is "false" -->
<xs:attribute name="fence" type="xs:boolean"/>
- <!-- set by dictionnary, else it is "false" -->
+ <!-- set by dictionary, else it is "false" -->
<xs:attribute name="separator" type="xs:boolean"/>
- <!-- set by dictionnary, else it is "false" -->
+ <!-- set by dictionary, else it is "false" -->
<xs:attribute name="stretchy" type="xs:boolean"/>
- <!-- set by dictionnary, else it is "true" -->
+ <!-- set by dictionary, else it is "true" -->
<xs:attribute name="symmetric" type="xs:boolean"/>
- <!-- set by dictionnary, else it is "false" -->
+ <!-- set by dictionary, else it is "false" -->
<xs:attribute name="movablelimits" type="xs:boolean"/>
- <!-- set by dictionnary, else it is "false" -->
+ <!-- set by dictionary, else it is "false" -->
<xs:attribute name="accent" type="xs:boolean"/>
- <!-- set by dictionnary, else it is "false" -->
+ <!-- set by dictionary, else it is "false" -->
<xs:attribute name="largeop" type="xs:boolean"/>
<xs:attribute name="minsize">
<xs:simpleType>
commit 81cf79d1af42fc9fb1f5500bcc3f55cce1548bab
Author: Noel Grandin <noel.grandin at collabora.co.uk>
AuthorDate: Wed Sep 26 14:11:43 2018 +0200
Commit: Noel Grandin <noel.grandin at collabora.co.uk>
CommitDate: Fri Sep 28 09:47:20 2018 +0200
loplugin:useuniqueptr in SwTable::NewInsertCol
Change-Id: If22b13087ab193ed37ca092c2b252579d5ac5d0e
Reviewed-on: https://gerrit.libreoffice.org/61003
Tested-by: Jenkins
Reviewed-by: Noel Grandin <noel.grandin at collabora.co.uk>
diff --git a/sw/source/core/table/swnewtable.cxx b/sw/source/core/table/swnewtable.cxx
index e9398fd42414..f407a0eec839 100644
--- a/sw/source/core/table/swnewtable.cxx
+++ b/sw/source/core/table/swnewtable.cxx
@@ -734,10 +734,10 @@ bool SwTable::NewInsertCol( SwDoc* pDoc, const SwSelBoxes& rBoxes,
nLastRowSpan = nRowSpan;
}
const SvxBoxItem& aSelBoxItem = pBoxFrameFormat->GetBox();
- SvxBoxItem* pNoRightBorder = nullptr;
+ std::unique_ptr<SvxBoxItem> pNoRightBorder;
if( aSelBoxItem.GetRight() )
{
- pNoRightBorder = new SvxBoxItem( aSelBoxItem );
+ pNoRightBorder.reset( new SvxBoxItem( aSelBoxItem ));
pNoRightBorder->SetLine( nullptr, SvxBoxItemLine::RIGHT );
}
for( sal_uInt16 j = 0; j < nCnt; ++j )
@@ -762,7 +762,6 @@ bool SwTable::NewInsertCol( SwDoc* pDoc, const SwSelBoxes& rBoxes,
SwFrameFormat* pFrameFormat = pBox->ClaimFrameFormat();
pFrameFormat->SetFormatAttr( *pNoRightBorder );
}
- delete pNoRightBorder;
}
aFndBox.MakeFrames( *this );
commit 36fca319d8c49147f0362a61956138e9c5292ed3
Author: Jan-Marek Glogowski <glogow at fbihome.de>
AuthorDate: Thu Aug 30 16:19:30 2018 +0200
Commit: Jan-Marek Glogowski <glogow at fbihome.de>
CommitDate: Fri Sep 28 09:46:00 2018 +0200
Move TabPage lookup into extra function
This way it's easier to read the follow up patch.
Change-Id: I42e8f78b69b4ed2cb28bf0f36496eb751e8cb433
Reviewed-on: https://gerrit.libreoffice.org/61036
Tested-by: Jenkins
Reviewed-by: Jan-Marek Glogowski <glogow at fbihome.de>
diff --git a/vcl/source/window/dlgctrl.cxx b/vcl/source/window/dlgctrl.cxx
index 76adefb1d2a1..4479291b6f24 100644
--- a/vcl/source/window/dlgctrl.cxx
+++ b/vcl/source/window/dlgctrl.cxx
@@ -68,6 +68,30 @@ static vcl::Window* ImplGetTopParentOfTabHierarchy( vcl::Window* pParent )
return pResult;
}
+static vcl::Window* ImplGetCurTabWindow(const vcl::Window* pWindow)
+{
+ assert(pWindow->GetType() == WindowType::TABCONTROL);
+ const TabControl* pTabControl = static_cast<const TabControl*>(pWindow);
+ // Check if the TabPage is a Child of the TabControl and still exists (by
+ // walking all child windows); because it could be that the TabPage has been
+ // destroyed already by a Dialog-Dtor, event that the TabControl still exists.
+ const TabPage* pTempTabPage = pTabControl->GetTabPage(pTabControl->GetCurPageId());
+ if (pTempTabPage)
+ {
+ vcl::Window* pTempWindow = pTabControl->GetWindow(GetWindowType::FirstChild);
+ while (pTempWindow)
+ {
+ if (pTempWindow->ImplGetWindow() == pTempTabPage)
+ {
+ return const_cast<TabPage*>(pTempTabPage);
+ }
+ pTempWindow = nextLogicalChildOfParent(pTabControl, pTempWindow);
+ }
+ }
+
+ return nullptr;
+}
+
static vcl::Window* ImplGetSubChildWindow( vcl::Window* pParent, sal_uInt16 n, sal_uInt16& nIndex )
{
vcl::Window* pTabPage = nullptr;
@@ -91,31 +115,10 @@ static vcl::Window* ImplGetSubChildWindow( vcl::Window* pParent, sal_uInt16 n, s
else
{
pFoundWindow = pWindow;
-
// for a TabControl, remember the current TabPage for later use
if ( pWindow->GetType() == WindowType::TABCONTROL )
- {
- TabControl* pTabControl = static_cast<TabControl*>(pWindow);
- // Check if the TabPage is a Child of the TabControl and still exists (by
- // walking all child windows); because it could be that the TabPage has been
- // destroyed already by a Dialog-Dtor, event that the TabControl still exists.
- TabPage* pTempTabPage = pTabControl->GetTabPage( pTabControl->GetCurPageId() );
- if ( pTempTabPage )
- {
- vcl::Window* pTempWindow = pTabControl->GetWindow( GetWindowType::FirstChild );
- while ( pTempWindow )
- {
- if ( pTempWindow->ImplGetWindow() == pTempTabPage )
- {
- pTabPage = pTempTabPage;
- break;
- }
- pTempWindow = nextLogicalChildOfParent(pTabControl, pTempWindow);
- }
- }
- }
- else if ( ( pWindow->GetStyle() & WB_DIALOGCONTROL )
- || ( pWindow->GetStyle() & WB_CHILDDLGCTRL ) )
+ pTabPage = ImplGetCurTabWindow(pWindow);
+ else if (pWindow->GetStyle() & (WB_DIALOGCONTROL | WB_CHILDDLGCTRL))
pFoundWindow = ImplGetSubChildWindow( pWindow, n, nIndex );
}
commit 30e9f06dcfb578c894d2e5c003403bfbda57ae13
Author: Jan-Marek Glogowski <glogow at fbihome.de>
AuthorDate: Fri Aug 31 16:43:18 2018 +0200
Commit: Jan-Marek Glogowski <glogow at fbihome.de>
CommitDate: Fri Sep 28 09:45:23 2018 +0200
Constify vcl::Window child lookup
Also removes the function comments before the implementations,
as these are just the same as already in the header.
Change-Id: I11425dc4aa372423fcf469ab1374159ce8b180e2
Reviewed-on: https://gerrit.libreoffice.org/61035
Tested-by: Jenkins
Reviewed-by: Jan-Marek Glogowski <glogow at fbihome.de>
diff --git a/include/vcl/layout.hxx b/include/vcl/layout.hxx
index 50fd57663542..0f8818989268 100644
--- a/include/vcl/layout.hxx
+++ b/include/vcl/layout.hxx
@@ -767,21 +767,21 @@ public:
//i.e. acts like pChild = pChild->GetWindow(GetWindowType::FirstChild);
//in a flat hierarchy where dialogs only have one layer
//of children
-VCL_DLLPUBLIC vcl::Window* firstLogicalChildOfParent(vcl::Window *pTopLevel);
+VCL_DLLPUBLIC vcl::Window* firstLogicalChildOfParent(const vcl::Window *pTopLevel);
//Get next window after pChild of a pTopLevel window as
//if any intermediate layout widgets didn't exist
//i.e. acts like pChild = pChild->GetWindow(GetWindowType::Next);
//in a flat hierarchy where dialogs only have one layer
//of children
-VCL_DLLPUBLIC vcl::Window* nextLogicalChildOfParent(vcl::Window *pTopLevel, vcl::Window *pChild);
+VCL_DLLPUBLIC vcl::Window* nextLogicalChildOfParent(const vcl::Window *pTopLevel, const vcl::Window *pChild);
//Get previous window before pChild of a pTopLevel window as
//if any intermediate layout widgets didn't exist
//i.e. acts like pChild = pChild->GetWindow(GetWindowType::Prev);
//in a flat hierarchy where dialogs only have one layer
//of children
-VCL_DLLPUBLIC vcl::Window* prevLogicalChildOfParent(vcl::Window *pTopLevel, vcl::Window *pChild);
+VCL_DLLPUBLIC vcl::Window* prevLogicalChildOfParent(const vcl::Window *pTopLevel, const vcl::Window *pChild);
//Returns true is the Window has a single child which is a container
VCL_DLLPUBLIC bool isLayoutEnabled(const vcl::Window *pWindow);
diff --git a/vcl/source/window/dialog.cxx b/vcl/source/window/dialog.cxx
index ed3016ad64d2..99b1cede0a8b 100644
--- a/vcl/source/window/dialog.cxx
+++ b/vcl/source/window/dialog.cxx
@@ -126,11 +126,9 @@ void ImplHideSplash()
pSVData->mpIntroWindow->Hide();
}
-//Get next window after pChild of a pTopLevel window as
-//if any intermediate layout widgets didn't exist
-vcl::Window * nextLogicalChildOfParent(vcl::Window *pTopLevel, vcl::Window *pChild)
+vcl::Window * nextLogicalChildOfParent(const vcl::Window *pTopLevel, const vcl::Window *pChild)
{
- vcl::Window *pLastChild = pChild;
+ const vcl::Window *pLastChild = pChild;
if (isContainerWindow(*pChild))
pChild = pChild->GetWindow(GetWindowType::FirstChild);
@@ -151,12 +149,12 @@ vcl::Window * nextLogicalChildOfParent(vcl::Window *pTopLevel, vcl::Window *pChi
if (pChild && isContainerWindow(*pChild))
pChild = nextLogicalChildOfParent(pTopLevel, pChild);
- return pChild;
+ return const_cast<vcl::Window *>(pChild);
}
-vcl::Window * prevLogicalChildOfParent(vcl::Window *pTopLevel, vcl::Window *pChild)
+vcl::Window * prevLogicalChildOfParent(const vcl::Window *pTopLevel, const vcl::Window *pChild)
{
- vcl::Window *pLastChild = pChild;
+ const vcl::Window *pLastChild = pChild;
if (isContainerWindow(*pChild))
pChild = pChild->GetWindow(GetWindowType::LastChild);
@@ -177,17 +175,15 @@ vcl::Window * prevLogicalChildOfParent(vcl::Window *pTopLevel, vcl::Window *pChi
if (pChild && isContainerWindow(*pChild))
pChild = prevLogicalChildOfParent(pTopLevel, pChild);
- return pChild;
+ return const_cast<vcl::Window *>(pChild);
}
-//Get first window of a pTopLevel window as
-//if any intermediate layout widgets didn't exist
-vcl::Window * firstLogicalChildOfParent(vcl::Window *pTopLevel)
+vcl::Window * firstLogicalChildOfParent(const vcl::Window *pTopLevel)
{
- vcl::Window *pChild = pTopLevel->GetWindow(GetWindowType::FirstChild);
+ const vcl::Window *pChild = pTopLevel->GetWindow(GetWindowType::FirstChild);
if (pChild && isContainerWindow(*pChild))
pChild = nextLogicalChildOfParent(pTopLevel, pChild);
- return pChild;
+ return const_cast<vcl::Window *>(pChild);
}
void Accelerator::GenerateAutoMnemonicsOnHierarchy(vcl::Window* pWindow)
commit a8cd67e2690a3fd8b3d486fa6dc82a5c4a6ef17b
Author: Andrea Gelmini <andrea.gelmini at gelma.net>
AuthorDate: Thu Sep 27 12:22:13 2018 +0200
Commit: Julien Nabet <serval2412 at yahoo.fr>
CommitDate: Fri Sep 28 09:26:22 2018 +0200
Fix typo
Change-Id: I3473cb5a565aba822428178030572325425c6a13
Reviewed-on: https://gerrit.libreoffice.org/61030
Tested-by: Jenkins
Reviewed-by: Julien Nabet <serval2412 at yahoo.fr>
diff --git a/compilerplugins/clang/methodcycles.py b/compilerplugins/clang/methodcycles.py
index d57c85ff963d..2f7bef09918f 100755
--- a/compilerplugins/clang/methodcycles.py
+++ b/compilerplugins/clang/methodcycles.py
@@ -243,7 +243,7 @@ def print_cycles():
print_cycles()
-# print partioned sub-graphs
+# print partitioned sub-graphs
def print_partitions():
callDict2 = callDict
# Remove anything with no callees, and that is itself not called.
commit a6c7c2fe1bc48ffddca486de0f97164421ca6404
Author: Noel Grandin <noel.grandin at collabora.co.uk>
AuthorDate: Wed Sep 26 09:09:53 2018 +0200
Commit: Noel Grandin <noel.grandin at collabora.co.uk>
CommitDate: Fri Sep 28 09:06:48 2018 +0200
loplugin:unusedfields
Change-Id: I355fad84ed8765e8eb3fadb7c239b3b902ec1747
Reviewed-on: https://gerrit.libreoffice.org/61059
Tested-by: Jenkins
Reviewed-by: Noel Grandin <noel.grandin at collabora.co.uk>
diff --git a/compilerplugins/clang/unusedfields.only-used-in-constructor.results b/compilerplugins/clang/unusedfields.only-used-in-constructor.results
index d6fb9aef851a..d0af141ef3a7 100644
--- a/compilerplugins/clang/unusedfields.only-used-in-constructor.results
+++ b/compilerplugins/clang/unusedfields.only-used-in-constructor.results
@@ -120,14 +120,22 @@ cppu/source/uno/check.cxx:138
(anonymous namespace)::Char4 chars struct (anonymous namespace)::Char3
cui/source/dialogs/colorpicker.cxx:719
cui::ColorPickerDialog m_aColorPrevious class cui::ColorPreviewControl
-cui/source/factory/dlgfact.cxx:1396
+cui/source/factory/dlgfact.cxx:1398
SvxMacroAssignDialog m_aItems class SfxItemSet
cui/source/inc/cfgutil.hxx:190
SvxScriptSelectorDialog m_aStylesInfo struct SfxStylesInfo_Impl
-cui/source/inc/cuitabarea.hxx:236
+cui/source/inc/cuitabarea.hxx:234
SvxAreaTabPage maFixed_ChangeType enum ChangeType
-cui/source/inc/cuitabarea.hxx:244
+cui/source/inc/cuitabarea.hxx:242
SvxAreaTabPage m_aXFillAttr class XFillAttrSetItem
+cui/source/inc/tabstpge.hxx:93
+ SvxTabulatorTabPage m_aLeftWin class TabWin_Impl
+cui/source/inc/tabstpge.hxx:94
+ SvxTabulatorTabPage m_aRightWin class TabWin_Impl
+cui/source/inc/tabstpge.hxx:95
+ SvxTabulatorTabPage m_aCenterWin class TabWin_Impl
+cui/source/inc/tabstpge.hxx:96
+ SvxTabulatorTabPage m_aDezWin class TabWin_Impl
dbaccess/source/core/api/RowSet.hxx:111
dbaccess::ORowSet m_aURL class rtl::OUString
dbaccess/source/core/api/RowSet.hxx:125
@@ -205,7 +213,7 @@ include/svx/ClassificationDialog.hxx:63
include/svx/itemwin.hxx:34
SvxLineBox aDelayTimer class Timer
include/vcl/font/Feature.hxx:102
- vcl::font::Feature m_eType enum vcl::font::FeatureType
+ vcl::font::Feature m_eType const enum vcl::font::FeatureType
include/xmloff/shapeimport.hxx:140
SdXML3DLightContext mbSpecular _Bool
jvmfwk/plugins/sunmajor/pluginlib/sunversion.hxx:102
@@ -314,21 +322,25 @@ sc/source/core/data/document.cxx:1244
(anonymous namespace)::BroadcastRecalcOnRefMoveHandler aSwitch sc::AutoCalcSwitch
sc/source/core/data/document.cxx:1245
(anonymous namespace)::BroadcastRecalcOnRefMoveHandler aBulk class ScBulkBroadcast
+sc/source/filter/html/htmlpars.cxx:3029
+ (anonymous namespace)::CSSHandler::MemStr mp const char *
+sc/source/filter/html/htmlpars.cxx:3030
+ (anonymous namespace)::CSSHandler::MemStr mn size_t
sc/source/filter/inc/htmlpars.hxx:614
ScHTMLQueryParser mnUnusedId ScHTMLTableId
-sc/source/filter/inc/sheetdatacontext.hxx:61
+sc/source/filter/inc/sheetdatacontext.hxx:62
oox::xls::SheetDataContext aReleaser class SolarMutexReleaser
-sc/source/filter/inc/xetable.hxx:1004
+sc/source/filter/inc/xetable.hxx:1002
XclExpCellTable maArrayBfr class XclExpArrayBuffer
-sc/source/filter/inc/xetable.hxx:1005
+sc/source/filter/inc/xetable.hxx:1003
XclExpCellTable maShrfmlaBfr class XclExpShrfmlaBuffer
-sc/source/filter/inc/xiescher.hxx:1201
+sc/source/filter/inc/xiescher.hxx:1202
XclImpDffPropSet maDummyStrm class SvMemoryStream
-sc/source/filter/inc/xihelper.hxx:329
+sc/source/filter/inc/xihelper.hxx:328
XclImpCachedValue mxTokArr XclImpCachedValue::ScTokenArrayPtr
-sc/source/filter/inc/xistream.hxx:171
+sc/source/filter/inc/xistream.hxx:172
XclImpBiff8StdDecrypter maCodec ::msfilter::MSCodec_Std97
-sc/source/filter/inc/xistream.hxx:193
+sc/source/filter/inc/xistream.hxx:194
XclImpBiff8CryptoAPIDecrypter maCodec ::msfilter::MSCodec_CryptoAPI
sc/source/filter/oox/worksheethelper.cxx:387
oox::xls::WorksheetGlobals mxProgressBar oox::ISegmentProgressBarRef
@@ -340,6 +352,16 @@ sc/source/filter/xml/xmltransformationi.hxx:121
ScXMLColumnNumberContext aType class rtl::OUString
sc/source/filter/xml/xmltransformationi.hxx:155
ScXMLDateTimeContext aType class rtl::OUString
+sc/source/ui/Accessibility/AccessibleText.cxx:52
+ ScViewForwarder maCellPos class ScAddress
+sc/source/ui/Accessibility/AccessibleText.cxx:273
+ ScPreviewCellViewForwarder maCellPos class ScAddress
+sc/source/ui/Accessibility/AccessibleText.cxx:289
+ ScPreviewHeaderCellViewForwarder maCellPos class ScAddress
+sc/source/ui/Accessibility/AccessibleText.cxx:305
+ ScPreviewNoteViewForwarder maCellPos class ScAddress
+sc/source/ui/Accessibility/AccessibleText.cxx:1309
+ ScCsvViewForwarder maBoundBox tools::Rectangle
sc/source/ui/inc/acredlin.hxx:58
ScAcceptChgDlg aReOpenIdle class Idle
sc/source/ui/inc/anyrefdg.hxx:119
@@ -370,7 +392,7 @@ sccomp/source/solver/DifferentialEvolution.hxx:35
DifferentialEvolutionAlgorithm maRandomDevice std::random_device
sccomp/source/solver/ParticelSwarmOptimization.hxx:56
ParticleSwarmOptimizationAlgorithm maRandomDevice std::random_device
-scripting/source/stringresource/stringresource.cxx:1317
+scripting/source/stringresource/stringresource.cxx:1318
stringresource::BinaryInput m_aData Sequence<sal_Int8>
sd/inc/anminfo.hxx:52
SdAnimationInfo maSecondSoundFile class rtl::OUString
@@ -388,17 +410,15 @@ sd/source/ui/table/TableDesignPane.hxx:106
sd::TableDesignPane aImpl class sd::TableDesignWidget
sd/source/ui/view/DocumentRenderer.cxx:1319
sd::DocumentRenderer::Implementation mxObjectShell SfxObjectShellRef
-sd/source/ui/view/viewshel.cxx:1216
+sd/source/ui/view/viewshel.cxx:1211
sd::KeepSlideSorterInSyncWithPageChanges m_aDrawLock sd::slidesorter::view::class SlideSorterView::DrawLock
-sd/source/ui/view/viewshel.cxx:1217
+sd/source/ui/view/viewshel.cxx:1212
sd::KeepSlideSorterInSyncWithPageChanges m_aModelLock sd::slidesorter::controller::class SlideSorterController::ModelChangeLock
-sd/source/ui/view/viewshel.cxx:1218
+sd/source/ui/view/viewshel.cxx:1213
sd::KeepSlideSorterInSyncWithPageChanges m_aUpdateLock sd::slidesorter::controller::class PageSelector::UpdateLock
-sd/source/ui/view/viewshel.cxx:1219
+sd/source/ui/view/viewshel.cxx:1214
sd::KeepSlideSorterInSyncWithPageChanges m_aContext sd::slidesorter::controller::class SelectionObserver::Context
-sfx2/source/dialog/itemconnect.cxx:139
- sfx::MultiControlWrapperHelper_Impl maVec sfx::ControlWrpVec
-sfx2/source/doc/doctempl.cxx:115
+sfx2/source/doc/doctempl.cxx:116
DocTempl::DocTempl_EntryData_Impl mxObjShell class SfxObjectShellLock
slideshow/source/engine/animationnodes/animationbasenode.hxx:89
slideshow::internal::AnimationBaseNode mpSubsetManager slideshow::internal::SubsettableShapeManagerSharedPtr
@@ -420,7 +440,7 @@ slideshow/source/engine/smilfunctionparser.cxx:504
slideshow::internal::(anonymous namespace)::ExpressionGrammar::definition identifier ::boost::spirit::rule<ScannerT>
starmath/inc/view.hxx:218
SmViewShell maGraphicController class SmGraphicController
-starmath/source/accessibility.hxx:273
+starmath/source/accessibility.hxx:271
SmEditSource rEditAcc class SmEditAccessible &
svgio/inc/svgcharacternode.hxx:89
svgio::svgreader::SvgTextPosition maY ::std::vector<double>
@@ -508,10 +528,6 @@ sw/source/ui/dbui/mmaddressblockpage.hxx:212
SwCustomizeAddressBlockDialog m_aTextFilter class TextFilter
sw/source/uibase/docvw/romenu.hxx:35
SwReadOnlyPopup m_aBuilder class VclBuilder
-sw/source/uibase/inc/chrdlg.hxx:43
- SwCharDlg m_nCharUrlId sal_uInt16
-sw/source/uibase/inc/chrdlg.hxx:45
- SwCharDlg m_nCharBrdId sal_uInt16
sw/source/uibase/inc/cption.hxx:44
SwCaptionDialog m_aTextFilter class TextFilterAutoConvert
sw/source/uibase/inc/glossary.hxx:95
@@ -555,13 +571,7 @@ vcl/inc/opengl/RenderList.hxx:29
vcl/inc/opengl/RenderList.hxx:30
Vertex lineData glm::vec4
vcl/inc/opengl/zone.hxx:46
- OpenGLVCLContextZone aZone class OpenGLZone
-vcl/inc/qt5/Qt5Graphics.hxx:61
- Qt5Graphics m_lastPopupRect class QRect
-vcl/inc/qt5/Qt5Object.hxx:34
- Qt5Object m_aSystemData struct SystemEnvData
-vcl/inc/qt5/Qt5Object.hxx:36
- Qt5Object m_pParent class Qt5Frame *
+ OpenGLVCLContextZone aZone const class OpenGLZone
vcl/inc/salmenu.hxx:42
SalMenuButtonItem mnId sal_uInt16
vcl/inc/salmenu.hxx:43
@@ -582,26 +592,24 @@ vcl/inc/unx/i18n_ic.hxx:46
SalI18N_InputContext maSwitchIMCallback XIMCallback
vcl/inc/unx/i18n_ic.hxx:47
SalI18N_InputContext maDestroyCallback XIMCallback
-vcl/source/app/salvtables.cxx:1396
+vcl/source/app/salvtables.cxx:1462
SalInstanceEntry m_aTextFilter class SalInstanceEntry::WeldTextFilter
vcl/source/gdi/jobset.cxx:35
ImplOldJobSetupData cDeviceName char [32]
vcl/source/gdi/jobset.cxx:36
ImplOldJobSetupData cPortName char [32]
-vcl/unx/gtk3/gtk3gtkinst.cxx:2248
+vcl/unx/gtk3/gtk3gtkinst.cxx:2255
CrippledViewport viewport GtkViewport
vcl/unx/gtk/a11y/atkhypertext.cxx:29
- (anonymous) atk_hyper_link AtkHyperlink
+ (anonymous) atk_hyper_link const AtkHyperlink
vcl/unx/gtk/a11y/atkwrapper.hxx:49
- AtkObjectWrapper aParent AtkObject
-vcl/unx/gtk/a11y/atkwrapper.hxx:80
- AtkObjectWrapperClass aParentClass AtkObjectClass
+ AtkObjectWrapper aParent const AtkObject
+vcl/unx/gtk/a11y/atkwrapper.hxx:78
+ AtkObjectWrapperClass aParentClass GtkWidgetAccessibleClass
vcl/unx/gtk/gloactiongroup.cxx:30
GLOAction parent_instance GObject
vcl/unx/gtk/glomenu.cxx:20
- GLOMenu parent_instance GMenuModel
-vcl/unx/kde5/KDE5FilePicker.hxx:81
- KDE5FilePicker allowRemoteUrls _Bool
+ GLOMenu parent_instance const GMenuModel
writerfilter/source/dmapper/PropertyMap.hxx:197
writerfilter::dmapper::SectionPropertyMap m_nDebugSectionNumber sal_Int32
xmloff/source/text/XMLTextListBlockContext.hxx:35
diff --git a/compilerplugins/clang/unusedfields.readonly.results b/compilerplugins/clang/unusedfields.readonly.results
index 704f95cd3d96..940c24fe2ed0 100644
--- a/compilerplugins/clang/unusedfields.readonly.results
+++ b/compilerplugins/clang/unusedfields.readonly.results
@@ -158,11 +158,11 @@ cui/source/options/optcolor.cxx:255
ColorConfigWindow_Impl aModuleOptions class SvtModuleOptions
cui/source/options/optpath.cxx:79
OptPath_Impl m_aDefOpt class SvtDefaultOptions
-cui/source/options/personalization.hxx:35
- SvxPersonalizationTabPage m_vDefaultPersonaImages VclPtr<class PushButton> [3]
-cui/source/options/personalization.hxx:86
+cui/source/options/personalization.hxx:38
+ SvxPersonalizationTabPage m_vDefaultPersonaImages VclPtr<class PushButton> [6]
+cui/source/options/personalization.hxx:102
SelectPersonaDialog m_vResultList VclPtr<class PushButton> [9]
-cui/source/options/personalization.hxx:87
+cui/source/options/personalization.hxx:103
SelectPersonaDialog m_vSearchSuggestions VclPtr<class PushButton> [6]
cui/source/options/treeopt.cxx:469
OptionsGroupInfo m_bLoadError _Bool
@@ -298,6 +298,12 @@ include/registry/refltype.hxx:69
RTUik m_Data5 sal_uInt32
include/sfx2/charmapcontrol.hxx:44
SfxCharmapCtrl m_pFavCharView VclPtr<class SvxCharViewControl> [16]
+include/sfx2/itemconnect.hxx:234
+ sfx::ItemControlConnection maItemWrp sfx::ItemControlConnection::ItemWrapperType
+include/sfx2/itemconnect.hxx:235
+ sfx::ItemControlConnection mxCtrlWrp std::unique_ptr<ControlWrpT>
+include/sfx2/itemwrapper.hxx:115
+ sfx::SingleItemWrapper mnSlot sal_uInt16
include/sfx2/msg.hxx:95
SfxTypeAttrib nAID sal_uInt16
include/sfx2/msg.hxx:96
@@ -318,6 +324,18 @@ include/svl/adrparse.hxx:52
SvAddressParser m_bHasFirst _Bool
include/svl/ondemand.hxx:58
OnDemandLocaleDataWrapper aSysLocale class SvtSysLocale
+include/svtools/ctrlbox.hxx:449
+ FontSizeBox nRelMin sal_uInt16
+include/svtools/ctrlbox.hxx:450
+ FontSizeBox nRelMax sal_uInt16
+include/svtools/ctrlbox.hxx:451
+ FontSizeBox nRelStep sal_uInt16
+include/svtools/ctrlbox.hxx:452
+ FontSizeBox nPtRelMin short
+include/svtools/ctrlbox.hxx:453
+ FontSizeBox nPtRelMax short
+include/svtools/ctrlbox.hxx:454
+ FontSizeBox nPtRelStep short
include/svtools/editsyntaxhighlighter.hxx:33
MultiLineEditSyntaxHighlight m_aColorConfig svtools::ColorConfig
include/svx/sdr/overlay/overlayanimatedbitmapex.hxx:51
@@ -332,10 +350,6 @@ include/svx/svdoedge.hxx:160
SdrEdgeObj mbBoundRectCalculationRunning _Bool
include/svx/svdpntv.hxx:170
SdrPaintView maDrawinglayerOpt class SvtOptionsDrawinglayer
-include/svx/SvxPresetListBox.hxx:35
- SvxPresetListBox maRenameHdl Link<class SvxPresetListBox *, void>
-include/svx/SvxPresetListBox.hxx:36
- SvxPresetListBox maDeleteHdl Link<class SvxPresetListBox *, void>
include/test/sheet/xdatapilottable.hxx:31
apitest::XDataPilotTable xCellForChange css::uno::Reference<css::table::XCell>
include/test/sheet/xdatapilottable.hxx:32
@@ -369,10 +383,10 @@ include/unoidl/unoidl.hxx:453
include/unotest/bootstrapfixturebase.hxx:37
test::BootstrapFixtureBase m_directories class test::Directories
include/vcl/filter/pdfdocument.hxx:200
- vcl::filter::PDFNameElement m_nLength sal_uInt64
+ vcl::filter::PDFNameElement m_nLength const sal_uInt64
include/vcl/opengl/OpenGLContext.hxx:57
OpenGLCapabilitySwitch mbLimitedShaderRegisters _Bool
-include/vcl/opengl/OpenGLContext.hxx:177
+include/vcl/opengl/OpenGLContext.hxx:176
OpenGLContext mpLastFramebuffer class OpenGLFramebuffer *
include/vcl/ppdparser.hxx:134
psp::PPDParser::PPDConstraint m_pKey1 const class psp::PPDKey *
@@ -440,26 +454,34 @@ sc/source/core/inc/adiasync.hxx:42
ScAddInAsync::(anonymous) pStr class rtl::OUString *
sc/source/core/inc/interpre.hxx:99
ScTokenStack pPointer const formula::FormulaToken *[512]
-sc/source/filter/inc/autofilterbuffer.hxx:178
+sc/source/filter/excel/xltoolbar.cxx:34
+ MSOExcelCommandConvertor msoToOOcmd IdToString
+sc/source/filter/excel/xltoolbar.cxx:35
+ MSOExcelCommandConvertor tcidToOOcmd IdToString
+sc/source/filter/inc/autofilterbuffer.hxx:181
oox::xls::FilterColumn mxSettings std::shared_ptr<FilterSettingsBase>
sc/source/filter/inc/commentsbuffer.hxx:42
oox::xls::CommentModel maAnchor css::awt::Rectangle
-sc/source/filter/inc/defnamesbuffer.hxx:85
- oox::xls::DefinedNameBase maRefAny css::uno::Any
sc/source/filter/inc/htmlpars.hxx:56
ScHTMLStyles maEmpty const class rtl::OUString
-sc/source/filter/inc/namebuff.hxx:85
+sc/source/filter/inc/namebuff.hxx:80
RangeNameBufferWK3::Entry nAbsInd sal_uInt16
-sc/source/filter/inc/qproform.hxx:57
+sc/source/filter/inc/qproform.hxx:55
QProToSc mnAddToken struct TokenId
-sc/source/filter/inc/stylesbuffer.hxx:675
+sc/source/filter/inc/stylesbuffer.hxx:676
oox::xls::Dxf mxAlignment std::shared_ptr<Alignment>
-sc/source/filter/inc/stylesbuffer.hxx:677
+sc/source/filter/inc/stylesbuffer.hxx:678
oox::xls::Dxf mxProtection std::shared_ptr<Protection>
-sc/source/filter/inc/workbooksettings.hxx:75
- oox::xls::CalcSettingsModel mbUseNlr _Bool
+sc/source/filter/inc/stylesbuffer.hxx:767
+ oox::xls::CellStyleBuffer maBuiltinStyles oox::xls::CellStyleBuffer::CellStyleVector
+sc/source/filter/inc/stylesbuffer.hxx:768
+ oox::xls::CellStyleBuffer maUserStyles oox::xls::CellStyleBuffer::CellStyleVector
sc/source/filter/inc/xepage.hxx:122
XclExpChartPageSettings maData struct XclPageData
+sc/source/filter/inc/xistyle.hxx:517
+ XclImpXFBuffer maBuiltinStyles XclImpXFBuffer::XclImpStyleList
+sc/source/filter/inc/xistyle.hxx:518
+ XclImpXFBuffer maUserStyles XclImpXFBuffer::XclImpStyleList
sc/source/filter/inc/xltracer.hxx:82
XclTracer mbEnabled _Bool
sc/source/filter/xml/xmlcelli.hxx:96
@@ -478,6 +500,8 @@ sc/source/ui/vba/vbaformatconditions.hxx:37
ScVbaFormatConditions mxRangeParent css::uno::Reference<ov::excel::XRange>
sc/source/ui/vba/vbaformatconditions.hxx:38
ScVbaFormatConditions mxParentRangePropertySet css::uno::Reference<css::beans::XPropertySet>
+sc/source/ui/vba/vbaworksheet.hxx:54
+ ScVbaWorksheet mxButtons ::rtl::Reference<ScVbaSheetObjectsBase> [2]
sd/inc/Outliner.hxx:280
SdOutliner mpFirstObj class SdrObject *
sd/inc/sdmod.hxx:116
@@ -498,6 +522,8 @@ sd/source/ui/sidebar/MasterPageContainer.cxx:155
sd::sidebar::MasterPageContainer::Implementation maSmallPreviewNotAvailable class Image
sd/source/ui/slideshow/showwindow.hxx:103
sd::ShowWindow mbMouseCursorHidden _Bool
+sd/source/ui/slidesorter/cache/SlsPageCacheManager.cxx:143
+ sd::slidesorter::cache::PageCacheManager::RecentlyUsedPageCaches maMap std::map<key_type, mapped_type>
sd/source/ui/slidesorter/inc/controller/SlsAnimator.hxx:97
sd::slidesorter::controller::Animator maElapsedTime ::canvas::tools::ElapsedTime
sd/source/ui/table/TableDesignPane.hxx:96
@@ -510,7 +536,7 @@ sfx2/source/appl/lnkbase2.cxx:95
sfx2::ImplDdeItem pLink class sfx2::SvBaseLink *
slideshow/source/engine/slideshowimpl.cxx:153
(anonymous namespace)::FrameSynchronization maTimer canvas::tools::ElapsedTime
-sot/source/sdstor/ucbstorage.cxx:407
+sot/source/sdstor/ucbstorage.cxx:408
UCBStorageStream_Impl m_aKey class rtl::OString
starmath/source/view.cxx:856
SmViewShell_Impl aOpts class SvtMiscOptions
@@ -528,7 +554,7 @@ svtools/source/control/headbar.cxx:38
ImplHeadItem maHelpId class rtl::OString
svtools/source/control/headbar.cxx:39
ImplHeadItem maImage class Image
-svtools/source/control/tabbar.cxx:207
+svtools/source/control/tabbar.cxx:208
ImplTabBarItem maHelpId class rtl::OString
svtools/source/dialogs/insdlg.cxx:46
OleObjectDescriptor cbSize sal_uInt32
@@ -574,14 +600,24 @@ sw/inc/acmplwrd.hxx:42
SwAutoCompleteWord m_LookupTree editeng::Trie
sw/inc/calc.hxx:196
SwCalc m_aSysLocale class SvtSysLocale
-sw/inc/hints.hxx:199
+sw/inc/hints.hxx:223
SwAttrSetChg m_bDelSet _Bool
-sw/inc/shellio.hxx:141
+sw/inc/shellio.hxx:142
SwReader pStg tools::SvRef<SotStorage>
sw/inc/swevent.hxx:71
SwCallMouseEvent::(anonymous union)::(anonymous) pFormat const class SwFrameFormat *
sw/source/core/access/accfrmobjmap.hxx:100
SwAccessibleChildMap maMap std::map<key_type, mapped_type, key_compare>
+sw/source/core/access/acchypertextdata.hxx:40
+ SwAccessibleHyperTextData maMap std::map<key_type, mapped_type, key_compare>
+sw/source/core/access/accmap.cxx:99
+ SwAccessibleContextMap_Impl maMap std::map<key_type, mapped_type, key_compare>
+sw/source/core/access/accmap.cxx:233
+ SwAccessibleShapeMap_Impl maMap std::map<key_type, mapped_type, SwShapeFunc>
+sw/source/core/access/accmap.cxx:590
+ SwAccessibleEventMap_Impl maMap std::map<key_type, mapped_type, key_compare>
+sw/source/core/access/accmap.cxx:630
+ SwAccessibleSelectedParas_Impl maMap std::map<key_type, mapped_type, key_compare>
sw/source/core/doc/swstylemanager.cxx:58
SwStyleManager aAutoCharPool class StylePool
sw/source/core/doc/swstylemanager.cxx:59
@@ -653,37 +689,43 @@ unoidl/source/unoidlprovider.cxx:455
unoidl/source/unoidlprovider.cxx:456
unoidl::detail::MapEntry data struct unoidl::detail::(anonymous namespace)::Memory32
unotools/source/config/pathoptions.cxx:90
- SvtPathOptions_Impl m_aEmptyString class rtl::OUString
+ SvtPathOptions_Impl m_aEmptyString const class rtl::OUString
unotools/source/config/saveopt.cxx:77
SvtSaveOptions_Impl bROUserAutoSave _Bool
vcl/inc/BitmapFastScaleFilter.hxx:31
- BitmapFastScaleFilter maSize class Size
+ BitmapFastScaleFilter maSize const class Size
vcl/inc/printerinfomanager.hxx:73
psp::PrinterInfoManager::SystemPrintQueue m_aComment class rtl::OUString
vcl/inc/salwtype.hxx:154
SalWheelMouseEvent mbDeltaIsPixel _Bool
vcl/inc/salwtype.hxx:201
- SalSurroundingTextSelectionChangeEvent mnStart sal_uLong
+ SalSurroundingTextSelectionChangeEvent mnStart const sal_uLong
vcl/inc/salwtype.hxx:202
- SalSurroundingTextSelectionChangeEvent mnEnd sal_uLong
+ SalSurroundingTextSelectionChangeEvent mnEnd const sal_uLong
vcl/inc/salwtype.hxx:208
SalQueryCharPositionEvent mnCharPos sal_uLong
-vcl/inc/svdata.hxx:267
- ImplSVNWFData mnStatusBarLowerRightOffset int
vcl/inc/svdata.hxx:273
+ ImplSVNWFData mnStatusBarLowerRightOffset int
+vcl/inc/svdata.hxx:279
ImplSVNWFData mbMenuBarDockingAreaCommonBG _Bool
-vcl/inc/svdata.hxx:283
+vcl/inc/svdata.hxx:289
ImplSVNWFData mbCenteredTabs _Bool
-vcl/inc/svdata.hxx:284
+vcl/inc/svdata.hxx:290
ImplSVNWFData mbNoActiveTabTextRaise _Bool
-vcl/inc/svdata.hxx:286
+vcl/inc/svdata.hxx:292
ImplSVNWFData mbProgressNeedsErase _Bool
+vcl/inc/svdata.hxx:301
+ ImplSVNWFData mbRolloverMenubar _Bool
+vcl/inc/toolbox.h:108
+ vcl::ToolBoxLayoutData m_aLineItemIds std::vector<sal_uInt16>
vcl/inc/unx/i18n_status.hxx:56
- vcl::I18NStatus m_aCurrentIM class rtl::OUString
+ vcl::I18NStatus m_aCurrentIM const class rtl::OUString
vcl/inc/unx/saldisp.hxx:288
- SalDisplay m_aInvalidScreenData struct SalDisplay::ScreenData
+ SalDisplay m_aInvalidScreenData const struct SalDisplay::ScreenData
+vcl/source/control/tabctrl.cxx:70
+ ImplTabCtrlData maLayoutPageIdToLine std::unordered_map<int, int>
vcl/source/filter/jpeg/Exif.hxx:62
- Exif::TiffHeader byteOrder sal_uInt16
+ Exif::TiffHeader byteOrder const sal_uInt16
vcl/source/filter/jpeg/transupp.h:132
(anonymous) slow_hflip boolean
... etc. - the rest is truncated
More information about the Libreoffice-commits
mailing list