}
else // notebook still not empty
{
- // change the selected page if it was deleted or became invalid
- int selNew;
- if ( m_nSelection == int(GetPageCount()) )
+ int selNew = TabCtrl_GetCurSel(m_hwnd);
+ if (selNew != -1)
{
- // last page deleted, make the new last page the new selection
- selNew = m_nSelection - 1;
+ // No selection change, just refresh the current selection.
+ // Because it could be that the slection index changed
+ // we need to update it.
+ // Note: this does not mean the selection it self changed.
+ m_nSelection = selNew;
+ m_pages[m_nSelection]->Refresh();
}
- else if ( int(nPage) <= m_nSelection )
- {
- // we must show another page, even if it has the same index
- selNew = m_nSelection;
- }
- else // nothing changes for the currently selected page
- {
- selNew = -1;
-
- // we still must refresh the current page: this needs to be done
- // for some unknown reason if the tab control shows the up-down
- // control (i.e. when there are too many pages) -- otherwise after
- // deleting a page nothing at all is shown
- if (m_nSelection >= 0)
- m_pages[m_nSelection]->Refresh();
- }
-
- if ( selNew != -1 )
+ else if (int(nPage) == m_nSelection)
{
+ // The selection was deleted.
+
+ // Determine new selection.
+ if (m_nSelection == int(GetPageCount()))
+ selNew = m_nSelection - 1;
+ else
+ selNew = m_nSelection;
+
// m_nSelection must be always valid so reset it before calling
// SetSelection()
m_nSelection = -1;
SetSelection(selNew);
}
+ else
+ {
+ wxFAIL; // Windows did not behave ok.
+ }
}
return pageRemoved;
#endif
}
+#if wxUSE_UXTHEME
long wxNotebook::MSWWindowProc(WXUINT nMsg, WXWPARAM wParam, WXLPARAM lParam)
{
static bool g_TestedForTheme = false;
- static bool g_UseTheme = false;
+ static bool g_supportsThemes = false;
switch ( nMsg )
{
case WM_ERASEBKGND:
{
int commCtrlVersion = wxTheApp->GetComCtl32Version() ;
- g_UseTheme = (commCtrlVersion >= 600);
+ g_supportsThemes = (commCtrlVersion >= 600);
g_TestedForTheme = true;
}
- // If using XP themes, it seems we can get away
+ // If currently an XP theme is active, it seems we can get away
// with not drawing a background, which reduces flicker.
- if (g_UseTheme)
- return true;
+ if (g_supportsThemes)
+ {
+ wxUxThemeEngine *p = wxUxThemeEngine::Get();
+ if (p && p->IsThemeActive() )
+ {
+ return true;
+ }
+ }
}
}
return wxControl::MSWWindowProc(nMsg, wParam, lParam);
}
-
+#endif // #if wxUSE_UXTHEME
#endif // wxUSE_NOTEBOOK