# This patch was done from wxWidgets-2.6.1-Patch01.zip
# found on the download page of wxwidgets
# 24/08/05 -- Xtophe
diff -Naur wxwidgets-orig/include/wx/msw/listbox.h wxwidgets/include/wx/msw/listbox.h
--- wxwidgets-orig/include/wx/msw/listbox.h	2005-04-11 20:18:36.000000000 +0000
+++ wxwidgets/include/wx/msw/listbox.h	2005-08-24 16:47:00.000000000 +0000
@@ -4,7 +4,7 @@
 // Author:      Julian Smart
 // Modified by:
 // Created:     01/02/97
-// RCS-ID:      $Id: listbox.h,v 1.42 2005/04/10 15:22:57 VZ Exp $
+// RCS-ID:      $Id: listbox.h,v 1.43 2005/06/16 15:36:42 JS Exp $
 // Copyright:   (c) Julian Smart
 // Licence:     wxWindows licence
 /////////////////////////////////////////////////////////////////////////////
@@ -151,6 +151,13 @@
 
     virtual wxSize DoGetBestSize() const;
 
+    // under XP when using "transition effect for menus and tooltips" if we
+    // return true for WM_PRINTCLIENT here then it causes noticable slowdown
+    virtual bool MSWShouldPropagatePrintChild()
+    {
+        return false;
+    }
+
 #if wxUSE_OWNER_DRAWN
     // control items
     wxListBoxItemsArray m_aItems;
diff -Naur wxwidgets-orig/include/wx/msw/uxthemep.h wxwidgets/include/wx/msw/uxthemep.h
--- wxwidgets-orig/include/wx/msw/uxthemep.h	2005-05-14 16:57:49.000000000 +0000
+++ wxwidgets/include/wx/msw/uxthemep.h	2005-08-24 16:47:00.000000000 +0000
@@ -12,7 +12,7 @@
 #ifndef __WINE_UXTHEME_H
 #define __WINE_UXTHEME_H
 
-#include <commctrl.h>
+#include "wx/msw/wrapcctl.h"
 
 typedef HANDLE HTHEME;
 
diff -Naur wxwidgets-orig/include/wx/msw/window.h wxwidgets/include/wx/msw/window.h
--- wxwidgets-orig/include/wx/msw/window.h	2005-05-31 20:47:32.000000000 +0000
+++ wxwidgets/include/wx/msw/window.h	2005-08-24 16:47:00.000000000 +0000
@@ -5,7 +5,7 @@
 // Modified by: Vadim Zeitlin on 13.05.99: complete refont of message handling,
 //              elimination of Default(), ...
 // Created:     01/02/97
-// RCS-ID:      $Id: window.h,v 1.146 2005/05/19 22:17:01 RD Exp $
+// RCS-ID:      $Id: window.h,v 1.147 2005/06/16 15:36:42 JS Exp $
 // Copyright:   (c) Julian Smart
 // Licence:     wxWindows licence
 /////////////////////////////////////////////////////////////////////////////
@@ -391,6 +391,14 @@
         return false;
     }
 
+    // some controls (e.g. wxListBox) need to set the return value themselves
+    //
+    // return true to let parent handle it if we don't, false otherwise
+    virtual bool MSWShouldPropagatePrintChild()
+    {
+        return true;
+    }
+
 
     // Responds to colour changes: passes event on to children.
     void OnSysColourChanged(wxSysColourChangedEvent& event);
diff -Naur wxwidgets-orig/src/generic/grid.cpp wxwidgets/src/generic/grid.cpp
--- wxwidgets-orig/src/generic/grid.cpp	2005-06-02 15:19:48.000000000 +0000
+++ wxwidgets/src/generic/grid.cpp	2005-08-24 16:47:00.000000000 +0000
@@ -4,7 +4,7 @@
 // Author:      Michael Bedward (based on code by Julian Smart, Robin Dunn)
 // Modified by: Robin Dunn, Vadim Zeitlin
 // Created:     1/08/1999
-// RCS-ID:      $Id: grid.cpp,v 1.339 2005/06/02 11:38:16 VZ Exp $
+// RCS-ID:      $Id: grid.cpp,v 1.341 2005/06/09 14:49:54 JS Exp $
 // Copyright:   (c) Michael Bedward (mbedward@ozemail.com.au)
 // Licence:     wxWindows licence
 /////////////////////////////////////////////////////////////////////////////
@@ -242,7 +242,8 @@
 public:
     wxGridCellEditorEvtHandler(wxGrid* grid, wxGridCellEditor* editor)
         : m_grid(grid),
-          m_editor(editor)
+          m_editor(editor),
+          m_inSetFocus(false)
     {
     }
 
@@ -250,10 +251,16 @@
     void OnKeyDown(wxKeyEvent& event);
     void OnChar(wxKeyEvent& event);
 
+    void SetInSetFocus(bool inSetFocus) { m_inSetFocus = inSetFocus; }
+
 private:
     wxGrid*             m_grid;
     wxGridCellEditor*   m_editor;
 
+    // Work around the fact that a focus kill event can be sent to
+    // a combobox within a set focus event.
+    bool                m_inSetFocus;
+    
     DECLARE_EVENT_TABLE()
     DECLARE_DYNAMIC_CLASS(wxGridCellEditorEvtHandler)
     DECLARE_NO_COPY_CLASS(wxGridCellEditorEvtHandler)
@@ -571,7 +578,7 @@
     // through in that case.
     if ((ctrl || alt) && !(ctrl && alt))
         return false;
-    
+
 #if wxUSE_UNICODE
     int key = event.GetUnicodeKey();
     bool keyOk = true;
@@ -588,7 +595,7 @@
     return keyOk;
 #else // !wxUSE_UNICODE
     int key = event.GetKeyCode();
-    if (key <= 255) 
+    if (key <= 255)
         return true;
     return false;
 #endif // wxUSE_UNICODE/!wxUSE_UNICODE
@@ -752,7 +759,7 @@
     wxTextCtrl* tc = Text();
     wxChar ch;
     long pos;
-    
+
 #if wxUSE_UNICODE
     ch = event.GetUnicodeKey();
     if (ch <= 127)
@@ -1106,7 +1113,7 @@
     tmpbuf[0] = (char) keycode;
     tmpbuf[1] = '\0';
     wxString strbuf(tmpbuf, *wxConvCurrent);
-#if wxUSE_INTL        
+#if wxUSE_INTL
     bool is_decimal_point = ( strbuf ==
        wxLocale::GetInfo(wxLOCALE_DECIMAL_POINT, wxLOCALE_CAT_NUMBER) );
 #else
@@ -1184,14 +1191,14 @@
         tmpbuf[0] = (char) keycode;
         tmpbuf[1] = '\0';
         wxString strbuf(tmpbuf, *wxConvCurrent);
-#if wxUSE_INTL        
+#if wxUSE_INTL
         bool is_decimal_point =
             ( strbuf == wxLocale::GetInfo(wxLOCALE_DECIMAL_POINT,
                                           wxLOCALE_CAT_NUMBER) );
 #else
         bool is_decimal_point = ( strbuf == _T(".") );
 #endif
-        if ( (keycode < 128) && 
+        if ( (keycode < 128) &&
              (wxIsdigit(keycode) || tolower(keycode) == 'e' ||
               is_decimal_point || keycode == '+' || keycode == '-') )
             return true;
@@ -1375,11 +1382,11 @@
         case WXK_SPACE:
             CBox()->SetValue(!CBox()->GetValue());
             break;
-            
+
         case '+':
             CBox()->SetValue(true);
             break;
-                
+
         case '-':
             CBox()->SetValue(false);
             break;
@@ -1460,6 +1467,14 @@
     wxASSERT_MSG(m_control,
                  wxT("The wxGridCellEditor must be Created first!"));
 
+    wxGridCellEditorEvtHandler* evtHandler = NULL;
+    if (m_control)
+        evtHandler = wxDynamicCast(m_control->GetEventHandler(), wxGridCellEditorEvtHandler);
+
+    // Don't immediately end if we get a kill focus event within BeginEdit
+    if (evtHandler)
+        evtHandler->SetInSetFocus(true);
+
     m_startValue = grid->GetTable()->GetValue(row, col);
 
     if (m_allowOthers)
@@ -1468,12 +1483,15 @@
     {
         // find the right position, or default to the first if not found
         int pos = Combo()->FindString(m_startValue);
-        if (pos == -1)
+        if (pos == wxNOT_FOUND)
             pos = 0;
         Combo()->SetSelection(pos);
     }
     Combo()->SetInsertionPointEnd();
     Combo()->SetFocus();
+
+    if (evtHandler)
+        evtHandler->SetInSetFocus(false);
 }
 
 bool wxGridCellChoiceEditor::EndEdit(int row, int col,
@@ -1525,6 +1543,10 @@
 
 void wxGridCellEditorEvtHandler::OnKillFocus(wxFocusEvent& event)
 {
+    // Don't disable the cell if we're just starting to edit it
+    if (m_inSetFocus)
+        return;
+
     // accept changes
     m_grid->DisableCellEditControl();
 
@@ -3783,7 +3805,7 @@
 {
     if (event.ButtonDown(wxMOUSE_BTN_LEFT) && FindFocus() != this)
         SetFocus();
-    
+
     m_owner->ProcessGridCellMouseEvent( event );
 }
 
@@ -4905,6 +4927,7 @@
                 break;
 
                 case WXGRID_CURSOR_SELECT_ROW:
+                {
                     if ( (row = YToRow( y )) >= 0 )
                     {
                         if ( m_selection )
@@ -4916,6 +4939,8 @@
                                                     event.MetaDown() );
                         }
                     }
+                }
+                break;
 
                 // default label to suppress warnings about "enumeration value
                 // 'xxx' not handled in switch
@@ -5127,6 +5152,7 @@
                 break;
 
                 case WXGRID_CURSOR_SELECT_COL:
+                {
                     if ( (col = XToCol( x )) >= 0 )
                     {
                         if ( m_selection )
@@ -5138,6 +5164,8 @@
                                                     event.MetaDown() );
                         }
                     }
+                }
+                break;
 
                 // default label to suppress warnings about "enumeration value
                 // 'xxx' not handled in switch
diff -Naur wxwidgets-orig/src/generic/splitter.cpp wxwidgets/src/generic/splitter.cpp
--- wxwidgets-orig/src/generic/splitter.cpp	2005-03-29 12:22:43.000000000 +0000
+++ wxwidgets/src/generic/splitter.cpp	2005-08-24 16:47:00.000000000 +0000
@@ -4,7 +4,7 @@
 // Author:      Julian Smart
 // Modified by:
 // Created:     01/02/97
-// RCS-ID:      $Id: splitter.cpp,v 1.114 2005/03/29 12:22:43 JS Exp $
+// RCS-ID:      $Id: splitter.cpp,v 1.115 2005/06/21 16:08:22 JS Exp $
 // Copyright:   (c) Julian Smart
 // Licence:     wxWindows licence
 /////////////////////////////////////////////////////////////////////////////
@@ -94,6 +94,11 @@
     if ( !wxWindow::Create(parent, id, pos, size, style, name) )
         return false;
 
+    if (size.x >= 0)
+        m_lastSize.x = size.x;
+    if (size.y >= 0)
+        m_lastSize.y = size.y;
+    
     m_permitUnsplitAlways = (style & wxSP_PERMIT_UNSPLIT) != 0;
 
     // FIXME: with this line the background is not erased at all under GTK1,
@@ -700,8 +705,8 @@
             y2 = size2;
         }
 
-        GetWindow1()->SetSize(border, border, w1, h1);
         GetWindow2()->SetSize(x2, y2, w2, h2);
+        GetWindow1()->SetSize(border, border, w1, h1);
     }
 
     wxClientDC dc(this);
diff -Naur wxwidgets-orig/src/msw/helpchm.cpp wxwidgets/src/msw/helpchm.cpp
--- wxwidgets-orig/src/msw/helpchm.cpp	2005-05-31 20:49:53.000000000 +0000
+++ wxwidgets/src/msw/helpchm.cpp	2005-08-24 16:47:00.000000000 +0000
@@ -4,7 +4,7 @@
 // Author:      Julian Smart
 // Modified by:
 // Created:     16/04/2000
-// RCS-ID:      $Id: helpchm.cpp,v 1.23 2005/05/24 08:53:32 CE Exp $
+// RCS-ID:      $Id: helpchm.cpp,v 1.24 2005/06/20 14:02:35 JS Exp $
 // Copyright:   (c) Julian Smart
 // Licence:     wxWindows licence
 /////////////////////////////////////////////////////////////////////////////
@@ -243,7 +243,6 @@
 
 wxCHMHelpController::~wxCHMHelpController()
 {
-	gs_htmlHelp(GetSuitableHWND(), 0, HH_CLOSE_ALL, 0L);
     UnloadHtmlHelpLibrary();
 }
 
diff -Naur wxwidgets-orig/src/msw/notebook.cpp wxwidgets/src/msw/notebook.cpp
--- wxwidgets-orig/src/msw/notebook.cpp	2005-05-31 20:49:55.000000000 +0000
+++ wxwidgets/src/msw/notebook.cpp	2005-08-24 16:47:00.000000000 +0000
@@ -4,7 +4,7 @@
 // Author:      Vadim Zeitlin
 // Modified by:
 // Created:     11.06.98
-// RCS-ID:      $Id: notebook.cpp,v 1.155 2005/05/30 11:23:27 JS Exp $
+// RCS-ID:      $Id: notebook.cpp,v 1.158 2005/06/19 19:11:11 JS Exp $
 // Copyright:   (c) 1998 Vadim Zeitlin <zeitlin@dptmaths.ens-cachan.fr>
 // Licence:     wxWindows licence
 ///////////////////////////////////////////////////////////////////////////////
@@ -93,6 +93,14 @@
 // the pointer to standard spin button wnd proc
 static WXFARPROC gs_wndprocNotebookSpinBtn = (WXFARPROC)NULL;
 
+// the pointer to standard tab control wnd proc
+static WXFARPROC gs_wndprocNotebook = (WXFARPROC)NULL; 
+
+LRESULT APIENTRY _EXPORT wxNotebookWndProc(HWND hwnd,
+                                           UINT message,
+                                           WPARAM wParam,
+                                           LPARAM lParam);
+
 #endif // USE_NOTEBOOK_ANTIFLICKER
 
 // ----------------------------------------------------------------------------
@@ -285,6 +293,7 @@
 
     LPCTSTR className = WC_TABCONTROL;
 
+#if USE_NOTEBOOK_ANTIFLICKER
     // SysTabCtl32 class has natively CS_HREDRAW and CS_VREDRAW enabled and it
     // causes horrible flicker when resizing notebook, so get rid of it by
     // using a class without these styles (but otherwise identical to it)
@@ -296,11 +305,14 @@
             // get a copy of standard class and modify it
             WNDCLASS wc;
 
-            if ( ::GetClassInfo(::GetModuleHandle(NULL), WC_TABCONTROL, &wc) )
+            if ( ::GetClassInfo(NULL, WC_TABCONTROL, &wc) )
             {
+                gs_wndprocNotebook =
+                    wx_reinterpret_cast(WXFARPROC, wc.lpfnWndProc);
                 wc.lpszClassName = wxT("_wx_SysTabCtl32");
                 wc.style &= ~(CS_HREDRAW | CS_VREDRAW);
-
+                wc.hInstance = wxGetInstance();
+                wc.lpfnWndProc = wxNotebookWndProc;
                 s_clsNotebook.Register(wc);
             }
             else
@@ -318,6 +330,7 @@
             className = s_clsNotebook.GetName().c_str();
         }
     }
+#endif // USE_NOTEBOOK_ANTIFLICKER
 
     if ( !CreateControl(parent, id, pos, size, style | wxTAB_TRAVERSAL,
                         wxDefaultValidator, name) )
@@ -789,6 +802,16 @@
                             hwnd, message, wParam, lParam);
 }
 
+LRESULT APIENTRY _EXPORT wxNotebookWndProc(HWND hwnd,
+                                           UINT message,
+                                           WPARAM wParam,
+                                           LPARAM lParam)
+{
+    return ::CallWindowProc(CASTWNDPROC gs_wndprocNotebook,
+                            hwnd, message, wParam, lParam);
+}
+
+ 
 
 void wxNotebook::OnEraseBackground(wxEraseEvent& WXUNUSED(event))
 {
@@ -918,7 +941,7 @@
         RefreshRect(wxRect(0, rc.top, rc.left, height), false);
         RefreshRect(wxRect(0, rc.bottom, widthNbook, heightNbook - rc.bottom),
                     false);
-        RefreshRect(wxRect(rc.right, rc.top, widthNbook - rc.bottom, height),
+        RefreshRect(wxRect(rc.right, rc.top, widthNbook - rc.right, height),
                     false);
     }
 
@@ -967,7 +990,7 @@
       {
         wxNotebookPage *pPage = m_pages[sel];
         pPage->Show(true);
-        
+
         // As per bug report:
         // http://sourceforge.net/tracker/index.php?func=detail&aid=1150659&group_id=9863&atid=109863,
         // we should not set the page focus (and thereby the focus for
@@ -1102,17 +1125,17 @@
     if ( child )
         ::MapWindowPoints(GetHwnd(), GetHwndOf(child), (POINT *)&rc, 2);
 
-
-    // apparently DrawThemeBackground() modifies the rect passed to it and if we
-    // don't do these adjustments, there are some drawing artifacts which are
-    // only visible with some non default themes; so modify the rect here using
-    // the magic numbers below so that it still paints the correct area
-    rc.left   -= 2;
-    rc.top    -= 2;
-    rc.right  += 4;
-    rc.bottom += 5;
-
-
+    // we have the content area (page size), but we need to draw all of the
+    // background for it to be aligned correctly
+    wxUxThemeEngine::Get()->GetThemeBackgroundExtent
+                            (
+                                theme,
+                                (HDC) hDC,
+                                9 /* TABP_PANE */,
+                                0,
+                                &rc,
+                                &rc
+                            );
     wxUxThemeEngine::Get()->DrawThemeBackground
                             (
                                 theme,
diff -Naur wxwidgets-orig/src/msw/tbar95.cpp wxwidgets/src/msw/tbar95.cpp
--- wxwidgets-orig/src/msw/tbar95.cpp	2005-05-31 20:49:56.000000000 +0000
+++ wxwidgets/src/msw/tbar95.cpp	2005-08-24 16:47:00.000000000 +0000
@@ -4,7 +4,7 @@
 // Author:      Julian Smart
 // Modified by:
 // Created:     04/01/98
-// RCS-ID:      $Id: tbar95.cpp,v 1.153 2005/05/27 09:14:58 JS Exp $
+// RCS-ID:      $Id: tbar95.cpp,v 1.156 2005/06/09 20:18:24 VZ Exp $
 // Copyright:   (c) Julian Smart
 // Licence:     wxWindows licence
 /////////////////////////////////////////////////////////////////////////////
@@ -93,9 +93,6 @@
 // these values correspond to those used by comctl32.dll
 #define DEFAULTBITMAPX   16
 #define DEFAULTBITMAPY   15
-#define DEFAULTBUTTONX   24
-#define DEFAULTBUTTONY   24
-#define DEFAULTBARHEIGHT 27
 
 // ----------------------------------------------------------------------------
 // wxWin macros
@@ -245,31 +242,20 @@
     SetBackgroundColour(wxSystemSettings::GetColour(wxSYS_COLOUR_BTNFACE));
     SetFont(wxSystemSettings::GetFont(wxSYS_DEFAULT_GUI_FONT));
 
-    // workaround for flat toolbar on Windows XP classic style
+    // workaround for flat toolbar on Windows XP classic style: we have to set
+    // the style after creating the control, doing it at creation time doesn't
+    // work
 #if wxUSE_UXTHEME
     if ( style & wxTB_FLAT )
     {
-        // Testing for an active theme appears to be unnecessary (see comments in patch 1204217).
-        // Disabling the test brings back separator lines.
-        // However, the separators can look ugly and distracting, especially between controls,
-        // so I'm restoring the test and removing the separators again - JACS
-#if 1
-        wxUxThemeEngine *p = wxUxThemeEngine::Get();
-        if ( !p || !p->IsThemeActive() )
-#endif            
-        {
-            DWORD dwToolbarStyle;
-
-            dwToolbarStyle = (DWORD)::SendMessage(GetHwnd(), TB_GETSTYLE, 0, 0L );
+        LRESULT style = ::SendMessage(GetHwnd(), TB_GETSTYLE, 0, 0L);
 
-            if ((dwToolbarStyle & TBSTYLE_FLAT) == 0)
-            {
-                dwToolbarStyle |= TBSTYLE_FLAT;
-                ::SendMessage(GetHwnd(), TB_SETSTYLE, 0, (LPARAM)dwToolbarStyle );
-            }
+        if ( !(style & TBSTYLE_FLAT) )
+        {
+            ::SendMessage(GetHwnd(), TB_SETSTYLE, 0, style | TBSTYLE_FLAT);
         }
     }
-#endif
+#endif // wxUSE_UXTHEME
 
     return true;
 }
@@ -897,7 +883,7 @@
                                 wxToolBarToolBase *tool = nodePrev->GetData();
                                 if ( !tool->IsButton() || tool->GetKind() != wxITEM_RADIO )
                                     break;
-                                
+
                                 if ( tool->Toggle(false) )
                                 {
                                     DoToggleTool(tool, false);
@@ -905,7 +891,7 @@
                                 prevButton.fsState = TBSTATE_ENABLED;
                                 nodePrev = nodePrev->GetPrevious();
                                 prevIndex--;
-                            }                            
+                            }
                         }
 
                         isRadio = true;
@@ -1249,14 +1235,15 @@
         return (wxToolBarToolBase *)NULL;
     }
 
-    // if comctl32 version < 4.71 wxToolBar95 adds dummy spacers
-#if defined(_WIN32_IE) && (_WIN32_IE >= 0x400 )
+    // when TB_SETBUTTONINFO is available (both during compile- and run-time),
+    // we don't use the dummy separators hack
+#ifdef TB_SETBUTTONINFO
     if ( wxApp::GetComCtl32Version() >= 471 )
     {
         return m_tools.Item((size_t)index)->GetData();
     }
     else
-#endif
+#endif // TB_SETBUTTONINFO
     {
         return GetItemSkippingDummySpacers( m_tools, (size_t) index );
     }
diff -Naur wxwidgets-orig/src/msw/window.cpp wxwidgets/src/msw/window.cpp
--- wxwidgets-orig/src/msw/window.cpp	2005-05-31 20:49:58.000000000 +0000
+++ wxwidgets/src/msw/window.cpp	2005-08-24 16:47:00.000000000 +0000
@@ -4,7 +4,7 @@
 // Author:      Julian Smart
 // Modified by: VZ on 13.05.99: no more Default(), MSWOnXXX() reorganisation
 // Created:     04/01/98
-// RCS-ID:      $Id: window.cpp,v 1.619 2005/05/31 09:20:34 JS Exp $
+// RCS-ID:      $Id: window.cpp,v 1.622 2005/06/21 16:06:45 JS Exp $
 // Copyright:   (c) Julian Smart
 // Licence:     wxWindows licence
 /////////////////////////////////////////////////////////////////////////////
@@ -2353,6 +2353,7 @@
             break;
 #endif // !__WXWINCE__
 
+#if !(defined(_WIN32_WCE) && _WIN32_WCE < 400)
         case WM_WINDOWPOSCHANGED:
             {
                 WINDOWPOS *lpPos = (WINDOWPOS *)lParam;
@@ -2365,19 +2366,15 @@
                     AutoHRGN hrgnClient(::CreateRectRgnIndirect(&rc));
                     AutoHRGN hrgnNew(::CreateRectRgn(lpPos->x,  lpPos->y,
                                                      lpPos->cx, lpPos->cy));
-                    AutoHRGN hrgn(::CreateRectRgn(0, 0, 0, 0));
 
                     // we need to invalidate any new exposed areas here
                     // to force them to repaint
-                    if ( ::CombineRgn(hrgn, hrgnNew, hrgnClient, RGN_DIFF) != NULLREGION )
-                        ::InvalidateRgn(GetHwnd(), hrgn, TRUE);
-                    if ( ::CombineRgn(hrgn, hrgnClient, hrgnNew, RGN_DIFF) != NULLREGION )
-                        ::InvalidateRgn(GetHwnd(), hrgn, TRUE);
-
+                    if ( ::CombineRgn(hrgnNew, hrgnNew, hrgnClient, RGN_DIFF) != NULLREGION )
+                        ::InvalidateRgn(GetHwnd(), hrgnNew, TRUE);
                 }
             }
             break;
-
+#endif
 #if !defined(__WXMICROWIN__) && !defined(__WXWINCE__)
         case WM_ACTIVATEAPP:
             // This implicitly sends a wxEVT_ACTIVATE_APP event
@@ -4150,6 +4147,11 @@
     if ( IsTopLevel() || InheritsBackgroundColour() )
         return false;
 
+    // sometimes we don't want the parent to handle it at all, instead
+    // return whatever value this window wants
+    if ( !MSWShouldPropagatePrintChild() )
+        return MSWPrintChild(hDC, (wxWindow *)this);
+
     for ( wxWindow *win = GetParent(); win; win = win->GetParent() )
     {
         if ( win->MSWPrintChild(hDC, (wxWindow *)this) )
