]> git.saurik.com Git - wxWidgets.git/blobdiff - src/common/event.cpp
Headers moved a bit.
[wxWidgets.git] / src / common / event.cpp
index 32b436d3a969331365109d4db904d62497cbb766..d3abd577abd1a6c260444ee7b48f2a3b54e2b663 100644 (file)
@@ -609,18 +609,7 @@ void wxEvtHandler::AddPendingEvent(wxEvent& event)
 
     wxLEAVE_CRIT_SECT(wxPendingEventsLocker);
 
-    // TODO: Wake up idle handler for the other platforms.
-#ifdef __WXGTK__
-    extern bool g_isIdle;
-    extern void wxapp_install_idle_handler();
-    if ( g_isIdle )
-        wxapp_install_idle_handler();
-#else // this works for wxMSW, but may be for others too?
-    // might also send a dummy message to the top level window, this would
-    // probably be cleaner?
-    wxIdleEvent eventIdle;
-    wxTheApp->OnIdle(eventIdle);
-#endif // platform
+    wxWakeUpIdle();
 }
 
 void wxEvtHandler::ProcessPendingEvents()
@@ -634,6 +623,7 @@ void wxEvtHandler::ProcessPendingEvents()
     {
         event = (wxEvent *)node->Data();
         ProcessEvent(*event);
+        delete event;
         delete node;
         node = m_pendingEvents->First();
     }
@@ -770,6 +760,7 @@ bool wxEvtHandler::SearchEventTable(wxEventTable& table, wxEvent& event)
     }
     return FALSE;
 }
+
 void wxEvtHandler::Connect( int id, int lastId,
                             wxEventType eventType,
                             wxObjectEventFunction func,
@@ -788,6 +779,33 @@ void wxEvtHandler::Connect( int id, int lastId,
     m_dynamicEvents->Append( (wxObject*) entry );
 }
 
+bool wxEvtHandler::Disconnect( int id, int lastId, wxEventType eventType,
+                  wxObjectEventFunction func,
+                  wxObject *userData )
+{
+    if (!m_dynamicEvents)
+        return FALSE;
+       
+    wxNode *node = m_dynamicEvents->First();
+    while (node)
+    {
+        wxEventTableEntry *entry = (wxEventTableEntry*)node->Data();
+        if ((entry->m_id == id) &&
+            ((entry->m_lastId == lastId) || (lastId == -1)) &&
+            ((entry->m_eventType == eventType) || (eventType == wxEVT_NULL)) &&
+            ((entry->m_fn == func) || (func == (wxObjectEventFunction)NULL)) &&
+            ((entry->m_callbackUserData == userData) || (userData == (wxObject*)NULL)))
+        {
+            if (entry->m_callbackUserData) delete entry->m_callbackUserData;
+            m_dynamicEvents->DeleteNode( node );
+            delete entry;
+            return TRUE;
+        }
+        node = node->Next();
+    }
+    return FALSE;
+}
+
 bool wxEvtHandler::SearchDynamicEventTable( wxEvent& event )
 {
     wxCHECK_MSG( m_dynamicEvents, FALSE,