]> git.saurik.com Git - wxWidgets.git/blobdiff - src/gtk1/app.cpp
VTK wrapper of vtkRenderWindow for wxPython. Tested on MSW so far.
[wxWidgets.git] / src / gtk1 / app.cpp
index a81c4dd2056a32f60d4b85936d345439f579017b..5d08196d7b2e1ebd346c18f3211b963cd805ee51 100644 (file)
@@ -8,7 +8,6 @@
 /////////////////////////////////////////////////////////////////////////////
 
 #ifdef __GNUG__
 /////////////////////////////////////////////////////////////////////////////
 
 #ifdef __GNUG__
-    #pragma implementation "appbase.h"
     #pragma implementation "app.h"
 #endif
 
     #pragma implementation "app.h"
 #endif
 
 wxApp *wxTheApp = (wxApp *)  NULL;
 wxAppInitializerFunction wxAppBase::m_appInitFn = (wxAppInitializerFunction) NULL;
 
 wxApp *wxTheApp = (wxApp *)  NULL;
 wxAppInitializerFunction wxAppBase::m_appInitFn = (wxAppInitializerFunction) NULL;
 
-#if wxUSE_THREADS
-extern wxList *wxPendingEvents;
-extern wxCriticalSection *wxPendingEventsLocker;
-#endif
 extern wxResourceCache *wxTheResourceCache;
 extern bool g_isIdle;
 
 extern wxResourceCache *wxTheResourceCache;
 extern bool g_isIdle;
 
@@ -127,10 +122,18 @@ unsigned char g_palette[64*3] =
 // local functions
 //-----------------------------------------------------------------------------
 
 // local functions
 //-----------------------------------------------------------------------------
 
-extern void wxFlushResources(void);
+extern void wxFlushResources();
+
+/* forward declaration */
+gint   wxapp_idle_callback( gpointer WXUNUSED(data) );
+void   wxapp_install_idle_handler();
+
+#if wxUSE_THREADS
+gint   wxapp_wakeup_timerout_callback( gpointer WXUNUSED(data) );
+#endif
 
 //-----------------------------------------------------------------------------
 
 //-----------------------------------------------------------------------------
-// global functions
+// wxExit
 //-----------------------------------------------------------------------------
 
 void wxExit()
 //-----------------------------------------------------------------------------
 
 void wxExit()
@@ -138,13 +141,14 @@ void wxExit()
     gtk_main_quit();
 }
 
     gtk_main_quit();
 }
 
-/* forward declaration */
-gint wxapp_idle_callback( gpointer WXUNUSED(data) );
+//-----------------------------------------------------------------------------
+// wxYield
+//-----------------------------------------------------------------------------
 
 bool wxYield()
 {
     bool has_idle = (wxTheApp->m_idleTag != 0);
 
 bool wxYield()
 {
     bool has_idle = (wxTheApp->m_idleTag != 0);
-    
+
     if (has_idle)
     {
         /* We need to temporarily remove idle callbacks or the loop will
     if (has_idle)
     {
         /* We need to temporarily remove idle callbacks or the loop will
@@ -160,20 +164,34 @@ bool wxYield()
        might have been changed (it also will update other things set from
        OnUpdateUI() which is a nice (and desired) side effect) */
     while (wxTheApp->ProcessIdle()) { }
        might have been changed (it also will update other things set from
        OnUpdateUI() which is a nice (and desired) side effect) */
     while (wxTheApp->ProcessIdle()) { }
-       
+
     if (has_idle)
     {
         /* re-add idle handler */
         wxTheApp->m_idleTag = gtk_idle_add( wxapp_idle_callback, (gpointer) NULL );
     }
     if (has_idle)
     {
         /* re-add idle handler */
         wxTheApp->m_idleTag = gtk_idle_add( wxapp_idle_callback, (gpointer) NULL );
     }
-    
+
     return TRUE;
 }
 
     return TRUE;
 }
 
+//-----------------------------------------------------------------------------
+// wxWakeUpIdle
+//-----------------------------------------------------------------------------
+
+void wxWakeUpIdle()
+{
+    if (g_isIdle) 
+        wxapp_install_idle_handler();
+}
+
+//-----------------------------------------------------------------------------
+// local functions
+//-----------------------------------------------------------------------------
+
 gint wxapp_idle_callback( gpointer WXUNUSED(data) )
 {
     if (!wxTheApp) return TRUE;
 gint wxapp_idle_callback( gpointer WXUNUSED(data) )
 {
     if (!wxTheApp) return TRUE;
-    
+
 #if (GTK_MINOR_VERSION > 0)
     /* when getting called from GDK's idle handler we
        are no longer within GDK's grab on the GUI
 #if (GTK_MINOR_VERSION > 0)
     /* when getting called from GDK's idle handler we
        are no longer within GDK's grab on the GUI
@@ -206,7 +224,7 @@ gint wxapp_idle_callback( gpointer WXUNUSED(data) )
 
 void wxapp_install_idle_handler()
 {
 
 void wxapp_install_idle_handler()
 {
-    wxASSERT_MSG( wxTheApp->m_idleTag == 0, _T("attempt to install idle handler twice") );
+    wxASSERT_MSG( wxTheApp->m_idleTag == 0, wxT("attempt to install idle handler twice") );
 
     /* this routine gets called by all event handlers
        indicating that the idle is over. */
 
     /* this routine gets called by all event handlers
        indicating that the idle is over. */
@@ -218,25 +236,22 @@ void wxapp_install_idle_handler()
 
 #if wxUSE_THREADS
 
 
 #if wxUSE_THREADS
 
-/* forward declaration */
-static gint wxapp_wakeup_timerout_callback( gpointer WXUNUSED(data) );
-
 void wxapp_install_thread_wakeup()
 {
     if (wxTheApp->m_wakeUpTimerTag) return;
 void wxapp_install_thread_wakeup()
 {
     if (wxTheApp->m_wakeUpTimerTag) return;
-    
+
     wxTheApp->m_wakeUpTimerTag = gtk_timeout_add( 100, wxapp_wakeup_timerout_callback, (gpointer) NULL );
 }
 
 void wxapp_uninstall_thread_wakeup()
 {
     if (!wxTheApp->m_wakeUpTimerTag) return;
     wxTheApp->m_wakeUpTimerTag = gtk_timeout_add( 100, wxapp_wakeup_timerout_callback, (gpointer) NULL );
 }
 
 void wxapp_uninstall_thread_wakeup()
 {
     if (!wxTheApp->m_wakeUpTimerTag) return;
-    
+
     gtk_timeout_remove( wxTheApp->m_wakeUpTimerTag );
     wxTheApp->m_wakeUpTimerTag = 0;
 }
 
     gtk_timeout_remove( wxTheApp->m_wakeUpTimerTag );
     wxTheApp->m_wakeUpTimerTag = 0;
 }
 
-static gint wxapp_wakeup_timerout_callback( gpointer WXUNUSED(data) )
+gint wxapp_wakeup_timerout_callback( gpointer WXUNUSED(data) )
 {
     wxapp_uninstall_thread_wakeup();
 
 {
     wxapp_uninstall_thread_wakeup();
 
@@ -265,7 +280,8 @@ static gint wxapp_wakeup_timerout_callback( gpointer WXUNUSED(data) )
 
     return TRUE;
 }
 
     return TRUE;
 }
-#endif
+
+#endif // wxUSE_THREADS
 
 //-----------------------------------------------------------------------------
 // wxApp
 
 //-----------------------------------------------------------------------------
 // wxApp
@@ -397,7 +413,7 @@ bool wxApp::OnInitGui()
                     index |= (g >> (5 - vis->green_prec)) << vis->green_shift;
                     index |= (b >> (5 - vis->blue_prec)) << vis->blue_shift;
 #else
                     index |= (g >> (5 - vis->green_prec)) << vis->green_shift;
                     index |= (b >> (5 - vis->blue_prec)) << vis->blue_shift;
 #else
-                    wxFAIL_MSG( _T("Unsupported graphics hardware") );
+                    wxFAIL_MSG( wxT("Unsupported graphics hardware") );
 #endif
                 }
                 m_colorCube[ (r*1024) + (g*32) + b ] = index;
 #endif
                 }
                 m_colorCube[ (r*1024) + (g*32) + b ] = index;
@@ -414,14 +430,6 @@ bool wxApp::ProcessIdle()
     event.SetEventObject( this );
     ProcessEvent( event );
 
     event.SetEventObject( this );
     ProcessEvent( event );
 
-    wxWindowList::Node* node = wxTopLevelWindows.GetFirst();
-    while (node)
-    {
-        wxWindow* win = node->GetData();
-        win->OnInternalIdle();
-        node = node->GetNext();
-    }
-
     return event.MoreRequested();
 }
 
     return event.MoreRequested();
 }
 
@@ -435,11 +443,9 @@ void wxApp::OnIdle( wxIdleEvent &event )
 
     s_inOnIdle = TRUE;
 
 
     s_inOnIdle = TRUE;
 
-#if wxUSE_THREADS
     /* Resend in the main thread events which have been prepared in other
        threads */
     ProcessPendingEvents();
     /* Resend in the main thread events which have been prepared in other
        threads */
     ProcessPendingEvents();
-#endif
 
     /* 'Garbage' collection of windows deleted with Close(). */
     DeletePendingObjects();
 
     /* 'Garbage' collection of windows deleted with Close(). */
     DeletePendingObjects();
@@ -485,6 +491,8 @@ bool wxApp::SendIdleEvents( wxWindow* win )
 
     win->ProcessEvent(event);
 
 
     win->ProcessEvent(event);
 
+    win->OnInternalIdle();
+
     if (event.MoreRequested())
         needMore = TRUE;
 
     if (event.MoreRequested())
         needMore = TRUE;
 
@@ -526,25 +534,6 @@ void wxApp::Dispatch()
     gtk_main_iteration();
 }
 
     gtk_main_iteration();
 }
 
-#if wxUSE_THREADS
-void wxApp::ProcessPendingEvents()
-{
-    wxNode *node = wxPendingEvents->First();
-    wxCriticalSectionLocker locker(*wxPendingEventsLocker);
-
-    while (node)
-    {
-        wxEvtHandler *handler = (wxEvtHandler *)node->Data();
-
-        handler->ProcessPendingEvents();
-
-        delete node;
-
-        node = wxPendingEvents->First();
-    }
-}
-#endif // wxUSE_THREADS
-
 void wxApp::DeletePendingObjects()
 {
     wxNode *node = wxPendingDelete.First();
 void wxApp::DeletePendingObjects()
 {
     wxNode *node = wxPendingDelete.First();
@@ -593,8 +582,6 @@ bool wxApp::Initialize()
     wxInitializeResourceSystem();
 #endif
 
     wxInitializeResourceSystem();
 #endif
 
-    wxImage::InitStandardHandlers();
-
     wxModule::RegisterModules();
     if (!wxModule::InitializeModules()) return FALSE;
 
     wxModule::RegisterModules();
     if (!wxModule::InitializeModules()) return FALSE;
 
@@ -628,8 +615,6 @@ void wxApp::CleanUp()
 
     wxDeleteStockLists();
 
 
     wxDeleteStockLists();
 
-    wxImage::CleanUpHandlers();
-
     delete wxTheApp;
     wxTheApp = (wxApp*) NULL;
 
     delete wxTheApp;
     wxTheApp = (wxApp*) NULL;
 
@@ -650,7 +635,7 @@ void wxApp::CleanUp()
 #if (defined(__WXDEBUG__) && wxUSE_MEMORY_TRACING) || wxUSE_DEBUG_CONTEXT
     if (wxDebugContext::CountObjectsLeft() > 0)
     {
 #if (defined(__WXDEBUG__) && wxUSE_MEMORY_TRACING) || wxUSE_DEBUG_CONTEXT
     if (wxDebugContext::CountObjectsLeft() > 0)
     {
-        wxLogDebug(_T("There were memory leaks.\n"));
+        wxLogDebug(wxT("There were memory leaks.\n"));
         wxDebugContext::Dump();
         wxDebugContext::PrintStatistics();
     }
         wxDebugContext::Dump();
         wxDebugContext::PrintStatistics();
     }
@@ -663,9 +648,8 @@ void wxApp::CleanUp()
     wxLog *oldLog = wxLog::SetActiveTarget( (wxLog*) NULL );
     if (oldLog)
         delete oldLog;
     wxLog *oldLog = wxLog::SetActiveTarget( (wxLog*) NULL );
     if (oldLog)
         delete oldLog;
-}
-
 #endif // wxUSE_LOG
 #endif // wxUSE_LOG
+}
 
 //-----------------------------------------------------------------------------
 // wxEntry
 
 //-----------------------------------------------------------------------------
 // wxEntry
@@ -675,7 +659,11 @@ int wxEntry( int argc, char *argv[] )
 {
     gtk_set_locale();
 
 {
     gtk_set_locale();
 
+#if wxUSE_WCHAR_T
     if (!wxOKlibc()) wxConvCurrent = &wxConvLocal;
     if (!wxOKlibc()) wxConvCurrent = &wxConvLocal;
+#else
+    if (!wxOKlibc()) wxConvCurrent = (wxMBConv*) NULL;
+#endif
 
     gtk_init( &argc, &argv );
 
 
     gtk_init( &argc, &argv );
 
@@ -687,7 +675,7 @@ int wxEntry( int argc, char *argv[] )
     if (!wxTheApp)
     {
         wxCHECK_MSG( wxApp::GetInitializerFunction(), -1,
     if (!wxTheApp)
     {
         wxCHECK_MSG( wxApp::GetInitializerFunction(), -1,
-                     _T("wxWindows error: No initializer - use IMPLEMENT_APP macro.\n") );
+                     wxT("wxWindows error: No initializer - use IMPLEMENT_APP macro.\n") );
 
         wxAppInitializerFunction app_ini = wxApp::GetInitializerFunction();
 
 
         wxAppInitializerFunction app_ini = wxApp::GetInitializerFunction();
 
@@ -696,7 +684,7 @@ int wxEntry( int argc, char *argv[] )
         wxTheApp = (wxApp*) test_app;
     }
 
         wxTheApp = (wxApp*) test_app;
     }
 
-    wxCHECK_MSG( wxTheApp, -1, _T("wxWindows error: no application object") );
+    wxCHECK_MSG( wxTheApp, -1, wxT("wxWindows error: no application object") );
 
     wxTheApp->argc = argc;
 #if wxUSE_UNICODE
 
     wxTheApp->argc = argc;
 #if wxUSE_UNICODE
@@ -800,7 +788,7 @@ wxApp::GetStdIcon(int which) const
             return wxIcon(warning_xpm);
 
         default:
             return wxIcon(warning_xpm);
 
         default:
-            wxFAIL_MSG(_T("requested non existent standard icon"));
+            wxFAIL_MSG(wxT("requested non existent standard icon"));
             // still fall through
 
         case wxICON_HAND:
             // still fall through
 
         case wxICON_HAND: