]> git.saurik.com Git - wxWidgets.git/blobdiff - src/gtk/app.cpp
changed PPC struct alignement setting
[wxWidgets.git] / src / gtk / app.cpp
index f5afdd777c4d3df24cc61de7e534af908fd7c434..daa4e27b35c0bdee775358aa3093577dad8bee4b 100644 (file)
@@ -61,14 +61,15 @@ static GtkWidget *gs_RootWindow = (GtkWidget*) NULL;
 // local functions
 //-----------------------------------------------------------------------------
 
-/* forward declaration */
-gint   wxapp_idle_callback( gpointer WXUNUSED(data) );
-gint   wxapp_pending_callback( gpointer WXUNUSED(data) );
-void   wxapp_install_idle_handler();
+extern "C"
+{
+    gint wxapp_idle_callback( gpointer WXUNUSED(data) );
+    gint wxapp_pending_callback( gpointer WXUNUSED(data) );
+}
 
-#if wxUSE_THREADS
-gint   wxapp_wakeup_timerout_callback( gpointer WXUNUSED(data) );
-#endif
+void wxapp_install_thread_wakeup();
+void wxapp_uninstall_thread_wakeup();
+void wxapp_install_idle_handler();
 
 //-----------------------------------------------------------------------------
 // wxExit
@@ -163,6 +164,28 @@ void wxWakeUpIdle()
 // local functions
 //-----------------------------------------------------------------------------
 
+void wxapp_install_idle_handler()
+{
+    wxASSERT_MSG( wxTheApp->m_idleTag == 0, wxT("attempt to install idle handler twice") );
+
+    g_isIdle = FALSE;
+
+    if (g_pendingTag == 0)
+        g_pendingTag = gtk_idle_add_priority( 900, wxapp_pending_callback, (gpointer) NULL );
+
+    /* This routine gets called by all event handlers
+       indicating that the idle is over. It may also
+       get called from other thread for sending events
+       to the main thread (and processing these in
+       idle time). Very low priority. */
+
+    wxTheApp->m_idleTag = gtk_idle_add_priority( 1000, wxapp_idle_callback, (gpointer) NULL );
+}
+
+// the callback functions must be extern "C" to comply with GTK+ declarations
+extern "C"
+{
+
 gint wxapp_pending_callback( gpointer WXUNUSED(data) )
 {
     if (!wxTheApp) return TRUE;
@@ -230,24 +253,42 @@ gint wxapp_idle_callback( gpointer WXUNUSED(data) )
     return FALSE;
 }
 
-void wxapp_install_idle_handler()
+#if wxUSE_THREADS
+
+gint wxapp_wakeup_timerout_callback( gpointer WXUNUSED(data) )
 {
-    wxASSERT_MSG( wxTheApp->m_idleTag == 0, wxT("attempt to install idle handler twice") );
+    // when getting called from GDK's time-out handler
+    // we are no longer within GDK's grab on the GUI
+    // thread so we must lock it here ourselves
+    gdk_threads_enter();
 
-    g_isIdle = FALSE;
+    wxapp_uninstall_thread_wakeup();
 
-    if (g_pendingTag == 0)
-        g_pendingTag = gtk_idle_add_priority( 900, wxapp_pending_callback, (gpointer) NULL );
+    // unblock other threads wishing to do some GUI things
+    wxMutexGuiLeave();
 
-    /* This routine gets called by all event handlers
-       indicating that the idle is over. It may also
-       get called from other thread for sending events
-       to the main thread (and processing these in
-       idle time). Very low priority. */
+    g_mainThreadLocked = TRUE;
 
-    wxTheApp->m_idleTag = gtk_idle_add_priority( 1000, wxapp_idle_callback, (gpointer) NULL );
+    // wake up other threads
+    wxUsleep( 1 );
+
+    // block other thread again
+    wxMutexGuiEnter();
+
+    g_mainThreadLocked = FALSE;
+
+    wxapp_install_thread_wakeup();
+
+    // release lock again
+    gdk_threads_leave();
+
+    return TRUE;
 }
 
+#endif // wxUSE_THREADS
+
+} // extern "C"
+
 #if wxUSE_THREADS
 
 static int g_threadUninstallLevel = 0;
@@ -275,36 +316,6 @@ void wxapp_uninstall_thread_wakeup()
     wxTheApp->m_wakeUpTimerTag = 0;
 }
 
-gint wxapp_wakeup_timerout_callback( gpointer WXUNUSED(data) )
-{
-    // when getting called from GDK's time-out handler
-    // we are no longer within GDK's grab on the GUI
-    // thread so we must lock it here ourselves
-    gdk_threads_enter();
-
-    wxapp_uninstall_thread_wakeup();
-
-    // unblock other threads wishing to do some GUI things
-    wxMutexGuiLeave();
-
-    g_mainThreadLocked = TRUE;
-
-    // wake up other threads
-    wxUsleep( 1 );
-
-    // block other thread again
-    wxMutexGuiEnter();
-
-    g_mainThreadLocked = FALSE;
-
-    wxapp_install_thread_wakeup();
-
-    // release lock again
-    gdk_threads_leave();
-
-    return TRUE;
-}
-
 #endif // wxUSE_THREADS
 
 //-----------------------------------------------------------------------------
@@ -580,8 +591,6 @@ bool wxApp::Initialize()
 
     wxClassInfo::InitializeClasses();
 
-    wxSystemSettings::Init();
-    
 #if wxUSE_INTL
     wxFont::SetDefaultEncoding(wxLocale::GetSystemEncoding());
 #endif
@@ -636,8 +645,6 @@ void wxApp::CleanUp()
     delete wxPendingEventsLocker;
 #endif
 
-    wxSystemSettings::Done();
-
     delete[] wxBuffer;
 
     wxClassInfo::CleanUpClasses();