]> git.saurik.com Git - wxWidgets.git/commitdiff
use GTK-specific GUI lock
authorPaul Cornett <paulcor@bullseye.com>
Thu, 18 Jan 2007 18:13:34 +0000 (18:13 +0000)
committerPaul Cornett <paulcor@bullseye.com>
Thu, 18 Jan 2007 18:13:34 +0000 (18:13 +0000)
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@44245 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775

src/gtk/app.cpp
src/unix/threadpsx.cpp

index 1aee54439b1919e3b9e1f4272927e70d0b3aaada..97438c257546de2bccbfad95482fd51f73049337 100644 (file)
@@ -247,18 +247,12 @@ static GPollFunc wxgs_poll_func;
 extern "C" {
 static gint wxapp_poll_func( GPollFD *ufds, guint nfds, gint timeout )
 {
-    gdk_threads_enter();
-
-    wxMutexGuiLeave();
     g_mainThreadLocked = true;
 
     gint res = (*wxgs_poll_func)(ufds, nfds, timeout);
 
-    wxMutexGuiEnter();
     g_mainThreadLocked = false;
 
-    gdk_threads_leave();
-
     return res;
 }
 }
@@ -408,6 +402,7 @@ bool wxApp::Initialize(int& argc, wxChar **argv)
 #if wxUSE_THREADS
     if (!g_thread_supported())
         g_thread_init(NULL);
+    gdk_threads_init();
 
     wxgs_poll_func = g_main_context_get_poll_func(NULL);
     g_main_context_set_poll_func(NULL, wxapp_poll_func);
@@ -562,3 +557,15 @@ void wxApp::SuspendIdleCallback()
         wxAddEmissionHook();
     }
 }
+
+#if wxUSE_THREADS
+void wxMutexGuiEnter()
+{
+    gdk_threads_enter();
+}
+
+void wxMutexGuiLeave()
+{
+    gdk_threads_leave();
+}
+#endif
index ff291daa3f114c0d07ba5ac9309edb167b03f6ae..ad7585062f23e846fe7dc03dd6ddb7e4282f787c 100644 (file)
@@ -132,10 +132,12 @@ static wxMutex *gs_mutexDeleteThread = (wxMutex *)NULL;
 // gs_nThreadsBeingDeleted will have been deleted
 static wxCondition *gs_condAllDeleted = (wxCondition *)NULL;
 
+#ifndef __WXGTK20__
 // this mutex must be acquired before any call to a GUI function
 // (it's not inside #if wxUSE_GUI because this file is compiled as part
 // of wxBase)
 static wxMutex *gs_mutexGui = NULL;
+#endif
 
 // when we wait for a thread to exit, we're blocking on a condition which the
 // thread signals in its SignalExit() method -- but this condition can't be a
@@ -1624,8 +1626,10 @@ bool wxThreadModule::OnInit()
 
     gs_mutexAllThreads = new wxMutex();
 
+#ifndef __WXGTK20__
     gs_mutexGui = new wxMutex();
     gs_mutexGui->Lock();
+#endif
 
     gs_mutexDeleteThread = new wxMutex();
     gs_condAllDeleted = new wxCondition(*gs_mutexDeleteThread);
@@ -1678,9 +1682,11 @@ void wxThreadModule::OnExit()
 
     delete gs_mutexAllThreads;
 
+#ifndef __WXGTK20__
     // destroy GUI mutex
     gs_mutexGui->Unlock();
     delete gs_mutexGui;
+#endif
 
     // and free TLD slot
     (void)pthread_key_delete(gs_keySelf);
@@ -1727,6 +1733,7 @@ static void DeleteThread(wxThread *This)
     }
 }
 
+#ifndef __WXGTK20__
 void wxMutexGuiEnter()
 {
     gs_mutexGui->Lock();
@@ -1736,6 +1743,7 @@ void wxMutexGuiLeave()
 {
     gs_mutexGui->Unlock();
 }
+#endif
 
 // ----------------------------------------------------------------------------
 // include common implementation code