Rebased ref, commits from common ancestor: commit 359a32c8e00b6a3e913a63864e60485f3068cc28 Author: Jan-Marek Glogowski <glo...@fbihome.de> AuthorDate: Fri Sep 28 23:17:03 2018 +0000 Commit: Jan-Marek Glogowski <glo...@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 <glo...@fbihome.de> AuthorDate: Wed Sep 26 17:33:22 2018 +0200 Commit: Jan-Marek Glogowski <glo...@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 <glo...@fbihome.de> AuthorDate: Wed Sep 26 14:16:09 2018 +0200 Commit: Jan-Marek Glogowski <glo...@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 <glo...@fbihome.de> AuthorDate: Wed Sep 26 14:09:59 2018 +0200 Commit: Jan-Marek Glogowski <glo...@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 <glo...@fbihome.de> AuthorDate: Fri Sep 28 20:58:32 2018 +0000 Commit: Jan-Marek Glogowski <glo...@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 <glo...@fbihome.de> AuthorDate: Thu Sep 27 17:58:55 2018 +0200 Commit: Jan-Marek Glogowski <glo...@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 <glo...@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.mehrbr...@cib.de> AuthorDate: Fri Sep 28 09:28:12 2018 +0200 Commit: Samuel Mehrbrodt <samuel.mehrbr...@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.mehrbr...@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.mehrbr...@cib.de> AuthorDate: Thu Sep 27 17:03:12 2018 +0200 Commit: Samuel Mehrbrodt <samuel.mehrbr...@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.mehrbr...@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.k...@cib.de> AuthorDate: Wed Sep 26 16:28:19 2018 +0200 Commit: Thorsten Behrens <thorsten.behr...@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.behr...@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.gelm...@gelma.net> AuthorDate: Wed Sep 26 18:04:34 2018 +0200 Commit: Julien Nabet <serval2...@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 <serval2...@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.l...@collabora.com> AuthorDate: Thu Sep 27 21:46:18 2018 +0300 Commit: Michael Meeks <michael.me...@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.me...@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.gelm...@gelma.net> AuthorDate: Wed Sep 26 18:04:06 2018 +0200 Commit: Julien Nabet <serval2...@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 <serval2...@yahoo.fr> Tested-by: Julien Nabet <serval2...@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.gran...@collabora.co.uk> AuthorDate: Wed Sep 26 14:11:43 2018 +0200 Commit: Noel Grandin <noel.gran...@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.gran...@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 <glo...@fbihome.de> AuthorDate: Thu Aug 30 16:19:30 2018 +0200 Commit: Jan-Marek Glogowski <glo...@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 <glo...@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 <glo...@fbihome.de> AuthorDate: Fri Aug 31 16:43:18 2018 +0200 Commit: Jan-Marek Glogowski <glo...@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 <glo...@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.gelm...@gelma.net> AuthorDate: Thu Sep 27 12:22:13 2018 +0200 Commit: Julien Nabet <serval2...@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 <serval2...@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.gran...@collabora.co.uk> AuthorDate: Wed Sep 26 09:09:53 2018 +0200 Commit: Noel Grandin <noel.gran...@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.gran...@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 _______________________________________________ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits