summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSzymon Kłos <eszkadev@gmail.com>2017-01-15 20:20:26 +0100
committerSzymon Kłos <eszkadev@gmail.com>2017-01-16 14:07:24 +0000
commitb33715c00ea3a20e219d80845e72a2b37ba6c8cc (patch)
treef692d1f303fdd5ed2f99ec7ab4b23975c6d6a5ab
parent53f21cde330de4f0ad054a106e7a15654d79b7ee (diff)
tdf#102139 : prevent the notebookbar from switching to empty tab
Change-Id: I0b463fef98d7597c9b7f22ee84701519a0f2b575 Reviewed-on: https://gerrit.libreoffice.org/33100 Reviewed-by: Szymon Kłos <eszkadev@gmail.com> Tested-by: Szymon Kłos <eszkadev@gmail.com>
-rw-r--r--include/vcl/tabctrl.hxx3
-rw-r--r--vcl/source/control/tabctrl.cxx33
2 files changed, 35 insertions, 1 deletions
diff --git a/include/vcl/tabctrl.hxx b/include/vcl/tabctrl.hxx
index e9a9dc86f72d..fc7d1a8a9064 100644
--- a/include/vcl/tabctrl.hxx
+++ b/include/vcl/tabctrl.hxx
@@ -68,7 +68,7 @@ protected:
SAL_DLLPRIVATE Rectangle ImplGetTabRect( sal_uInt16 nPos, long nWidth = -1, long nHeight = -1 );
SAL_DLLPRIVATE void ImplChangeTabPage( sal_uInt16 nId, sal_uInt16 nOldId );
SAL_DLLPRIVATE bool ImplPosCurTabPage();
- SAL_DLLPRIVATE void ImplActivateTabPage( bool bNext );
+ virtual void ImplActivateTabPage( bool bNext );
SAL_DLLPRIVATE void ImplShowFocus();
SAL_DLLPRIVATE void ImplDrawItem(vcl::RenderContext& rRenderContext, ImplTabItem* pItem,
const Rectangle& rCurRect, bool bFirstInGroup,
@@ -208,6 +208,7 @@ public:
protected:
virtual bool ImplPlaceTabs( long nWidth ) override;
virtual void ImplPaint(vcl::RenderContext& rRenderContext, const Rectangle& rRect) override;
+ virtual void ImplActivateTabPage( bool bNext ) override;
private:
bool bLastContextWasSupported;
diff --git a/vcl/source/control/tabctrl.cxx b/vcl/source/control/tabctrl.cxx
index ee31141867f6..740628bf5570 100644
--- a/vcl/source/control/tabctrl.cxx
+++ b/vcl/source/control/tabctrl.cxx
@@ -2288,6 +2288,39 @@ void NotebookbarTabControl::SetCurPageId( sal_uInt16 nPageId )
TabControl::SetCurPageId( nPageId );
}
+void NotebookbarTabControl::ImplActivateTabPage( bool bNext )
+{
+ sal_uInt16 nCurPos = GetPagePos( GetCurPageId() );
+
+ if ( bNext && nCurPos + 1 < GetPageCount() )
+ {
+ sal_uInt16 nOldPos = nCurPos;
+ nCurPos++;
+
+ ImplTabItem* pItem = &mpTabCtrlData->maItemList[nCurPos];
+ while ( !pItem->mbEnabled && nCurPos + 1 < GetPageCount())
+ {
+ nCurPos++;
+ pItem = &mpTabCtrlData->maItemList[nCurPos];
+ }
+
+ if ( !pItem->mbEnabled )
+ nCurPos = nOldPos;
+ }
+ else if ( !bNext && nCurPos )
+ {
+ nCurPos--;
+ ImplTabItem* pItem = &mpTabCtrlData->maItemList[nCurPos];
+ while ( nCurPos && !pItem->mbEnabled )
+ {
+ nCurPos--;
+ pItem = &mpTabCtrlData->maItemList[nCurPos];
+ }
+ }
+
+ SelectTabPage( TabControl::GetPageId( nCurPos ) );
+}
+
sal_uInt16 NotebookbarTabControl::GetHeaderHeight()
{
return m_nHeaderHeight;