]> git.saurik.com Git - wxWidgets.git/blobdiff - src/common/event.cpp
corrected misleading comment about DllGetVersion()
[wxWidgets.git] / src / common / event.cpp
index a2431a5b6cd8c99426f162e1d11ec205ed0ad2cd..3d4ee35534e068cd250d6221fd32f00ad6ac13f6 100644 (file)
@@ -245,7 +245,15 @@ 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_ENDSCROLL)
+DEFINE_EVENT_TYPE(wxEVT_SCROLL_CHANGED)
+
+// see comments in wx/event.h, near wxEVT_SCROLL_ENDSCROLL declaration
+#if wxCHECK_VERSION(2, 7, 0)
+    #error "Remove the lines below, not needed any more"
+#endif
+#undef wxEVT_SCROLL_ENDSCROLL
+extern WXDLLIMPEXP_CORE const wxEventType wxEVT_SCROLL_ENDSCROLL;
+const wxEventType wxEVT_SCROLL_ENDSCROLL = wxEVT_SCROLL_CHANGED;
 
 // Scroll events from wxWindow
 DEFINE_EVENT_TYPE(wxEVT_SCROLLWIN_TOP)
@@ -265,6 +273,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_HIBERNATE)
 DEFINE_EVENT_TYPE(wxEVT_ACTIVATE_APP)
 DEFINE_EVENT_TYPE(wxEVT_POWER)
 DEFINE_EVENT_TYPE(wxEVT_ACTIVATE)
@@ -412,10 +421,12 @@ wxString wxCommandEvent::GetString() const
         return m_cmdString;
     else
     {
+#if wxUSE_TEXTCTRL
         wxTextCtrl *txt = wxDynamicCast(m_eventObject, wxTextCtrl);
         if(txt)
             return txt->GetValue();
         else
+#endif // wxUSE_TEXTCTRL
             return m_cmdString;
     }
 }
@@ -1041,8 +1052,10 @@ wxEvtHandler::~wxEvtHandler()
     // 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);
@@ -1087,22 +1100,14 @@ void wxEvtHandler::AddPendingEvent(wxEvent& event)
     wxCHECK_RET( eventCopy,
                  _T("events of this type aren't supposed to be posted") );
 
-#if defined(__VISAGECPP__)
-    wxENTER_CRIT_SECT( m_eventsLocker);
-#else
-    wxENTER_CRIT_SECT( *m_eventsLocker);
-#endif
+    wxENTER_CRIT_SECT( Lock() );
 
     if ( !m_pendingEvents )
       m_pendingEvents = new wxList;
 
     m_pendingEvents->Append(eventCopy);
 
-#if defined(__VISAGECPP__)
-    wxLEAVE_CRIT_SECT( m_eventsLocker);
-#else
-    wxLEAVE_CRIT_SECT( *m_eventsLocker);
-#endif
+    wxLEAVE_CRIT_SECT( Lock() );
 
     // 2) Add this event handler to list of event handlers that
     //    have pending events.
@@ -1127,51 +1132,33 @@ void wxEvtHandler::ProcessPendingEvents()
     wxCHECK_RET( m_pendingEvents,
                  wxT("Please call wxApp::ProcessPendingEvents() instead") );
 
-#if defined(__VISAGECPP__)
-    wxENTER_CRIT_SECT( m_eventsLocker);
-#else
-    wxENTER_CRIT_SECT( *m_eventsLocker);
-#endif
-
-    // remember last event to process during this iteration
-    wxList::compatibility_iterator lastPendingNode = m_pendingEvents->GetLast();
+    wxENTER_CRIT_SECT( Lock() );
 
-    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();
+
         m_pendingEvents->Erase(node);
 
-        // In ProcessEvent, new events might get added and
-        // we can safely leave the crtical section here.
-#if defined(__VISAGECPP__)
-        wxLEAVE_CRIT_SECT( m_eventsLocker);
-#else
-        wxLEAVE_CRIT_SECT( *m_eventsLocker);
-#endif
+        wxLEAVE_CRIT_SECT( Lock() );
+
         ProcessEvent(*event);
         delete event;
-#if defined(__VISAGECPP__)
-        wxENTER_CRIT_SECT( m_eventsLocker);
-#else
-        wxENTER_CRIT_SECT( *m_eventsLocker);
-#endif
 
-        // 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 )
-            break;
+        wxENTER_CRIT_SECT( Lock() );
 
-        node = m_pendingEvents->GetFirst();
+        if ( !--n )
+            break;
     }
 
-#if defined(__VISAGECPP__)
-    wxLEAVE_CRIT_SECT( m_eventsLocker);
-#else
-    wxLEAVE_CRIT_SECT( *m_eventsLocker);
-#endif
+    wxLEAVE_CRIT_SECT( Lock() );
 }
 
 /*