]> git.saurik.com Git - wxWidgets.git/commitdiff
move Freeze() and Thaw() to wxWindowBase to ensure that they behave consistently...
authorVadim Zeitlin <vadim@wxwidgets.org>
Sat, 5 Jan 2008 00:21:31 +0000 (00:21 +0000)
committerVadim Zeitlin <vadim@wxwidgets.org>
Sat, 5 Jan 2008 00:21:31 +0000 (00:21 +0000)
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@51018 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775

30 files changed:
docs/changes.txt
docs/latex/wx/window.tex
include/wx/dfb/window.h
include/wx/generic/listctrl.h
include/wx/generic/treectlg.h
include/wx/gtk/textctrl.h
include/wx/gtk1/textctrl.h
include/wx/mac/carbon/window.h
include/wx/mgl/window.h
include/wx/msw/toplevel.h
include/wx/msw/window.h
include/wx/os2/window.h
include/wx/palmos/window.h
include/wx/richtext/richtextctrl.h
include/wx/window.h
include/wx/x11/textctrl.h
src/common/wincmn.cpp
src/dfb/window.cpp
src/generic/listctrl.cpp
src/generic/treectlg.cpp
src/gtk/textctrl.cpp
src/gtk1/textctrl.cpp
src/mac/carbon/window.cpp
src/mgl/window.cpp
src/msw/toplevel.cpp
src/msw/window.cpp
src/os2/window.cpp
src/palmos/window.cpp
src/richtext/richtextctrl.cpp
src/x11/textctrl.cpp

index 107f4c271d01ed54999059a7221f47744e1ca460..bd737902388a888d7bc0efffdb0403f99273bef4 100644 (file)
@@ -68,6 +68,10 @@ Changes in behaviour not resulting in compilation errors, please read this!
   sizes of the sizer items to be in the same proportion as the items
   proportions to return to the old behaviour.
 
   sizes of the sizer items to be in the same proportion as the items
   proportions to return to the old behaviour.
 
+- wxWindow::Freeze/Thaw() are not virtual any more, if you overrode them in
+  your code you need to override DoFreeze/Thaw() instead now.
+
+
 Changes in behaviour which may result in compilation errors
 -----------------------------------------------------------
 
 Changes in behaviour which may result in compilation errors
 -----------------------------------------------------------
 
@@ -128,7 +132,7 @@ Changes in behaviour which may result in compilation errors
 
 - Removed global GetLine() function from wx/protocol/protocol.h, use
   wxProtocol::ReadLine() instead.
 
 - Removed global GetLine() function from wx/protocol/protocol.h, use
   wxProtocol::ReadLine() instead.
-  
+
 - wxVariant no longer derives from wxObject. wxVariantData also no longer
   derives from wxObject; instead of using wxDynamicCast with wxVariantData you
   can use the macro wxDynamicCastVariantData with the same arguments.
 - wxVariant no longer derives from wxObject. wxVariantData also no longer
   derives from wxObject; instead of using wxDynamicCast with wxVariantData you
   can use the macro wxDynamicCastVariantData with the same arguments.
index 7bda507e7aa4ba22db77e8a0ac7e7f507ec39f94..cf6e0c3ecab346b34e6c04dc51c7de9a8eabfb7e 100644 (file)
@@ -728,7 +728,8 @@ subwindows.
 Freezes the window or, in other words, prevents any updates from taking place
 on screen, the window is not redrawn at all. \helpref{Thaw}{wxwindowthaw} must
 be called to reenable window redrawing. Calls to these two functions may be
 Freezes the window or, in other words, prevents any updates from taking place
 on screen, the window is not redrawn at all. \helpref{Thaw}{wxwindowthaw} must
 be called to reenable window redrawing. Calls to these two functions may be
-nested.
+nested but to ensure that the window is properly repainted again, you must thaw
+it exactly as many times as you froze it.
 
 This method is useful for visual appearance optimization (for example, it
 is a good idea to use it before doing many large text insertions in a row into
 
 This method is useful for visual appearance optimization (for example, it
 is a good idea to use it before doing many large text insertions in a row into
index 684b282a4f20d9fe56456eaa0cc4cc225bfa0a7d..89ee39d46f27b26bc95ca12e6451cbbc9fe7fc49 100644 (file)
@@ -75,9 +75,6 @@ public:
     virtual void Refresh(bool eraseBackground = true,
                          const wxRect *rect = (const wxRect *) NULL);
     virtual void Update();
     virtual void Refresh(bool eraseBackground = true,
                          const wxRect *rect = (const wxRect *) NULL);
     virtual void Update();
-    virtual void Freeze();
-    virtual void Thaw();
-    virtual bool IsFrozen() const { return m_frozenness > 0; }
 
     virtual bool SetCursor(const wxCursor &cursor);
     virtual bool SetFont(const wxFont &font) { m_font = font; return true; }
 
     virtual bool SetCursor(const wxCursor &cursor);
     virtual bool SetFont(const wxFont &font) { m_font = font; return true; }
@@ -128,6 +125,8 @@ protected:
     virtual void DoCaptureMouse();
     virtual void DoReleaseMouse();
 
     virtual void DoCaptureMouse();
     virtual void DoReleaseMouse();
 
+    virtual void DoThaw();
+
     // move the window to the specified location and resize it: this is called
     // from both DoSetSize() and DoSetClientSize() and would usually just call
     // ::MoveWindow() except for composite controls which will want to arrange
     // move the window to the specified location and resize it: this is called
     // from both DoSetSize() and DoSetClientSize() and would usually just call
     // ::MoveWindow() except for composite controls which will want to arrange
@@ -183,9 +182,6 @@ private:
     // don't access it directly)
     wxRect m_rect;
 
     // don't access it directly)
     wxRect m_rect;
 
-    // number of calls to Freeze() minus number of calls to Thaw()
-    unsigned m_frozenness;
-
     // overlays for this window (or NULL if it doesn't have any)
     wxDfbOverlaysList *m_overlays;
 
     // overlays for this window (or NULL if it doesn't have any)
     wxDfbOverlaysList *m_overlays;
 
index 8db983e3c79a50b0d7e72f9287d9ce4a8d8c4210..1dedb608c686de625b5b12c57b2dcdfccee7301d 100644 (file)
@@ -174,9 +174,6 @@ public:
     virtual void Refresh(bool eraseBackground = true,
                          const wxRect *rect = NULL);
 
     virtual void Refresh(bool eraseBackground = true,
                          const wxRect *rect = NULL);
 
-    virtual void Freeze();
-    virtual void Thaw();
-
     virtual bool SetBackgroundColour( const wxColour &colour );
     virtual bool SetForegroundColour( const wxColour &colour );
     virtual wxColour GetBackgroundColour() const;
     virtual bool SetBackgroundColour( const wxColour &colour );
     virtual bool SetForegroundColour( const wxColour &colour );
     virtual wxColour GetBackgroundColour() const;
@@ -218,6 +215,9 @@ protected:
 
     virtual wxSize DoGetBestSize() const;
 
 
     virtual wxSize DoGetBestSize() const;
 
+    virtual void DoFreeze();
+    virtual void DoThaw();
+
     // return the text for the given column of the given item
     virtual wxString OnGetItemText(long item, long column) const;
 
     // return the text for the given column of the given item
     virtual wxString OnGetItemText(long item, long column) const;
 
index f57802cf70ac0a97fc3ae0c3612bc0ee30893285..c21b331fe6e241ff9443cfe60b70a4db27c1a70c 100644 (file)
@@ -197,8 +197,6 @@ public:
     virtual bool SetBackgroundColour(const wxColour& colour);
     virtual bool SetForegroundColour(const wxColour& colour);
 
     virtual bool SetBackgroundColour(const wxColour& colour);
     virtual bool SetForegroundColour(const wxColour& colour);
 
-    virtual void Freeze();
-    virtual void Thaw();
     virtual void Refresh(bool eraseBackground = true, const wxRect *rect = NULL);
 
     virtual bool SetFont( const wxFont &font );
     virtual void Refresh(bool eraseBackground = true, const wxRect *rect = NULL);
 
     virtual bool SetFont( const wxFont &font );
@@ -253,7 +251,6 @@ protected:
     bool                 m_lastOnSame;  // last click on the same item as prev
     wxImageList         *m_imageListButtons;
 
     bool                 m_lastOnSame;  // last click on the same item as prev
     wxImageList         *m_imageListButtons;
 
-    int                  m_freezeCount;
     int                  m_dragCount;
     wxPoint              m_dragStart;
     wxGenericTreeItem   *m_dropTarget;
     int                  m_dragCount;
     wxPoint              m_dragStart;
     wxGenericTreeItem   *m_dropTarget;
@@ -273,6 +270,9 @@ protected:
     // the common part of all ctors
     void Init();
 
     // the common part of all ctors
     void Init();
 
+    // overridden wxWindow methods 
+    virtual void DoThaw();
+
     // misc helpers
     void SendDeleteEvent(wxGenericTreeItem *itemBeingDeleted);
 
     // misc helpers
     void SendDeleteEvent(wxGenericTreeItem *itemBeingDeleted);
 
index 28554b1f9661ddafd79754108ad3aec337471b26..19d716fcab6ed241425754fa539eb4d0c9eb44c9 100644 (file)
@@ -121,11 +121,6 @@ public:
 
     void SetUpdateFont(bool WXUNUSED(update)) { }
 
 
     void SetUpdateFont(bool WXUNUSED(update)) { }
 
-    // GTK+ textctrl is so dumb that you need to freeze/thaw it manually to
-    // avoid horrible flicker/scrolling back and forth
-    virtual void Freeze();
-    virtual void Thaw();
-
     // implementation only from now on
 
     // tell the control to ignore next text changed signal
     // implementation only from now on
 
     // tell the control to ignore next text changed signal
@@ -148,9 +143,6 @@ public:
     static wxVisualAttributes
     GetClassDefaultAttributes(wxWindowVariant variant = wxWINDOW_VARIANT_NORMAL);
 
     static wxVisualAttributes
     GetClassDefaultAttributes(wxWindowVariant variant = wxWINDOW_VARIANT_NORMAL);
 
-    // has the control been frozen by Freeze()?
-    bool IsFrozen() const { return m_freezeCount > 0; }
-
 protected:
     // wxGTK-specific: called recursively by Enable,
     // to give widgets an oppprtunity to correct their colours after they
 protected:
     // wxGTK-specific: called recursively by Enable,
     // to give widgets an oppprtunity to correct their colours after they
@@ -162,6 +154,9 @@ protected:
     virtual void DoApplyWidgetStyle(GtkRcStyle *style);
     virtual GdkWindow *GTKGetWindow(wxArrayGdkWindows& windows) const;
 
     virtual void DoApplyWidgetStyle(GtkRcStyle *style);
     virtual GdkWindow *GTKGetWindow(wxArrayGdkWindows& windows) const;
 
+    virtual void DoFreeze();
+    virtual void DoThaw();
+
     // common part of all ctors
     void Init();
 
     // common part of all ctors
     void Init();
 
@@ -217,8 +212,6 @@ private:
     // a dummy one when frozen
     GtkTextBuffer *m_buffer;
 
     // a dummy one when frozen
     GtkTextBuffer *m_buffer;
 
-    // number of calls to Freeze() minus number of calls to Thaw()
-    unsigned m_freezeCount;
     GtkTextMark* m_showPositionOnThaw;
 
     // For wxTE_AUTO_URL
     GtkTextMark* m_showPositionOnThaw;
 
     // For wxTE_AUTO_URL
index 5abad1b57b692c125d95c7d205d0f1e4fb90f7d2..5c7a3ca1bce1f9952e361daac7c8e513515103f1 100644 (file)
@@ -139,11 +139,6 @@ public:
 
     void SetModified() { m_modified = true; }
 
 
     void SetModified() { m_modified = true; }
 
-    // GTK+ textctrl is so dumb that you need to freeze/thaw it manually to
-    // avoid horrible flicker/scrolling back and forth
-    virtual void Freeze();
-    virtual void Thaw();
-
     // textctrl specific scrolling
     virtual bool ScrollLines(int lines);
     virtual bool ScrollPages(int pages);
     // textctrl specific scrolling
     virtual bool ScrollLines(int lines);
     virtual bool ScrollPages(int pages);
@@ -170,6 +165,10 @@ protected:
     // common part of all ctors
     void Init();
 
     // common part of all ctors
     void Init();
 
+    // overridden wxWindow methods
+    virtual void DoFreeze();
+    virtual void DoThaw();
+
     // get the vertical adjustment, if any, NULL otherwise
     GtkAdjustment *GetVAdj() const;
 
     // get the vertical adjustment, if any, NULL otherwise
     GtkAdjustment *GetVAdj() const;
 
index dfb4e8d059d115b0d4d07fc570afe06b9ddf3819..3410dcb801fda59e3bf1ccbe4b2b0f925be0e891 100644 (file)
@@ -62,9 +62,6 @@ public:
 
     virtual void Refresh( bool eraseBackground = true,
                           const wxRect *rect = NULL );
 
     virtual void Refresh( bool eraseBackground = true,
                           const wxRect *rect = NULL );
-    virtual void Freeze();
-    virtual void Thaw();
-    virtual bool IsFrozen() const;
 
     virtual void Update() ;
     virtual void ClearBackground();
 
     virtual void Update() ;
     virtual void ClearBackground();
@@ -86,6 +83,9 @@ protected:
     virtual void DoEnable( bool enable );
     virtual bool DoPopupMenu( wxMenu *menu, int x, int y );
 
     virtual void DoEnable( bool enable );
     virtual bool DoPopupMenu( wxMenu *menu, int x, int y );
 
+    virtual void DoFreeze();
+    virtual void DoThaw();
+
 public:
     virtual void SetScrollbar( int orient, int pos, int thumbVisible,
                                int range, bool refresh = true );
 public:
     virtual void SetScrollbar( int orient, int pos, int thumbVisible,
                                int range, bool refresh = true );
@@ -262,9 +262,6 @@ protected:
     // For controls like radio buttons which are genuinely composite
     wxList              m_subControls;
 
     // For controls like radio buttons which are genuinely composite
     wxList              m_subControls;
 
-    // number of calls to Freeze() minus number of calls to Thaw()
-    unsigned int        m_frozenness;
-
     // the peer object, allowing for cleaner API support
     wxMacControl *       m_peer ;
 
     // the peer object, allowing for cleaner API support
     wxMacControl *       m_peer ;
 
index 4c3091bd4f6e407149c315134ad3420bb64ffe08..738bc927fb02cce587f1365a4caa8fc303346c5a 100644 (file)
@@ -68,8 +68,6 @@ public:
     virtual void Refresh(bool eraseBackground = true,
                          const wxRect *rect = (const wxRect *) NULL);
     virtual void Update();
     virtual void Refresh(bool eraseBackground = true,
                          const wxRect *rect = (const wxRect *) NULL);
     virtual void Update();
-    virtual void Freeze();
-    virtual void Thaw();
 
     virtual bool SetCursor(const wxCursor &cursor);
     virtual bool SetFont(const wxFont &font) { m_font = font; return true; }
 
     virtual bool SetCursor(const wxCursor &cursor);
     virtual bool SetFont(const wxFont &font) { m_font = font; return true; }
@@ -100,11 +98,14 @@ public:
     void OnInternalIdle();
 
 protected:
     void OnInternalIdle();
 
 protected:
+    virtual void DoFreeze();
+    virtual void DoThaw();
+
+
     // the window handle
     struct window_t      *m_wnd;
     // whether there should be wxEraseEvent before wxPaintEvent or not
     // (see wxWindow::Refresh)
     // the window handle
     struct window_t      *m_wnd;
     // whether there should be wxEraseEvent before wxPaintEvent or not
     // (see wxWindow::Refresh)
-    bool                  m_frozen:1;
     bool                  m_refreshAfterThaw:1;
     int                   m_eraseBackground;
 
     bool                  m_refreshAfterThaw:1;
     int                   m_eraseBackground;
 
index b4f4e0ae0352281ef5520b5b6b16bc64d4799b1e..d3422813f09ef5f9673c5d093768456702d5335e 100644 (file)
@@ -75,10 +75,6 @@ public:
     virtual bool SetTransparent(wxByte alpha);
     virtual bool CanSetTransparent();
 
     virtual bool SetTransparent(wxByte alpha);
     virtual bool CanSetTransparent();
 
-    //Top level windows have different freeze semantics on Windows
-    virtual void Freeze();
-    virtual void Thaw();
-
     virtual void AddChild( wxWindowBase *child );
 
 
     virtual void AddChild( wxWindowBase *child );
 
 
@@ -142,6 +138,10 @@ protected:
     virtual void DoGetSize(int *width, int *height) const;
 #endif // __WXWINCE__
 
     virtual void DoGetSize(int *width, int *height) const;
 #endif // __WXWINCE__
 
+    // Top level windows have different freeze semantics on Windows
+    virtual void DoFreeze();
+    virtual void DoThaw();
+
     // helper of SetIcons(): calls gets the icon with the size specified by the
     // given system metrics (SM_C{X|Y}[SM]ICON) from the bundle and sets it
     // using WM_SETICON with the specified wParam (ICOM_SMALL or ICON_BIG)
     // helper of SetIcons(): calls gets the icon with the size specified by the
     // given system metrics (SM_C{X|Y}[SM]ICON) from the bundle and sets it
     // using WM_SETICON with the specified wParam (ICOM_SMALL or ICON_BIG)
index dd35d7fd8800f1afc9dff8fb957a6f04f11b743a..4238868df34e7021ab9043f5275df0ec8ee38aff 100644 (file)
@@ -83,9 +83,6 @@ public:
     virtual void Refresh( bool eraseBackground = true,
                           const wxRect *rect = (const wxRect *) NULL );
     virtual void Update();
     virtual void Refresh( bool eraseBackground = true,
                           const wxRect *rect = (const wxRect *) NULL );
     virtual void Update();
-    virtual void Freeze();
-    virtual void Thaw();
-    virtual bool IsFrozen() const { return m_frozenness > 0; }
 
     virtual void SetWindowStyleFlag(long style);
     virtual void SetExtraStyle(long exStyle);
 
     virtual void SetWindowStyleFlag(long style);
     virtual void SetExtraStyle(long exStyle);
@@ -503,6 +500,9 @@ protected:
 
     virtual void DoEnable(bool enable);
 
 
     virtual void DoEnable(bool enable);
 
+    virtual void DoFreeze();
+    virtual void DoThaw();
+
     // this simply moves/resizes the given HWND which is supposed to be our
     // sibling (this is useful for controls which are composite at MSW level
     // and for which DoMoveWindow() is not enough)
     // this simply moves/resizes the given HWND which is supposed to be our
     // sibling (this is useful for controls which are composite at MSW level
     // and for which DoMoveWindow() is not enough)
@@ -555,8 +555,6 @@ private:
     bool HandleNotify(int idCtrl, WXLPARAM lParam, WXLPARAM *result);
 
 
     bool HandleNotify(int idCtrl, WXLPARAM lParam, WXLPARAM *result);
 
 
-    
-
     // current defer window position operation handle (may be NULL)
     WXHANDLE m_hDWP;
 
     // current defer window position operation handle (may be NULL)
     WXHANDLE m_hDWP;
 
@@ -567,10 +565,6 @@ protected:
     wxPoint     m_pendingPosition;
     wxSize      m_pendingSize;
 
     wxPoint     m_pendingPosition;
     wxSize      m_pendingSize;
 
-    // number of calls to Freeze() minus number of calls to Thaw()
-    // protected so that wxTopLevelWindowMSW can access it
-    unsigned int m_frozenness;
-
 private:
 #ifdef __POCKETPC__
     bool        m_contextMenuEnabled;
 private:
 #ifdef __POCKETPC__
     bool        m_contextMenuEnabled;
index 9070497a445464e3b2e23fa60af236194183eae2..9765a809fa4b650c1a9b87b8c44adb663948c3d6 100644 (file)
@@ -92,9 +92,7 @@ public:
     virtual void     Refresh( bool          bEraseBackground = true
                              ,const wxRect* pRect = (const wxRect *)NULL
                             );
     virtual void     Refresh( bool          bEraseBackground = true
                              ,const wxRect* pRect = (const wxRect *)NULL
                             );
-    virtual void     Freeze(void);
     virtual void     Update(void);
     virtual void     Update(void);
-    virtual void     Thaw(void);
     virtual void     SetWindowStyleFlag(long lStyle);
     virtual bool     SetCursor(const wxCursor& rCursor);
     virtual bool     SetFont(const wxFont& rFont);
     virtual void     SetWindowStyleFlag(long lStyle);
     virtual bool     SetCursor(const wxCursor& rCursor);
     virtual bool     SetFont(const wxFont& rFont);
@@ -416,6 +414,9 @@ public:
     PSWP GetSwp(void) {return &m_vWinSwp;}
 
 protected:
     PSWP GetSwp(void) {return &m_vWinSwp;}
 
 protected:
+    virtual void     DoFreeze(void);
+    virtual void     DoThaw(void);
+
     // PM can't create some MSW styles natively but can perform these after
     // creation by sending messages
     typedef enum extra_flags { kFrameToolWindow = 0x0001
     // PM can't create some MSW styles natively but can perform these after
     // creation by sending messages
     typedef enum extra_flags { kFrameToolWindow = 0x0001
index aeb2a5f9a96520a3aab37c1bb82e15b92d6f385e..25965867b91b5b33f193fc156b8167f6076b712e 100644 (file)
@@ -73,8 +73,6 @@ public:
     virtual void Refresh( bool eraseBackground = true,
                           const wxRect *rect = NULL );
     virtual void Update();
     virtual void Refresh( bool eraseBackground = true,
                           const wxRect *rect = NULL );
     virtual void Update();
-    virtual void Freeze();
-    virtual void Thaw();
 
     virtual bool SetCursor( const wxCursor &cursor );
     virtual bool SetFont( const wxFont &font );
 
     virtual bool SetCursor( const wxCursor &cursor );
     virtual bool SetFont( const wxFont &font );
@@ -271,9 +269,6 @@ private:
     bool HandleMoving(wxRect& rect);
     bool HandleJoystickEvent(WXUINT msg, int x, int y, WXUINT flags);
 
     bool HandleMoving(wxRect& rect);
     bool HandleJoystickEvent(WXUINT msg, int x, int y, WXUINT flags);
 
-    // number of calls to Freeze() minus number of calls to Thaw()
-    unsigned int m_frozenness;
-
     DECLARE_DYNAMIC_CLASS(wxWindowPalm)
     DECLARE_NO_COPY_CLASS(wxWindowPalm)
     DECLARE_EVENT_TABLE()
     DECLARE_DYNAMIC_CLASS(wxWindowPalm)
     DECLARE_NO_COPY_CLASS(wxWindowPalm)
     DECLARE_EVENT_TABLE()
index bd07bee8bfff423fc1b707646b396759a5a23679..416a53413e09505dd5061e40df6874ba6a9848ca 100644 (file)
@@ -263,15 +263,6 @@ public:
     virtual void SelectAll();
     virtual void SetEditable(bool editable);
 
     virtual void SelectAll();
     virtual void SetEditable(bool editable);
 
-    /// Call Freeze to prevent refresh
-    virtual void Freeze();
-
-    /// Call Thaw to refresh
-    virtual void Thaw();
-
-    /// Call Thaw to refresh
-    virtual bool IsFrozen() const { return m_freezeCount > 0; }
-
     virtual bool HasSelection() const;
 
 ///// Functionality specific to wxRichTextCtrl
     virtual bool HasSelection() const;
 
 ///// Functionality specific to wxRichTextCtrl
@@ -772,13 +763,11 @@ protected:
 
     virtual void DoSetValue(const wxString& value, int flags = 0);
 
 
     virtual void DoSetValue(const wxString& value, int flags = 0);
 
+    virtual void DoThaw();
+
 
 // Data members
 private:
 
 // Data members
 private:
-
-    /// Allows nested Freeze/Thaw
-    int                     m_freezeCount;
-
 #if wxRICHTEXT_BUFFERED_PAINTING
     /// Buffer bitmap
     wxBitmap                m_bufferBitmap;
 #if wxRICHTEXT_BUFFERED_PAINTING
     /// Buffer bitmap
     wxBitmap                m_bufferBitmap;
index 6bc220b4d3665f6c231944bfec8dfab8cf3e0dff..4f5388aaa97cdcb88da4f1b7ff0d73aae0b1d3da 100644 (file)
@@ -858,13 +858,19 @@ public:
     virtual void ClearBackground();
 
         // freeze the window: don't redraw it until it is thawed
     virtual void ClearBackground();
 
         // freeze the window: don't redraw it until it is thawed
-    virtual void Freeze() { }
+    void Freeze() { if ( !m_freezeCount++ ) DoFreeze(); }
 
         // thaw the window: redraw it after it had been frozen
 
         // thaw the window: redraw it after it had been frozen
-    virtual void Thaw() { }
+    void Thaw()
+    {
+        wxASSERT_MSG( m_freezeCount, "Thaw() without matching Freeze()" );
+
+        if ( !--m_freezeCount )
+            DoThaw();
+    }
 
         // return true if window had been frozen and not unthawed yet
 
         // return true if window had been frozen and not unthawed yet
-    virtual bool IsFrozen() const { return false; }
+    bool IsFrozen() const { return m_freezeCount != 0; }
 
         // adjust DC for drawing on this window
     virtual void PrepareDC( wxDC & WXUNUSED(dc) ) { }
 
         // adjust DC for drawing on this window
     virtual void PrepareDC( wxDC & WXUNUSED(dc) ) { }
@@ -1563,6 +1569,12 @@ protected:
     // implements the window variants
     virtual void DoSetWindowVariant( wxWindowVariant variant ) ;
 
     // implements the window variants
     virtual void DoSetWindowVariant( wxWindowVariant variant ) ;
 
+
+    // really freeze/thaw the window (should have port-specific implementation)
+    virtual void DoFreeze() { }
+    virtual void DoThaw() { }
+
+
     // Must be called when mouse capture is lost to send
     // wxMouseCaptureLostEvent to windows on capture stack.
     static void NotifyCaptureLost();
     // Must be called when mouse capture is lost to send
     // wxMouseCaptureLostEvent to windows on capture stack.
     static void NotifyCaptureLost();
@@ -1583,11 +1595,19 @@ private:
 
     // the stack of windows which have captured the mouse
     static struct WXDLLIMPEXP_FWD_CORE wxWindowNext *ms_winCaptureNext;
 
     // the stack of windows which have captured the mouse
     static struct WXDLLIMPEXP_FWD_CORE wxWindowNext *ms_winCaptureNext;
+
     // the window that currently has mouse capture
     static wxWindow *ms_winCaptureCurrent;
     // the window that currently has mouse capture
     static wxWindow *ms_winCaptureCurrent;
+
     // indicates if execution is inside CaptureMouse/ReleaseMouse
     static bool ms_winCaptureChanging;
 
     // indicates if execution is inside CaptureMouse/ReleaseMouse
     static bool ms_winCaptureChanging;
 
+
+    // number of Freeze() calls minus the number of Thaw() calls: we're frozen
+    // (i.e. not being updated) if it is positive
+    unsigned int m_freezeCount;
+
+
     DECLARE_ABSTRACT_CLASS(wxWindowBase)
     DECLARE_NO_COPY_CLASS(wxWindowBase)
     DECLARE_EVENT_TABLE()
     DECLARE_ABSTRACT_CLASS(wxWindowBase)
     DECLARE_NO_COPY_CLASS(wxWindowBase)
     DECLARE_EVENT_TABLE()
index c0c750baa12b14167c260a4bc90bcb30f305a3ce..920af63cec8b3623f5f92ad985758fcc27824f1b 100644 (file)
@@ -205,9 +205,6 @@ public:
 
     void SetModified() { m_modified = true; }
 
 
     void SetModified() { m_modified = true; }
 
-    virtual void Freeze();
-    virtual void Thaw();
-
     // textctrl specific scrolling
     virtual bool ScrollLines(int lines);
     virtual bool ScrollPages(int pages);
     // textctrl specific scrolling
     virtual bool ScrollLines(int lines);
     virtual bool ScrollPages(int pages);
index ffb3ad473ec3f409dbc65f0213a7d4519366d0b1..393f78120752e6b228def7c78be53a934144fd67 100644 (file)
@@ -212,6 +212,8 @@ wxWindowBase::wxWindowBase()
 
     // VZ: this one shouldn't exist...
     m_isBeingDeleted = false;
 
     // VZ: this one shouldn't exist...
     m_isBeingDeleted = false;
+
+    m_freezeCount = 0;
 }
 
 // common part of window creation process
 }
 
 // common part of window creation process
index d30298757a87b37c7fcff7659f8a50261e516777..a4ad6529e68b82fb87b6c02a029c24cab4a25f68 100644 (file)
@@ -79,7 +79,6 @@ END_EVENT_TABLE()
 void wxWindowDFB::Init()
 {
     m_isShown = true;
 void wxWindowDFB::Init()
 {
     m_isShown = true;
-    m_frozenness = 0;
     m_tlw = NULL;
     m_overlays = NULL;
 }
     m_tlw = NULL;
     m_overlays = NULL;
 }
@@ -638,20 +637,10 @@ void wxWindowDFB::Update()
     GetParent()->Update();
 }
 
     GetParent()->Update();
 }
 
-void wxWindowDFB::Freeze()
+void wxWindowDFB::DoThaw()
 {
 {
-    m_frozenness++;
-}
-
-void wxWindowDFB::Thaw()
-{
-    wxASSERT_MSG( IsFrozen(), "Thaw() without matching Freeze()" );
-
-    if ( --m_frozenness == 0 )
-    {
-        if ( IsShown() )
-            DoRefreshWindow();
-    }
+    if ( IsShown() )
+        DoRefreshWindow();
 }
 
 void wxWindowDFB::PaintWindow(const wxRect& rect)
 }
 
 void wxWindowDFB::PaintWindow(const wxRect& rect)
@@ -1080,7 +1069,7 @@ wxWindow* wxFindWindowAtPointer(wxPoint& pt)
     return wxFindWindowAtPoint(pt = wxGetMousePosition());
 }
 
     return wxFindWindowAtPoint(pt = wxGetMousePosition());
 }
 
-wxWindow* wxFindWindowAtPoint(const wxPoint& pt)
+wxWindow* wxFindWindowAtPoint(const wxPoint& WXUNUSED(pt))
 {
     wxFAIL_MSG( "wxFindWindowAtPoint not implemented" );
     return NULL;
 {
     wxFAIL_MSG( "wxFindWindowAtPoint not implemented" );
     return NULL;
index 3bb512deb5581f908b66de373fe6ef35245b414d..3243cf941a37dd0119ea7afc99d92da134aa9d7d 100644 (file)
@@ -600,9 +600,9 @@ public:
         SetFocusIgnoringChildren();
     }
 
         SetFocusIgnoringChildren();
     }
 
-    // suspend/resume redrawing the control
-    void Freeze();
-    void Thaw();
+    // we don't draw anything while we're frozen so we must refresh ourselves
+    // when we're thawed to make sure the changes are displayed correctly
+    virtual void DoThaw() { Refresh(); }
 
     void OnRenameTimer();
     bool OnRenameAccept(size_t itemEdit, const wxString& value);
 
     void OnRenameTimer();
     bool OnRenameAccept(size_t itemEdit, const wxString& value);
@@ -850,9 +850,6 @@ private:
     wxBrush *m_highlightBrush,
             *m_highlightUnfocusedBrush;
 
     wxBrush *m_highlightBrush,
             *m_highlightUnfocusedBrush;
 
-    // if this is > 0, the control is frozen and doesn't redraw itself
-    size_t m_freezeCount;
-
     // wrapper around the text control currently used for in place editing or
     // NULL if no item is being edited
     wxListTextCtrlWrapper *m_textctrlWrapper;
     // wrapper around the text control currently used for in place editing or
     // NULL if no item is being edited
     wxListTextCtrlWrapper *m_textctrlWrapper;
@@ -2283,8 +2280,6 @@ void wxListMainWindow::Init()
     m_lineLastClicked =
     m_lineSelectSingleOnUp =
     m_lineBeforeLastClicked = (size_t)-1;
     m_lineLastClicked =
     m_lineSelectSingleOnUp =
     m_lineBeforeLastClicked = (size_t)-1;
-
-    m_freezeCount = 0;
 }
 
 wxListMainWindow::wxListMainWindow()
 }
 
 wxListMainWindow::wxListMainWindow()
@@ -2703,32 +2698,23 @@ void wxListMainWindow::RefreshSelected()
     }
 }
 
     }
 }
 
-void wxListMainWindow::Freeze()
-{
-    m_freezeCount++;
-}
-
-void wxListMainWindow::Thaw()
-{
-    wxCHECK_RET( m_freezeCount > 0, _T("thawing unfrozen list control?") );
-
-    if ( --m_freezeCount == 0 )
-        Refresh();
-}
-
 void wxListMainWindow::OnPaint( wxPaintEvent &WXUNUSED(event) )
 {
     // Note: a wxPaintDC must be constructed even if no drawing is
     // done (a Windows requirement).
     wxPaintDC dc( this );
 
 void wxListMainWindow::OnPaint( wxPaintEvent &WXUNUSED(event) )
 {
     // Note: a wxPaintDC must be constructed even if no drawing is
     // done (a Windows requirement).
     wxPaintDC dc( this );
 
-    if ( IsEmpty() || m_freezeCount )
+    if ( IsEmpty() || IsFrozen() )
+    {
         // nothing to draw or not the moment to draw it
         return;
         // nothing to draw or not the moment to draw it
         return;
+    }
 
     if ( m_dirty )
 
     if ( m_dirty )
+    {
         // delay the repainting until we calculate all the items positions
         return;
         // delay the repainting until we calculate all the items positions
         return;
+    }
 
     PrepareDC( dc );
 
 
     PrepareDC( dc );
 
@@ -5920,12 +5906,12 @@ void wxGenericListCtrl::Refresh(bool eraseBackground, const wxRect *rect)
     }
 }
 
     }
 }
 
-void wxGenericListCtrl::Freeze()
+void wxGenericListCtrl::DoFreeze()
 {
     m_mainWin->Freeze();
 }
 
 {
     m_mainWin->Freeze();
 }
 
-void wxGenericListCtrl::Thaw()
+void wxGenericListCtrl::DoThaw()
 {
     m_mainWin->Thaw();
 }
 {
     m_mainWin->Thaw();
 }
index f4f6800fa7502b516e383fedd10bd03dd44cacbd..88c3f6c713f13c10c31277dfa683523c81712425 100644 (file)
@@ -782,7 +782,6 @@ void wxGenericTreeCtrl::Init()
     m_textCtrl = NULL;
 
     m_renameTimer = NULL;
     m_textCtrl = NULL;
 
     m_renameTimer = NULL;
-    m_freezeCount = 0;
 
     m_findTimer = NULL;
 
 
     m_findTimer = NULL;
 
@@ -1646,7 +1645,7 @@ void wxGenericTreeCtrl::Expand(const wxTreeItemId& itemId)
     }
 
     item->Expand();
     }
 
     item->Expand();
-    if ( !m_freezeCount )
+    if ( !IsFrozen() )
     {
         CalculatePositions();
 
     {
         CalculatePositions();
 
@@ -3517,13 +3516,13 @@ void wxGenericTreeCtrl::CalculatePositions()
 
 void wxGenericTreeCtrl::Refresh(bool eraseBackground, const wxRect *rect)
 {
 
 void wxGenericTreeCtrl::Refresh(bool eraseBackground, const wxRect *rect)
 {
-    if ( !m_freezeCount )
+    if ( !IsFrozen() )
         wxTreeCtrlBase::Refresh(eraseBackground, rect);
 }
 
 void wxGenericTreeCtrl::RefreshSubtree(wxGenericTreeItem *item)
 {
         wxTreeCtrlBase::Refresh(eraseBackground, rect);
 }
 
 void wxGenericTreeCtrl::RefreshSubtree(wxGenericTreeItem *item)
 {
-    if (m_dirty || m_freezeCount)
+    if (m_dirty || IsFrozen() )
         return;
 
     wxSize client = GetClientSize();
         return;
 
     wxSize client = GetClientSize();
@@ -3540,7 +3539,7 @@ void wxGenericTreeCtrl::RefreshSubtree(wxGenericTreeItem *item)
 
 void wxGenericTreeCtrl::RefreshLine( wxGenericTreeItem *item )
 {
 
 void wxGenericTreeCtrl::RefreshLine( wxGenericTreeItem *item )
 {
-    if (m_dirty || m_freezeCount)
+    if (m_dirty || IsFrozen() )
         return;
 
     wxRect rect;
         return;
 
     wxRect rect;
@@ -3553,7 +3552,7 @@ void wxGenericTreeCtrl::RefreshLine( wxGenericTreeItem *item )
 
 void wxGenericTreeCtrl::RefreshSelected()
 {
 
 void wxGenericTreeCtrl::RefreshSelected()
 {
-    if (m_freezeCount)
+    if (IsFrozen())
         return;
 
     // TODO: this is awfully inefficient, we should keep the list of all
         return;
 
     // TODO: this is awfully inefficient, we should keep the list of all
@@ -3564,7 +3563,7 @@ void wxGenericTreeCtrl::RefreshSelected()
 
 void wxGenericTreeCtrl::RefreshSelectedUnder(wxGenericTreeItem *item)
 {
 
 void wxGenericTreeCtrl::RefreshSelectedUnder(wxGenericTreeItem *item)
 {
-    if (m_freezeCount)
+    if (IsFrozen())
         return;
 
     if ( item->IsSelected() )
         return;
 
     if ( item->IsSelected() )
@@ -3578,22 +3577,12 @@ void wxGenericTreeCtrl::RefreshSelectedUnder(wxGenericTreeItem *item)
     }
 }
 
     }
 }
 
-void wxGenericTreeCtrl::Freeze()
+void wxGenericTreeCtrl::DoThaw()
 {
 {
-    m_freezeCount++;
-}
-
-void wxGenericTreeCtrl::Thaw()
-{
-    wxCHECK_RET( m_freezeCount > 0, _T("thawing unfrozen tree control?") );
-
-    if ( --m_freezeCount == 0 )
-    {
-        if ( m_dirty )
-            DoDirtyProcessing();
-        else
-            Refresh();
-    }
+    if ( m_dirty )
+        DoDirtyProcessing();
+    else
+        Refresh();
 }
 
 // ----------------------------------------------------------------------------
 }
 
 // ----------------------------------------------------------------------------
@@ -3654,7 +3643,7 @@ wxGenericTreeCtrl::GetClassDefaultAttributes(wxWindowVariant WXUNUSED(variant))
 
 void wxGenericTreeCtrl::DoDirtyProcessing()
 {
 
 void wxGenericTreeCtrl::DoDirtyProcessing()
 {
-    if (m_freezeCount)
+    if (IsFrozen())
         return;
 
     m_dirty = false;
         return;
 
     m_dirty = false;
index 8fc7205172944d0dd430e28380ff5e6403168709..4d122f975759977e2a560f04f97fa07791d7ff68 100644 (file)
@@ -614,7 +614,6 @@ void wxTextCtrl::Init()
     SetUpdateFont(false);
 
     m_text = NULL;
     SetUpdateFont(false);
 
     m_text = NULL;
-    m_freezeCount = 0;
     m_showPositionOnThaw = NULL;
     m_gdkHandCursor = NULL;
     m_gdkXTermCursor = NULL;
     m_showPositionOnThaw = NULL;
     m_gdkHandCursor = NULL;
     m_gdkXTermCursor = NULL;
@@ -1719,58 +1718,50 @@ wxSize wxTextCtrl::DoGetBestSize() const
 // freeze/thaw
 // ----------------------------------------------------------------------------
 
 // freeze/thaw
 // ----------------------------------------------------------------------------
 
-void wxTextCtrl::Freeze()
+void wxTextCtrl::DoFreeze()
 {
     wxCHECK_RET(m_text != NULL, wxT("invalid text ctrl"));
 
     if ( HasFlag(wxTE_MULTILINE) )
     {
 {
     wxCHECK_RET(m_text != NULL, wxT("invalid text ctrl"));
 
     if ( HasFlag(wxTE_MULTILINE) )
     {
-        if (m_freezeCount++ == 0)
-        {
-            // freeze textview updates and remove buffer
-            g_signal_connect (m_text, "expose_event",
-                              G_CALLBACK (gtk_text_exposed_callback), this);
-            g_signal_connect (m_widget, "expose_event",
-                              G_CALLBACK (gtk_text_exposed_callback), this);
-            gtk_widget_set_sensitive(m_widget, false);
-            g_object_ref(m_buffer);
-            GtkTextBuffer* buf_new = gtk_text_buffer_new(NULL);
-            GtkTextMark* mark = GTK_TEXT_VIEW(m_text)->first_para_mark;
-            gtk_text_view_set_buffer(GTK_TEXT_VIEW(m_text), buf_new);
-            // gtk_text_view_set_buffer adds its own reference
-            g_object_unref(buf_new);
-            // This mark should be deleted when the buffer is changed,
-            // but it's not (in GTK+ up to at least 2.10.6).
-            // Otherwise these anonymous marks start to build up in the buffer,
-            // and Freeze takes longer and longer each time it is called.
-            if (GTK_IS_TEXT_MARK(mark) && !gtk_text_mark_get_deleted(mark))
-                gtk_text_buffer_delete_mark(m_buffer, mark);
-        }
-    }
-}
-
-void wxTextCtrl::Thaw()
+        // freeze textview updates and remove buffer
+        g_signal_connect (m_text, "expose_event",
+                          G_CALLBACK (gtk_text_exposed_callback), this);
+        g_signal_connect (m_widget, "expose_event",
+                          G_CALLBACK (gtk_text_exposed_callback), this);
+        gtk_widget_set_sensitive(m_widget, false);
+        g_object_ref(m_buffer);
+        GtkTextBuffer* buf_new = gtk_text_buffer_new(NULL);
+        GtkTextMark* mark = GTK_TEXT_VIEW(m_text)->first_para_mark;
+        gtk_text_view_set_buffer(GTK_TEXT_VIEW(m_text), buf_new);
+        // gtk_text_view_set_buffer adds its own reference
+        g_object_unref(buf_new);
+        // This mark should be deleted when the buffer is changed,
+        // but it's not (in GTK+ up to at least 2.10.6).
+        // Otherwise these anonymous marks start to build up in the buffer,
+        // and Freeze takes longer and longer each time it is called.
+        if (GTK_IS_TEXT_MARK(mark) && !gtk_text_mark_get_deleted(mark))
+            gtk_text_buffer_delete_mark(m_buffer, mark);
+    }
+}
+
+void wxTextCtrl::DoThaw()
 {
     if ( HasFlag(wxTE_MULTILINE) )
     {
 {
     if ( HasFlag(wxTE_MULTILINE) )
     {
-        wxCHECK_RET(m_freezeCount != 0, _T("Thaw() without matching Freeze()"));
-
-        if (--m_freezeCount == 0)
+        // Reattach buffer and thaw textview updates
+        gtk_text_view_set_buffer(GTK_TEXT_VIEW(m_text), m_buffer);
+        g_object_unref(m_buffer);
+        gtk_widget_set_sensitive(m_widget, true);
+        g_signal_handlers_disconnect_by_func (m_widget,
+                (gpointer) gtk_text_exposed_callback, this);
+        g_signal_handlers_disconnect_by_func (m_text,
+                (gpointer) gtk_text_exposed_callback, this);
+        if (m_showPositionOnThaw != NULL)
         {
         {
-            // Reattach buffer and thaw textview updates
-            gtk_text_view_set_buffer(GTK_TEXT_VIEW(m_text), m_buffer);
-            g_object_unref(m_buffer);
-            gtk_widget_set_sensitive(m_widget, true);
-            g_signal_handlers_disconnect_by_func (m_widget,
-                    (gpointer) gtk_text_exposed_callback, this);
-            g_signal_handlers_disconnect_by_func (m_text,
-                    (gpointer) gtk_text_exposed_callback, this);
-            if (m_showPositionOnThaw != NULL)
-            {
-                gtk_text_view_scroll_mark_onscreen(
-                    GTK_TEXT_VIEW(m_text), m_showPositionOnThaw);
-                m_showPositionOnThaw = NULL;
-            }
+            gtk_text_view_scroll_mark_onscreen(
+                GTK_TEXT_VIEW(m_text), m_showPositionOnThaw);
+            m_showPositionOnThaw = NULL;
         }
     }
 }
         }
     }
 }
index 1df0a5b8b1fe57aa800744c7b58039ead150d856..ea289a657e2371537b97479ee8777a78b30ce622 100644 (file)
@@ -1290,7 +1290,7 @@ wxSize wxTextCtrl::DoGetBestSize() const
 // freeze/thaw
 // ----------------------------------------------------------------------------
 
 // freeze/thaw
 // ----------------------------------------------------------------------------
 
-void wxTextCtrl::Freeze()
+void wxTextCtrl::DoFreeze()
 {
     if ( HasFlag(wxTE_MULTILINE) )
     {
 {
     if ( HasFlag(wxTE_MULTILINE) )
     {
@@ -1298,7 +1298,7 @@ void wxTextCtrl::Freeze()
     }
 }
 
     }
 }
 
-void wxTextCtrl::Thaw()
+void wxTextCtrl::DoThaw()
 {
     if ( HasFlag(wxTE_MULTILINE) )
     {
 {
     if ( HasFlag(wxTE_MULTILINE) )
     {
index 565c2b38a71cae5a3a1317014e895d20669abe7a..abf913ca76472298dcc0d454381fe2c06660cd99 100644 (file)
@@ -865,7 +865,6 @@ wxWindowMac::wxWindowMac(wxWindowMac *parent,
 void wxWindowMac::Init()
 {
     m_peer = NULL ;
 void wxWindowMac::Init()
 {
     m_peer = NULL ;
-    m_frozenness = 0 ;
     m_macAlpha = 255 ;
     m_cgContextRef = NULL ;
 
     m_macAlpha = 255 ;
     m_cgContextRef = NULL ;
 
@@ -2091,38 +2090,25 @@ void wxWindowMac::Refresh(bool WXUNUSED(eraseBack), const wxRect *rect)
     }
 }
 
     }
 }
 
-void wxWindowMac::Freeze()
+void wxWindowMac::DoFreeze()
 {
 #if TARGET_API_MAC_OSX
 {
 #if TARGET_API_MAC_OSX
-    if ( !m_frozenness++ )
-    {
-        if ( m_peer && m_peer->Ok() )
-            m_peer->SetDrawingEnabled( false ) ;
-    }
+    if ( m_peer && m_peer->Ok() )
+        m_peer->SetDrawingEnabled( false ) ;
 #endif
 }
 
 #endif
 }
 
-void wxWindowMac::Thaw()
+void wxWindowMac::DoThaw()
 {
 #if TARGET_API_MAC_OSX
 {
 #if TARGET_API_MAC_OSX
-    wxASSERT_MSG( m_frozenness > 0, wxT("Thaw() without matching Freeze()") );
-
-    if ( !--m_frozenness )
+    if ( m_peer && m_peer->Ok() )
     {
     {
-        if ( m_peer && m_peer->Ok() )
-        {
-            m_peer->SetDrawingEnabled( true ) ;
-            m_peer->InvalidateWithChildren() ;
-        }
+        m_peer->SetDrawingEnabled( true ) ;
+        m_peer->InvalidateWithChildren() ;
     }
 #endif
 }
 
     }
 #endif
 }
 
-bool wxWindowMac::IsFrozen() const
-{
-    return m_frozenness != 0;
-}
-
 wxWindowMac *wxGetActiveWindow()
 {
     // actually this is a windows-only concept
 wxWindowMac *wxGetActiveWindow()
 {
     // actually this is a windows-only concept
index 587ed4cd58a3b7dfbe441e38005c6343583a4fcc..5ad62e94e3ffebdc4f11d690b4f520f0f66131f6 100644 (file)
@@ -550,7 +550,6 @@ void wxWindowMGL::Init()
     // mgl specific:
     m_wnd = NULL;
     m_isShown = true;
     // mgl specific:
     m_wnd = NULL;
     m_isShown = true;
-    m_frozen = false;
     m_paintMGLDC = NULL;
     m_eraseBackground = -1;
 }
     m_paintMGLDC = NULL;
     m_eraseBackground = -1;
 }
@@ -1119,26 +1118,24 @@ void wxWindowMGL::Refresh(bool eraseBack, const wxRect *rect)
 
 void wxWindowMGL::Update()
 {
 
 void wxWindowMGL::Update()
 {
-    if ( !m_frozen )
+    if ( !IsFrozen() )
         MGL_wmUpdateDC(g_winMng);
 }
 
         MGL_wmUpdateDC(g_winMng);
 }
 
-void wxWindowMGL::Freeze()
+void wxWindowMGL::DoFreeze()
 {
 {
-    m_frozen = true;
     m_refreshAfterThaw = false;
 }
 
     m_refreshAfterThaw = false;
 }
 
-void wxWindowMGL::Thaw()
+void wxWindowMGL::DoThaw()
 {
 {
-    m_frozen = false;
     if ( m_refreshAfterThaw )
         Refresh();
 }
 
 void wxWindowMGL::HandlePaint(MGLDevCtx *dc)
 {
     if ( m_refreshAfterThaw )
         Refresh();
 }
 
 void wxWindowMGL::HandlePaint(MGLDevCtx *dc)
 {
-    if ( m_frozen )
+    if ( IsFrozen() )
     {
         // Don't paint anything if the window is frozen.
         m_refreshAfterThaw = true;
     {
         // Don't paint anything if the window is frozen.
         m_refreshAfterThaw = true;
index a7217b5c9181c7196494004af13848519807aee6..8a22cb54a1476a0c2aa53480969f4cdaee872d3d 100644 (file)
@@ -1172,55 +1172,50 @@ bool wxTopLevelWindowMSW::CanSetTransparent()
 }
 
 
 }
 
 
-void wxTopLevelWindowMSW::Freeze()
+void wxTopLevelWindowMSW::DoFreeze()
 {
 {
-    if ( !m_frozenness++) {
-        if (IsShown()) {
-            for ( wxWindowList::compatibility_iterator node = GetChildren().GetFirst();
-                node;
-                node = node->GetNext() )
-            {
-                wxWindow *child = node->GetData();
-                if ( child->IsTopLevel() )
-                    continue;
-                else
-                    child->Freeze();
-            }
+    if ( IsShown() )
+    {
+        for ( wxWindowList::compatibility_iterator node = GetChildren().GetFirst();
+              node;
+              node = node->GetNext() )
+        {
+            wxWindow *child = node->GetData();
+            if ( child->IsTopLevel() )
+                continue;
+
+            child->Freeze();
         }
     }
 }
 
         }
     }
 }
 
-void wxTopLevelWindowMSW::Thaw()
+void wxTopLevelWindowMSW::DoThaw()
 {
 {
-    wxASSERT_MSG( m_frozenness > 0, _T("Thaw() without matching Freeze()") );
-    if ( --m_frozenness == 0 )
+    if ( IsShown() )
     {
     {
-        if ( IsShown() ) {
-            for ( wxWindowList::compatibility_iterator node = GetChildren().GetFirst();
-                node;
-                node = node->GetNext() )
-            {
-                wxWindow *child = node->GetData();
-                if ( child->IsTopLevel() )
-                    continue;
-                else
-                    child->Thaw();
-            }
+        for ( wxWindowList::compatibility_iterator node = GetChildren().GetFirst();
+              node;
+              node = node->GetNext() )
+        {
+            wxWindow *child = node->GetData();
+            if ( child->IsTopLevel() )
+                continue;
+
+            child->Thaw();
         }
     }
 }
 
 
         }
     }
 }
 
 
-void wxTopLevelWindowMSW::AddChild(wxWindowBase *child )
+void wxTopLevelWindowMSW::AddChild(wxWindowBase *child)
 {
 {
-    //adding a child while frozen will assert when thawn,
-    // so freeze it
-    if (child && !child->IsTopLevel() && IsFrozen()) {
-        //need to match our current freeze level
-        for (unsigned int ii=0;ii< m_frozenness;ii++) {
-            child->Freeze();
-        }
+    // adding a child while frozen will assert when thawn, so freeze it as if
+    // it had been already present when we were frozen
+    if ( child && !child->IsTopLevel() && IsFrozen() )
+    {
+        child->Freeze();
     }
     }
+
     wxTopLevelWindowBase::AddChild(child);
 }
 
     wxTopLevelWindowBase::AddChild(child);
 }
 
index 3c6e6acc6b956bcf27ab5faf872abcfa605d13d2..4e82274435531fcea9bc9dd64e6dd99854b78d91 100644 (file)
@@ -524,8 +524,6 @@ void wxWindowMSW::Init()
     m_mouseInWindow = false;
     m_lastKeydownProcessed = false;
 
     m_mouseInWindow = false;
     m_lastKeydownProcessed = false;
 
-    m_frozenness = 0;
-
     m_hWnd = 0;
     m_hDWP = 0;
 
     m_hWnd = 0;
     m_hDWP = 0;
 
@@ -1606,29 +1604,21 @@ static inline void SendSetRedraw(HWND hwnd, bool on)
 #endif
 }
 
 #endif
 }
 
-void wxWindowMSW::Freeze()
+void wxWindowMSW::DoFreeze()
 {
 {
-    if ( !m_frozenness++ )
-    {
-        if ( IsShown() )
-            SendSetRedraw(GetHwnd(), false);
-    }
+    if ( IsShown() )
+        SendSetRedraw(GetHwnd(), false);
 }
 
 }
 
-void wxWindowMSW::Thaw()
+void wxWindowMSW::DoThaw()
 {
 {
-    wxASSERT_MSG( m_frozenness > 0, _T("Thaw() without matching Freeze()") );
-
-    if ( --m_frozenness == 0 )
+    if ( IsShown() )
     {
     {
-        if ( IsShown() )
-        {
-            SendSetRedraw(GetHwnd(), true);
+        SendSetRedraw(GetHwnd(), true);
 
 
-            // we need to refresh everything or otherwise the invalidated area
-            // is not going to be repainted
-            Refresh();
-        }
+        // we need to refresh everything or otherwise the invalidated area
+        // is not going to be repainted
+        Refresh();
     }
 }
 
     }
 }
 
index c1ec1c18f648ae9409413d80e9f456e81f52c50b..f5c84cb9391ce28aeb816ae0b0569a32429c6f56 100644 (file)
@@ -1109,12 +1109,12 @@ void wxWindowOS2::Update()
     ::WinUpdateWindow(GetHwnd());
 } // end of wxWindowOS2::Update
 
     ::WinUpdateWindow(GetHwnd());
 } // end of wxWindowOS2::Update
 
-void wxWindowOS2::Freeze()
+void wxWindowOS2::DoFreeze()
 {
    ::WinSendMsg(GetHwnd(), WM_VRNDISABLED, (MPARAM)0, (MPARAM)0);
 } // end of wxWindowOS2::Freeze
 
 {
    ::WinSendMsg(GetHwnd(), WM_VRNDISABLED, (MPARAM)0, (MPARAM)0);
 } // end of wxWindowOS2::Freeze
 
-void wxWindowOS2::Thaw()
+void wxWindowOS2::DoThaw()
 {
    ::WinSendMsg(GetHwnd(), WM_VRNENABLED, (MPARAM)TRUE, (MPARAM)0);
 
 {
    ::WinSendMsg(GetHwnd(), WM_VRNENABLED, (MPARAM)TRUE, (MPARAM)0);
 
index 75ddf0bc243b8074a0a095074101762ed63e87aa..9dd143a633618feb0e22c2c951e111368acbe5df 100644 (file)
@@ -432,14 +432,6 @@ bool wxWindowPalm::Reparent(wxWindowBase *parent)
     return false;
 }
 
     return false;
 }
 
-void wxWindowPalm::Freeze()
-{
-}
-
-void wxWindowPalm::Thaw()
-{
-}
-
 void wxWindowPalm::Refresh(bool eraseBack, const wxRect *rect)
 {
     WinHandle handle = (WinHandle)GetHWND();
 void wxWindowPalm::Refresh(bool eraseBack, const wxRect *rect)
 {
     WinHandle handle = (WinHandle)GetHWND();
index 62acf0a2fab7c46a180d28e4f7ebb1db14171364..6acea71f6c7bdf6f8473d68cd6d806a5d700bf37 100644 (file)
@@ -201,7 +201,6 @@ wxRichTextCtrl::~wxRichTextCtrl()
 /// Member initialisation
 void wxRichTextCtrl::Init()
 {
 /// Member initialisation
 void wxRichTextCtrl::Init()
 {
-    m_freezeCount = 0;
     m_contextMenu = NULL;
     m_caret = NULL;
     m_caretPosition = -1;
     m_contextMenu = NULL;
     m_caret = NULL;
     m_caretPosition = -1;
@@ -217,25 +216,13 @@ void wxRichTextCtrl::Init()
     m_caretPositionForDefaultStyle = -2;
 }
 
     m_caretPositionForDefaultStyle = -2;
 }
 
-/// Call Freeze to prevent refresh
-void wxRichTextCtrl::Freeze()
+void wxRichTextCtrl::DoThaw()
 {
 {
-    m_freezeCount ++;
-}
-
-/// Call Thaw to refresh
-void wxRichTextCtrl::Thaw()
-{
-    m_freezeCount --;
-
-    if (m_freezeCount == 0)
-    {
-        if (GetBuffer().GetDirty())
-            LayoutContent();
-        else
-            SetupScrollbars();
-        Refresh(false);
-    }
+    if (GetBuffer().GetDirty())
+        LayoutContent();
+    else
+        SetupScrollbars();
+    Refresh(false);
 }
 
 /// Clear all text
 }
 
 /// Clear all text
@@ -248,7 +235,7 @@ void wxRichTextCtrl::Clear()
     m_caretAtLineStart = false;
     m_selectionRange.SetRange(-2, -2);
 
     m_caretAtLineStart = false;
     m_selectionRange.SetRange(-2, -2);
 
-    if (m_freezeCount == 0)
+    if (!IsFrozen())
     {
         LayoutContent();
         Refresh(false);
     {
         LayoutContent();
         Refresh(false);
@@ -269,11 +256,12 @@ void wxRichTextCtrl::OnPaint(wxPaintEvent& WXUNUSED(event))
 #else
         wxPaintDC dc(this);
 #endif
 #else
         wxPaintDC dc(this);
 #endif
-        PrepareDC(dc);
 
 
-        if (m_freezeCount > 0)
+        if (IsFrozen())
             return;
 
             return;
 
+        PrepareDC(dc);
+
         dc.SetFont(GetFont());
 
         // Paint the background
         dc.SetFont(GetFont());
 
         // Paint the background
@@ -1789,7 +1777,7 @@ void wxRichTextCtrl::OnScroll(wxScrollWinEvent& event)
 /// Set up scrollbars, e.g. after a resize
 void wxRichTextCtrl::SetupScrollbars(bool atTop)
 {
 /// Set up scrollbars, e.g. after a resize
 void wxRichTextCtrl::SetupScrollbars(bool atTop)
 {
-    if (m_freezeCount)
+    if (IsFrozen())
         return;
 
     if (GetBuffer().IsEmpty())
         return;
 
     if (GetBuffer().IsEmpty())
index ffb7b4130127c2bd076cc922b733f03cd5ba0e92..9cb89389452c2c63092f567b721bb20516ff7f28 100644 (file)
@@ -2375,18 +2375,6 @@ wxSize wxTextCtrl::DoGetBestSize() const
     }
 }
 
     }
 }
 
-// ----------------------------------------------------------------------------
-// freeze/thaw
-// ----------------------------------------------------------------------------
-
-void wxTextCtrl::Freeze()
-{
-}
-
-void wxTextCtrl::Thaw()
-{
-}
-
 void wxTextCtrl::OnSetFocus( wxFocusEvent& event )
 {
     // To hide or show caret, as appropriate
 void wxTextCtrl::OnSetFocus( wxFocusEvent& event )
 {
     // To hide or show caret, as appropriate