]> git.saurik.com Git - wxWidgets.git/blobdiff - src/common/event.cpp
Hopefully fixed library names generated by wx-config for OS/2's PM port.
[wxWidgets.git] / src / common / event.cpp
index da707a18872f29a3cea4e7a1edf7f7678e9267f7..ae6acd19794f2ecc60c08660beed6b94b920cf00 100644 (file)
@@ -245,7 +245,7 @@ DEFINE_EVENT_TYPE(wxEVT_SCROLL_PAGEUP)
 DEFINE_EVENT_TYPE(wxEVT_SCROLL_PAGEDOWN)
 DEFINE_EVENT_TYPE(wxEVT_SCROLL_THUMBTRACK)
 DEFINE_EVENT_TYPE(wxEVT_SCROLL_THUMBRELEASE)
 DEFINE_EVENT_TYPE(wxEVT_SCROLL_PAGEDOWN)
 DEFINE_EVENT_TYPE(wxEVT_SCROLL_THUMBTRACK)
 DEFINE_EVENT_TYPE(wxEVT_SCROLL_THUMBRELEASE)
-DEFINE_EVENT_TYPE(wxEVT_SCROLL_ENDSCROLL)
+DEFINE_EVENT_TYPE(wxEVT_SCROLL_CHANGED)
 
 // Scroll events from wxWindow
 DEFINE_EVENT_TYPE(wxEVT_SCROLLWIN_TOP)
 
 // Scroll events from wxWindow
 DEFINE_EVENT_TYPE(wxEVT_SCROLLWIN_TOP)
@@ -265,6 +265,7 @@ DEFINE_EVENT_TYPE(wxEVT_MOVING)
 DEFINE_EVENT_TYPE(wxEVT_CLOSE_WINDOW)
 DEFINE_EVENT_TYPE(wxEVT_END_SESSION)
 DEFINE_EVENT_TYPE(wxEVT_QUERY_END_SESSION)
 DEFINE_EVENT_TYPE(wxEVT_CLOSE_WINDOW)
 DEFINE_EVENT_TYPE(wxEVT_END_SESSION)
 DEFINE_EVENT_TYPE(wxEVT_QUERY_END_SESSION)
+DEFINE_EVENT_TYPE(wxEVT_HIBERNATE)
 DEFINE_EVENT_TYPE(wxEVT_ACTIVATE_APP)
 DEFINE_EVENT_TYPE(wxEVT_POWER)
 DEFINE_EVENT_TYPE(wxEVT_ACTIVATE)
 DEFINE_EVENT_TYPE(wxEVT_ACTIVATE_APP)
 DEFINE_EVENT_TYPE(wxEVT_POWER)
 DEFINE_EVENT_TYPE(wxEVT_ACTIVATE)
@@ -1043,8 +1044,10 @@ wxEvtHandler::~wxEvtHandler()
     // Remove us from wxPendingEvents if necessary.
     if(wxPendingEventsLocker)
         wxENTER_CRIT_SECT(*wxPendingEventsLocker);
     // Remove us from wxPendingEvents if necessary.
     if(wxPendingEventsLocker)
         wxENTER_CRIT_SECT(*wxPendingEventsLocker);
-    if ( wxPendingEvents ) {
-        wxPendingEvents->DeleteObject(this);
+    if ( wxPendingEvents )
+    {
+        // Delete all occurences of this from the list of pending events
+        while (wxPendingEvents->DeleteObject(this)) { } // Do nothing
     }
     if(wxPendingEventsLocker)
         wxLEAVE_CRIT_SECT(*wxPendingEventsLocker);
     }
     if(wxPendingEventsLocker)
         wxLEAVE_CRIT_SECT(*wxPendingEventsLocker);
@@ -1123,30 +1126,28 @@ void wxEvtHandler::ProcessPendingEvents()
 
     wxENTER_CRIT_SECT( Lock() );
 
 
     wxENTER_CRIT_SECT( Lock() );
 
-    // remember last event to process during this iteration
-    wxList::compatibility_iterator lastPendingNode = m_pendingEvents->GetLast();
-
-    wxList::compatibility_iterator node = m_pendingEvents->GetFirst();
-    while ( node )
+    // we leave the loop once we have processed all events that were present at
+    // the start of ProcessPendingEvents because otherwise we could get into
+    // infinite loop if the pending event handler execution resulted in another
+    // event being posted
+    size_t n = m_pendingEvents->size();
+    for ( wxList::compatibility_iterator node = m_pendingEvents->GetFirst();
+          node;
+          node = m_pendingEvents->GetFirst() )
     {
         wxEvent *event = (wxEvent *)node->GetData();
     {
         wxEvent *event = (wxEvent *)node->GetData();
+
         m_pendingEvents->Erase(node);
 
         m_pendingEvents->Erase(node);
 
-        // In ProcessEvent, new events might get added and
-        // we can safely leave the crtical section here.
         wxLEAVE_CRIT_SECT( Lock() );
         wxLEAVE_CRIT_SECT( Lock() );
+
         ProcessEvent(*event);
         delete event;
         ProcessEvent(*event);
         delete event;
+
         wxENTER_CRIT_SECT( Lock() );
 
         wxENTER_CRIT_SECT( Lock() );
 
-        // leave the loop once we have processed all events that were present
-        // at the start of ProcessPendingEvents because otherwise we could get
-        // into infinite loop if the pending event handler execution resulted
-        // in another event being posted
-        if ( node == lastPendingNode )
+        if ( !--n )
             break;
             break;
-
-        node = m_pendingEvents->GetFirst();
     }
 
     wxLEAVE_CRIT_SECT( Lock() );
     }
 
     wxLEAVE_CRIT_SECT( Lock() );