diff --git a/uppsrc/CtrlCore/CtrlDraw.cpp b/uppsrc/CtrlCore/CtrlDraw.cpp index 91ffbd14d..0ae51bb80 100644 --- a/uppsrc/CtrlCore/CtrlDraw.cpp +++ b/uppsrc/CtrlCore/CtrlDraw.cpp @@ -242,6 +242,7 @@ Rect Ctrl::GetVoidRect() const #ifdef _DEBUG + struct sDrawLevelCheck { Draw& w; int lvl; @@ -252,7 +253,7 @@ struct sDrawLevelCheck { } sDrawLevelCheck(Draw& w, const Ctrl *q) : w(w), lvl(w.GetCloffLevel()), q(q) {} - ~sDrawLevelCheck() { Check(); } + // NOTE: Checking level in destructor is a bad idea because of exceptions }; #define LEVELCHECK(w, q) sDrawLevelCheck _x_(w, q) @@ -341,6 +342,7 @@ void Ctrl::CtrlPaint(SystemDraw& w, const Rect& clip) { ApplyTransform(TS_AFTER_CTRL_PAINT); //glPopMatrix(); w.PopContext(); + DOLEVELCHECK; } #else void Ctrl::CtrlPaint(SystemDraw& w, const Rect& clip) { @@ -417,6 +419,7 @@ void Ctrl::CtrlPaint(SystemDraw& w, const Rect& clip) { } w.End(); } + DOLEVELCHECK; } #endif @@ -471,6 +474,7 @@ bool Ctrl::PaintOpaqueAreas(SystemDraw& w, const Rect& r, const Rect& clip, bool LEVELCHECK(bw, this); Paint(bw); PaintCaret(bw); + DOLEVELCHECK; } bw.Put(w, opaque.TopLeft()); } @@ -482,6 +486,7 @@ bool Ctrl::PaintOpaqueAreas(SystemDraw& w, const Rect& r, const Rect& clip, bool LEVELCHECK(w, this); Paint(w); PaintCaret(w); + DOLEVELCHECK; } w.End(); w.End(); diff --git a/uppsrc/CtrlCore/Win32Proc.cpp b/uppsrc/CtrlCore/Win32Proc.cpp index b311c4e28..81cdb61ce 100644 --- a/uppsrc/CtrlCore/Win32Proc.cpp +++ b/uppsrc/CtrlCore/Win32Proc.cpp @@ -62,7 +62,6 @@ bool PassWindowsKey(int wParam); LRESULT Ctrl::WindowProc(UINT message, WPARAM wParam, LPARAM lParam) { GuiLock __; eventid++; - ASSERT_(!painting || IsPanicMode(), "WindowProc invoked for " + Name() + " while in Paint routine"); // LLOG("Ctrl::WindowProc(" << message << ") in " << ::Name(this) << ", focus " << (void *)::GetFocus()); Ptr _this = this; HWND hwnd = GetHWND(); @@ -86,6 +85,7 @@ LRESULT Ctrl::WindowProc(UINT message, WPARAM wParam, LPARAM lParam) { } #endif case WM_PAINT: + ASSERT_(!painting || IsPanicMode(), "WM_PAINT invoked for " + Name() + " while in Paint routine"); ASSERT(hwnd); if(hwnd) { PAINTSTRUCT ps;