summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorIvan Timofeev <timofeev.i.s@gmail.com>2012-06-09 21:23:46 +0400
committerCaolán McNamara <caolanm@redhat.com>2012-06-11 15:59:04 +0100
commitb29d04e9360920045cfa87f1e6263434915ae9a7 (patch)
tree62d1d85c34058e9bfcd5ed639e31519c45a25954
parentf11040c27f60e3b3c4e31c43de6b74f5b8676c31 (diff)
fdo#42379: hide separators before calculating line breaks
it is nesessary since commit 1703501a100cd6d52578baeb4e8097218b285ffb, ImplCalcBreaks looks for the last visible item. (cherry picked from commit 243fefb72897f45448d946d571397b7bc4893e7d) Signed-off-by: Caolán McNamara <caolanm@redhat.com>
-rw-r--r--vcl/source/window/toolbox.cxx62
1 files changed, 34 insertions, 28 deletions
diff --git a/vcl/source/window/toolbox.cxx b/vcl/source/window/toolbox.cxx
index 9da3a7adb588..a055c6a8e28a 100644
--- a/vcl/source/window/toolbox.cxx
+++ b/vcl/source/window/toolbox.cxx
@@ -2336,6 +2336,38 @@ Size ToolBox::ImplGetOptimalFloatingSize( FloatingSizeMode eMode )
return aCurrentSize;
}
+namespace
+{
+static void lcl_hideDoubleSeparators( std::vector< ImplToolItem >& rItems )
+{
+ bool bLastSep( true );
+ std::vector< ImplToolItem >::iterator it;
+ for ( it = rItems.begin(); it != rItems.end(); ++it )
+ {
+ if ( it->meType == TOOLBOXITEM_SEPARATOR )
+ {
+ it->mbVisible = sal_False;
+ if ( !bLastSep )
+ {
+ // check if any visible items have to appear behind it
+ std::vector< ImplToolItem >::iterator temp_it;
+ for ( temp_it = it+1; temp_it != rItems.end(); ++temp_it )
+ {
+ if ( ((temp_it->meType == TOOLBOXITEM_BUTTON) &&
+ temp_it->mbVisible) )
+ {
+ it->mbVisible = sal_True;
+ break;
+ }
+ }
+ }
+ bLastSep = true;
+ }
+ else if ( it->mbVisible )
+ bLastSep = false;
+ }
+}
+}
void ToolBox::ImplFormat( sal_Bool bResize )
{
@@ -2355,10 +2387,8 @@ void ToolBox::ImplFormat( sal_Bool bResize )
long nMax; // width of layoutarea in pixels
sal_uInt16 nFormatLine;
sal_Bool bMustFullPaint;
- sal_Bool bLastSep;
std::vector< ImplToolItem >::iterator it;
- std::vector< ImplToolItem >::iterator temp_it;
ImplDockingWindowWrapper *pWrapper = ImplGetDockingManager()->GetDockingWindowWrapper( this );
sal_Bool bIsInPopupMode = ImplIsInPopupMode();
@@ -2517,7 +2547,6 @@ void ToolBox::ImplFormat( sal_Bool bResize )
long nX = nLeft; // top-left offset
long nY = nTop;
nFormatLine = 1;
- bLastSep = sal_True;
// save old scroll rectangles and reset them
Rectangle aOldLowerRect = maLowerRect;
@@ -2552,6 +2581,8 @@ void ToolBox::ImplFormat( sal_Bool bResize )
// do we have any toolbox items at all ?
if ( !mpData->m_aItems.empty() || IsMenuEnabled() )
{
+ lcl_hideDoubleSeparators( mpData->m_aItems );
+
// compute line breaks and visible lines give the current window width (nMax)
// the break indicators will be stored within each item (it->mbBreak)
mnCurLines = ImplCalcBreaks( nMax, NULL, mbHorz );
@@ -2648,31 +2679,6 @@ void ToolBox::ImplFormat( sal_Bool bResize )
it = mpData->m_aItems.begin();
while ( it != mpData->m_aItems.end() )
{
- // hide double separators
- if ( it->meType == TOOLBOXITEM_SEPARATOR )
- {
- it->mbVisible = sal_False;
- if ( !bLastSep )
- {
- // check if any visible items have to appear behind it
- temp_it = it+1;
- while ( temp_it != mpData->m_aItems.end() )
- {
- if ( (temp_it->meType == TOOLBOXITEM_SEPARATOR) ||
- ((temp_it->meType == TOOLBOXITEM_BUTTON) &&
- temp_it->mbVisible) )
- {
- it->mbVisible = sal_True;
- break;
- }
- ++temp_it;
- }
- }
- bLastSep = sal_True;
- }
- else if ( it->mbVisible )
- bLastSep = sal_False;
-
it->mbShowWindow = sal_False;
// check for line break and advance nX/nY accordingly