]> git.saurik.com Git - wxWidgets.git/blobdiff - src/common/event.cpp
make string at least empty (instead of containing garbage) if malloc() failed
[wxWidgets.git] / src / common / event.cpp
index 99d1100aa92227f45ffd1e8cf25eff7d2fe64ade..ee22ca1062dd2ec83f85c19bd912ebb7eda61800 100644 (file)
@@ -197,6 +197,9 @@ DEFINE_EVENT_TYPE(wxEVT_CHAR_HOOK)
 DEFINE_EVENT_TYPE(wxEVT_NAVIGATION_KEY)
 DEFINE_EVENT_TYPE(wxEVT_KEY_DOWN)
 DEFINE_EVENT_TYPE(wxEVT_KEY_UP)
+#if wxUSE_HOTKEY
+DEFINE_EVENT_TYPE(wxEVT_HOTKEY)
+#endif
 
 // Set cursor event
 DEFINE_EVENT_TYPE(wxEVT_SET_CURSOR)
@@ -370,23 +373,32 @@ wxCommandEvent::wxCommandEvent(wxEventType commandType, int theId)
  */
 
 #if wxUSE_LONGLONG
-wxLongLong wxUpdateUIEvent::m_lastUpdate = 0;
+wxLongLong wxUpdateUIEvent::sm_lastUpdate = 0;
 #endif
 
-long wxUpdateUIEvent::m_updateInterval = 0;
+long wxUpdateUIEvent::sm_updateInterval = 0;
+
+wxUpdateUIMode wxUpdateUIEvent::sm_updateMode = wxUPDATE_UI_PROCESS_ALL;
 
 // Can we update?
-bool wxUpdateUIEvent::CanUpdate()
+bool wxUpdateUIEvent::CanUpdate(wxWindow* win)
 {
-    if (m_updateInterval == -1)
+    // Don't update if we've switched global updating off
+    // and this window doesn't support updates.
+    if (win &&
+       (GetMode() == wxUPDATE_UI_PROCESS_SPECIFIED &&
+       ((win->GetExtraStyle() & wxWS_EX_PROCESS_UI_UPDATES) == 0)))
+        return FALSE;
+    
+    if (sm_updateInterval == -1)
         return FALSE;
-    else if (m_updateInterval == 0)
+    else if (sm_updateInterval == 0)
         return TRUE;
     else
     {
 #if wxUSE_STOPWATCH && wxUSE_LONGLONG
         wxLongLong now = wxGetLocalTimeMillis();
-        if (now > (m_lastUpdate + m_updateInterval))
+        if (now > (sm_lastUpdate + sm_updateInterval))
         {
             return TRUE;
         }
@@ -404,17 +416,35 @@ bool wxUpdateUIEvent::CanUpdate()
 void wxUpdateUIEvent::ResetUpdateTime()
 {
 #if wxUSE_STOPWATCH && wxUSE_LONGLONG
-    if (m_updateInterval > 0)
+    if (sm_updateInterval > 0)
     {
         wxLongLong now = wxGetLocalTimeMillis();
-        if (now > (m_lastUpdate + m_updateInterval))
+        if (now > (sm_lastUpdate + sm_updateInterval))
         {
-            m_lastUpdate = now;
+            sm_lastUpdate = now;
         }
     }
 #endif
 }
 
+/*
+ * Idle events
+ */
+wxIdleMode wxIdleEvent::sm_idleMode = wxIDLE_PROCESS_ALL;
+
+// Can we send an idle event?
+bool wxIdleEvent::CanSend(wxWindow* win)
+{
+    // Don't update if we've switched global updating off
+    // and this window doesn't support updates.
+    if (win &&
+       (GetMode() == wxIDLE_PROCESS_SPECIFIED &&
+       ((win->GetExtraStyle() & wxWS_EX_PROCESS_IDLE) == 0)))
+        return FALSE;
+    
+    return TRUE;
+}
 
 /*
  * Scroll events
@@ -712,19 +742,19 @@ wxEvtHandler::~wxEvtHandler()
 
     if (m_dynamicEvents)
     {
-        wxNode *node = m_dynamicEvents->GetFirst();
-        while (node)
+        wxList::iterator it = m_dynamicEvents->begin(),
+                         en = m_dynamicEvents->end();
+        for (;it != en; ++it)
         {
 #if WXWIN_COMPATIBILITY_EVENT_TYPES
-            wxEventTableEntry *entry = (wxEventTableEntry*)node->GetData();
+            wxEventTableEntry *entry = (wxEventTableEntry*)*it;
 #else // !WXWIN_COMPATIBILITY_EVENT_TYPES
-            wxDynamicEventTableEntry *entry = (wxDynamicEventTableEntry*)node->GetData();
+            wxDynamicEventTableEntry *entry = (wxDynamicEventTableEntry*)*it;
 #endif // WXWIN_COMPATIBILITY_EVENT_TYPES/!WXWIN_COMPATIBILITY_EVENT_TYPES
 
             if (entry->m_callbackUserData)
                 delete entry->m_callbackUserData;
             delete entry;
-            node = node->GetNext();
         }
         delete m_dynamicEvents;
     };
@@ -818,11 +848,11 @@ void wxEvtHandler::ProcessPendingEvents()
     wxENTER_CRIT_SECT( *m_eventsLocker);
 #endif
 
-    wxNode *node = m_pendingEvents->GetFirst();
+    wxList::compatibility_iterator node = m_pendingEvents->GetFirst();
     while ( node )
     {
         wxEvent *event = (wxEvent *)node->GetData();
-        delete node;
+        m_pendingEvents->Erase(node);
 
         // In ProcessEvent, new events might get added and
         // we can safely leave the crtical section here.
@@ -1000,7 +1030,7 @@ bool wxEvtHandler::Disconnect( int id, int lastId, wxEventType eventType,
     if (!m_dynamicEvents)
         return FALSE;
 
-    wxNode *node = m_dynamicEvents->GetFirst();
+    wxList::compatibility_iterator node = m_dynamicEvents->GetFirst();
     while (node)
     {
 #if WXWIN_COMPATIBILITY_EVENT_TYPES
@@ -1018,7 +1048,7 @@ bool wxEvtHandler::Disconnect( int id, int lastId, wxEventType eventType,
         {
             if (entry->m_callbackUserData)
                 delete entry->m_callbackUserData;
-            m_dynamicEvents->DeleteNode( node );
+            m_dynamicEvents->Erase( node );
             delete entry;
             return TRUE;
         }
@@ -1034,7 +1064,7 @@ bool wxEvtHandler::SearchDynamicEventTable( wxEvent& event )
 
     int commandId = event.GetId();
 
-    wxNode *node = m_dynamicEvents->GetFirst();
+    wxList::compatibility_iterator node = m_dynamicEvents->GetFirst();
     while (node)
     {
 #if WXWIN_COMPATIBILITY_EVENT_TYPES