Avoid paint event recursion when the run loop is restarted inside the paint
event. Usually for the purpose of showing an assertion dialog. git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@21794 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
@@ -72,6 +72,7 @@ protected:
|
|||||||
void SetNSView(WX_NSView cocoaNSView);
|
void SetNSView(WX_NSView cocoaNSView);
|
||||||
WX_NSView m_cocoaNSView;
|
WX_NSView m_cocoaNSView;
|
||||||
WX_NSView m_dummyNSView;
|
WX_NSView m_dummyNSView;
|
||||||
|
bool m_isInPaint;
|
||||||
// ------------------------------------------------------------------------
|
// ------------------------------------------------------------------------
|
||||||
// Implementation
|
// Implementation
|
||||||
// ------------------------------------------------------------------------
|
// ------------------------------------------------------------------------
|
||||||
|
@@ -33,6 +33,7 @@ void wxWindowCocoa::Init()
|
|||||||
m_cocoaNSView = NULL;
|
m_cocoaNSView = NULL;
|
||||||
m_dummyNSView = NULL;
|
m_dummyNSView = NULL;
|
||||||
m_isBeingDeleted = FALSE;
|
m_isBeingDeleted = FALSE;
|
||||||
|
m_isInPaint = FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Constructor
|
// Constructor
|
||||||
@@ -120,10 +121,21 @@ void wxWindowCocoa::SetNSView(WX_NSView cocoaNSView)
|
|||||||
bool wxWindowCocoa::Cocoa_drawRect(const NSRect &rect)
|
bool wxWindowCocoa::Cocoa_drawRect(const NSRect &rect)
|
||||||
{
|
{
|
||||||
wxLogDebug("Cocoa_drawRect");
|
wxLogDebug("Cocoa_drawRect");
|
||||||
|
// Recursion can happen if the event loop runs from within the paint
|
||||||
|
// handler. For instance, if an assertion dialog is shown.
|
||||||
|
// FIXME: This seems less than ideal.
|
||||||
|
if(m_isInPaint)
|
||||||
|
{
|
||||||
|
wxLogDebug("Paint event recursion!");
|
||||||
|
return false;
|
||||||
|
}
|
||||||
//FIXME: should probably turn that rect into the update region
|
//FIXME: should probably turn that rect into the update region
|
||||||
|
m_isInPaint = TRUE;
|
||||||
wxPaintEvent event(m_windowId);
|
wxPaintEvent event(m_windowId);
|
||||||
event.SetEventObject(this);
|
event.SetEventObject(this);
|
||||||
return GetEventHandler()->ProcessEvent(event);
|
bool ret = GetEventHandler()->ProcessEvent(event);
|
||||||
|
m_isInPaint = FALSE;
|
||||||
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
void wxWindowCocoa::InitMouseEvent(wxMouseEvent& event, WX_NSEvent cocoaEvent)
|
void wxWindowCocoa::InitMouseEvent(wxMouseEvent& event, WX_NSEvent cocoaEvent)
|
||||||
|
Reference in New Issue
Block a user