m_dummyWindow = nil;
m_modalNestedLevel = 0;
m_modalWindow = NULL;
+ m_osxLowLevelWakeUp = false;
}
wxGUIEventLoop::~wxGUIEventLoop()
#endif
}
+
bool wxGUIEventLoop::Dispatch()
{
if ( !wxTheApp )
void wxGUIEventLoop::DoStop()
{
- [NSApp stop:0];
// only calling stop: is not enough when called from a runloop-observer,
// therefore add a dummy event, to make sure the runloop gets another round
- NSEvent *event = [NSEvent otherEventWithType:NSApplicationDefined
+ [NSApp stop:0];
+ WakeUp();
+}
+
+void wxGUIEventLoop::WakeUp()
+{
+ // NSEvent* cevent = [NSApp currentEvent];
+ // NSString* mode = [[NSRunLoop mainRunLoop] currentMode];
+
+ // when already in a mouse event handler, don't add higher level event
+ // if ( cevent != nil && [cevent type] <= NSMouseMoved && )
+ if ( m_osxLowLevelWakeUp /* [NSEventTrackingRunLoopMode isEqualToString:mode] */ )
+ {
+ // NSLog(@"event for wakeup %@ in mode %@",cevent,mode);
+ wxCFEventLoop::WakeUp();
+ }
+ else
+ {
+ wxMacAutoreleasePool autoreleasepool;
+ NSEvent *event = [NSEvent otherEventWithType:NSApplicationDefined
location:NSMakePoint(0.0, 0.0)
modifierFlags:0
timestamp:0
windowNumber:0
context:nil
subtype:0 data1:0 data2:0];
- [NSApp postEvent:event atStart:FALSE];
+ [NSApp postEvent:event atStart:FALSE];
+ }
}
CFRunLoopRef wxGUIEventLoop::CFGetCurrentRunLoop() const
void wxModalEventLoop::DoStop()
{
- [NSApp stopModal];
+ [NSApp abortModal];
}
void wxGUIEventLoop::BeginModalSession( wxWindow* modalWindow )
}
m_modalEventLoop = (wxEventLoop*)wxEventLoopBase::GetActive();
- m_modalEventLoop->BeginModalSession(winToSkip);
+ if (m_modalEventLoop)
+ m_modalEventLoop->BeginModalSession(winToSkip);
}
wxWindowDisabler::~wxWindowDisabler()
if ( !m_disabled )
return;
- m_modalEventLoop->EndModalSession();
+ if (m_modalEventLoop)
+ m_modalEventLoop->EndModalSession();
wxWindowList::compatibility_iterator node;
for ( node = wxTopLevelWindows.GetFirst(); node; node = node->GetNext() )
}
delete m_winDisabled;
-}
-
+}
\ No newline at end of file