]> git.saurik.com Git - wxWidgets.git/blobdiff - src/msw/notebook.cpp
Applied patch #886192: "Minor fix to XRC contrib"; Minor cosmetic cleanups.
[wxWidgets.git] / src / msw / notebook.cpp
index 094a91b3579eac49fcb9fe454b8b9e71f222ad40..da0ea9377ddd4aa37a1809601e7b44c2a33914c6 100644 (file)
@@ -496,37 +496,35 @@ wxNotebookPage *wxNotebook::DoRemovePage(size_t nPage)
     }
     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;
@@ -976,10 +974,11 @@ void wxNotebook::ApplyThemeBackground(wxWindow*, const wxColour&)
 #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:
@@ -988,19 +987,25 @@ long wxNotebook::MSWWindowProc(WXUINT nMsg, WXWPARAM wParam, WXLPARAM lParam)
             {
                 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