]> git.saurik.com Git - wxWidgets.git/commitdiff
New event locking.
authorRobert Roebling <robert@roebling.de>
Sun, 28 Nov 1999 11:45:29 +0000 (11:45 +0000)
committerRobert Roebling <robert@roebling.de>
Sun, 28 Nov 1999 11:45:29 +0000 (11:45 +0000)
  Removed CVS trash.
  Some compile fixes.

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@4716 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775

src/common/appcmn.cpp
src/common/event.cpp
src/gtk/gsockgtk.c
src/gtk/listbox.cpp
src/gtk/mdi.cpp
src/gtk/menu.cpp
src/gtk1/gsockgtk.c
src/gtk1/listbox.cpp
src/gtk1/mdi.cpp
src/gtk1/menu.cpp

index 3276436a6eec6f578fe393e434c2225ae3a402ca..b01cdd229c74331915ea13c555bb99395c8eb0ef 100644 (file)
 void wxAppBase::ProcessPendingEvents()
 {
     // ensure that we're the only thread to modify the pending events list
-    wxCRIT_SECT_LOCKER(locker, *wxPendingEventsLocker);
+    wxENTER_CRIT_SECT( *wxPendingEventsLocker );
 
     if ( !wxPendingEvents )
+    {
+        wxLEAVE_CRIT_SECT( *wxPendingEventsLocker );
         return;
+    }
 
     // iterate until the list becomes empty
     wxNode *node = wxPendingEvents->First();
     while (node)
     {
         wxEvtHandler *handler = (wxEvtHandler *)node->Data();
+        delete node;
 
+        // In ProcessPendingEvents(), new handlers might be add
+       // and we can safely leave the critical section here.
+        wxLEAVE_CRIT_SECT( *wxPendingEventsLocker );
         handler->ProcessPendingEvents();
+        wxENTER_CRIT_SECT( *wxPendingEventsLocker );
 
-        delete node;
         node = wxPendingEvents->First();
     }
+    
+    wxLEAVE_CRIT_SECT( *wxPendingEventsLocker );
 }
 
 int wxAppBase::OnExit()
index e6190d9674e9f057fab8489bd94bbfbad063e8de..bfaf9a41b446a5113ecaa628607d0c3655e9fed1 100644 (file)
@@ -583,12 +583,6 @@ wxEvtHandler::~wxEvtHandler()
 
 bool wxEvtHandler::ProcessThreadEvent(wxEvent& event)
 {
-#if defined(__VISAGECPP__)
-    wxCriticalSectionLocker locker(m_eventsLocker);
-#else
-    wxCriticalSectionLocker locker(*m_eventsLocker);
-#endif
-
     // check that we are really in a child thread
     wxASSERT_MSG( !wxThread::IsMain(),
                   wxT("use ProcessEvent() in main thread") );
@@ -602,6 +596,14 @@ bool wxEvtHandler::ProcessThreadEvent(wxEvent& event)
 
 void wxEvtHandler::AddPendingEvent(wxEvent& event)
 {
+    // 1) Add event to list of pending events of this event handler
+
+#if defined(__VISAGECPP__)
+    wxENTER_CRIT_SECT( m_eventsLocker);
+#else
+    wxENTER_CRIT_SECT( *m_eventsLocker);
+#endif
+
     if ( !m_pendingEvents )
       m_pendingEvents = new wxList;
 
@@ -609,6 +611,15 @@ void wxEvtHandler::AddPendingEvent(wxEvent& event)
 
     m_pendingEvents->Append(event2);
 
+#if defined(__VISAGECPP__)
+    wxLEAVE_CRIT_SECT( m_eventsLocker);
+#else
+    wxLEAVE_CRIT_SECT( *m_eventsLocker);
+#endif
+
+    // 2) Add this event handler to list of event handlers that
+    //    have pending events.
+    
     wxENTER_CRIT_SECT(*wxPendingEventsLocker);
 
     if ( !wxPendingEvents )
@@ -617,28 +628,49 @@ void wxEvtHandler::AddPendingEvent(wxEvent& event)
 
     wxLEAVE_CRIT_SECT(*wxPendingEventsLocker);
 
+    // 3) Inform the system that new pending events are somwehere,
+    //    and that these should be processed in idle time.
+    
     wxWakeUpIdle();
 }
 
 void wxEvtHandler::ProcessPendingEvents()
 {
 #if defined(__VISAGECPP__)
-    wxCRIT_SECT_LOCKER(locker, m_eventsLocker);
+    wxENTER_CRIT_SECT( m_eventsLocker);
 #else
-    wxCRIT_SECT_LOCKER(locker, *m_eventsLocker);
+    wxENTER_CRIT_SECT( *m_eventsLocker);
 #endif
 
     wxNode *node = m_pendingEvents->First();
-    wxEvent *event;
-
     while ( node )
     {
-        event = (wxEvent *)node->Data();
+        wxEvent *event = (wxEvent *)node->Data();
+        delete 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
         ProcessEvent(*event);
         delete event;
-        delete node;
+#if defined(__VISAGECPP__)
+        wxENTER_CRIT_SECT( m_eventsLocker);
+#else
+        wxENTER_CRIT_SECT( *m_eventsLocker);
+#endif
+       
         node = m_pendingEvents->First();
     }
+    
+#if defined(__VISAGECPP__)
+    wxLEAVE_CRIT_SECT( m_eventsLocker);
+#else
+    wxLEAVE_CRIT_SECT( *m_eventsLocker);
+#endif
 }
 
 /*
index 5bfb166c1596475e5f62bb6dfcbfaca2685096e8..c1500dfba027d3bb3e83516a6bf9d2bf767855a4 100644 (file)
 
 #include <stdlib.h>
 #include <stdio.h>
-#include "gdk/gdk.h"
-#include "glib.h"
+
+#include <gdk/gdk.h>
+#include <glib.h>
+
 #include "wx/gsocket.h"
 #include "wx/unix/gsockunx.h"
 
index 54d5f9edfdb5810ebdadda1058f281c184fc0dea..e4936a923ef4b2096e0b66a95a237ba760add7ad 100644 (file)
@@ -26,9 +26,9 @@
 #include "wx/tooltip.h"
 #endif
 
-#include "gdk/gdk.h"
-#include "gtk/gtk.h"
-#include "gdk/gdkkeysyms.h"
+#include <gdk/gdk.h>
+#include <gtk/gtk.h>
+#include <gdk/gdkkeysyms.h>
 
 //-----------------------------------------------------------------------------
 // idle system
index ef10bb6cfcb7975afc7fae698bdd7b567c34f226..8c29530da57164887c71fb0caf8c3b47a0f79815 100644 (file)
@@ -19,9 +19,9 @@
 #include "wx/menu.h"
 #include "wx/intl.h"
 
-#include "glib.h"
-#include "gdk/gdk.h"
-#include "gtk/gtk.h"
+#include <glib.h>
+#include <gdk/gdk.h>
+#include <gtk/gtk.h>
 #include "wx/gtk/win_gtk.h"
 
 //-----------------------------------------------------------------------------
index 750593b5339ced30c42ec57504e8c4986248b9ca..b645a865b919f0c8c94c7f867eac7bb59c3f918f 100644 (file)
@@ -21,8 +21,8 @@
     #include "wx/accel.h"
 #endif // wxUSE_ACCEL
 
-#include "gdk/gdk.h"
-#include "gtk/gtk.h"
+#include <gdk/gdk.h>
+#include <gtk/gtk.h>
 
 //-----------------------------------------------------------------------------
 // idle system
index 5bfb166c1596475e5f62bb6dfcbfaca2685096e8..c1500dfba027d3bb3e83516a6bf9d2bf767855a4 100644 (file)
 
 #include <stdlib.h>
 #include <stdio.h>
-#include "gdk/gdk.h"
-#include "glib.h"
+
+#include <gdk/gdk.h>
+#include <glib.h>
+
 #include "wx/gsocket.h"
 #include "wx/unix/gsockunx.h"
 
index 54d5f9edfdb5810ebdadda1058f281c184fc0dea..e4936a923ef4b2096e0b66a95a237ba760add7ad 100644 (file)
@@ -26,9 +26,9 @@
 #include "wx/tooltip.h"
 #endif
 
-#include "gdk/gdk.h"
-#include "gtk/gtk.h"
-#include "gdk/gdkkeysyms.h"
+#include <gdk/gdk.h>
+#include <gtk/gtk.h>
+#include <gdk/gdkkeysyms.h>
 
 //-----------------------------------------------------------------------------
 // idle system
index ef10bb6cfcb7975afc7fae698bdd7b567c34f226..8c29530da57164887c71fb0caf8c3b47a0f79815 100644 (file)
@@ -19,9 +19,9 @@
 #include "wx/menu.h"
 #include "wx/intl.h"
 
-#include "glib.h"
-#include "gdk/gdk.h"
-#include "gtk/gtk.h"
+#include <glib.h>
+#include <gdk/gdk.h>
+#include <gtk/gtk.h>
 #include "wx/gtk/win_gtk.h"
 
 //-----------------------------------------------------------------------------
index 750593b5339ced30c42ec57504e8c4986248b9ca..b645a865b919f0c8c94c7f867eac7bb59c3f918f 100644 (file)
@@ -21,8 +21,8 @@
     #include "wx/accel.h"
 #endif // wxUSE_ACCEL
 
-#include "gdk/gdk.h"
-#include "gtk/gtk.h"
+#include <gdk/gdk.h>
+#include <gtk/gtk.h>
 
 //-----------------------------------------------------------------------------
 // idle system