X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/d6f2a8911e509fd9e61f881cc881a97f5aa05ae8..79b7b95aed76eb742deef93d046886c20452fb36:/src/msw/tbar95.cpp diff --git a/src/msw/tbar95.cpp b/src/msw/tbar95.cpp index 54547adf94..b12dd40b5f 100644 --- a/src/msw/tbar95.cpp +++ b/src/msw/tbar95.cpp @@ -308,6 +308,13 @@ bool wxToolBar::MSWCreateToolbar(const wxPoint& pos, const wxSize& size) ::SendMessage(GetHwnd(), TB_SETEXTENDEDSTYLE, 0, TBSTYLE_EX_DRAWDDARROWS); #endif + // Fix a bug on e.g. the Silver theme on WinXP where control backgrounds + // are incorrectly drawn, by forcing the background to a specific colour. + int majorVersion, minorVersion; + wxGetOsVersion(& majorVersion, & minorVersion); + if (majorVersion < 6) + SetBackgroundColour(GetBackgroundColour()); + return true; } @@ -405,8 +412,16 @@ wxSize wxToolBar::DoGetBestSize() const sizeBest.y = size.cy; } - if (!IsVertical() && !(GetWindowStyle() & wxTB_NODIVIDER)) - sizeBest.y += 1; + if (!IsVertical()) + { + // Without the extra height, DoGetBestSize can report a size that's + // smaller than the actual window, causing windows to overlap slightly + // in some circumstances, leading to missing borders (especially noticeable + // in AUI layouts). + if (!(GetWindowStyle() & wxTB_NODIVIDER)) + sizeBest.y += 2; + sizeBest.y ++; + } CacheBestSize(sizeBest); @@ -932,7 +947,7 @@ bool wxToolBar::Realize() DoToggleTool(tool, true); } } - else if (tool->IsToggled()) + else if ( tool->IsToggled() ) { wxToolBarToolsList::compatibility_iterator nodePrev = node->GetPrevious(); int prevIndex = i - 1; @@ -946,7 +961,7 @@ bool wxToolBar::Realize() if ( tool->Toggle(false) ) DoToggleTool(tool, false); - prevButton.fsState = TBSTATE_ENABLED; + prevButton.fsState &= ~TBSTATE_CHECKED; nodePrev = nodePrev->GetPrevious(); prevIndex--; } @@ -1170,9 +1185,14 @@ bool wxToolBar::Realize() // message handlers // ---------------------------------------------------------------------------- -bool wxToolBar::MSWCommand(WXUINT WXUNUSED(cmd), WXWORD id) +bool wxToolBar::MSWCommand(WXUINT WXUNUSED(cmd), WXWORD id_) { - wxToolBarToolBase *tool = FindById((int)id); + // cast to signed is important as we compare this id with (signed) ints in + // FindById() and without the cast we'd get a positive int from a + // "negative" (i.e. > 32767) WORD + const int id = (signed short)id_; + + wxToolBarToolBase *tool = FindById(id); if ( !tool ) return false; @@ -1194,7 +1214,7 @@ bool wxToolBar::MSWCommand(WXUINT WXUNUSED(cmd), WXWORD id) // OnLeftClick() can veto the button state change - for buttons which // may be toggled only, of couse - if ( !OnLeftClick((int)id, toggled) && tool->CanBeToggled() ) + if ( !OnLeftClick(id, toggled) && tool->CanBeToggled() ) { // revert back tool->Toggle(!toggled); @@ -1772,7 +1792,7 @@ bool wxToolBar::HandlePaint(WXWPARAM wParam, WXLPARAM lParam) // Necessary in case we use a no-paint-on-size // style in the parent: the controls can disappear control->Refresh(false); - } + } if ( staticText && rectStaticText.Intersects(rectItem) ) {