]> git.saurik.com Git - wxWidgets.git/blobdiff - src/gtk/app.cpp
DoGetSize implementation corrected
[wxWidgets.git] / src / gtk / app.cpp
index eccbb52d0a7ea32e83d2f6e738a56f94e6da69d9..bc09ab826363c2ea1f77a132f7380be996cc5200 100644 (file)
@@ -13,6 +13,7 @@
 
 #ifdef __VMS
 #include <vms_jackets.h>
+#undef ConnectionNumber
 #endif
 
 #include "wx/app.h"
 #include "wx/msgdlg.h"
 #include "wx/file.h"
 #include "wx/filename.h"
-
-#if wxUSE_WX_RESOURCES
-    #include "wx/resource.h"
-#endif
-
 #include "wx/module.h"
 #include "wx/image.h"
 
@@ -172,6 +168,8 @@ bool wxApp::Yield(bool onlyIfNeeded)
 // wxWakeUpIdle
 //-----------------------------------------------------------------------------
 
+static bool gs_WakeUpIdle = false;
+
 void wxWakeUpIdle()
 {
 #if wxUSE_THREADS
@@ -179,8 +177,11 @@ void wxWakeUpIdle()
         wxMutexGuiEnter();
 #endif
 
-    if (g_isIdle)
+    if (g_isIdle) {
+        gs_WakeUpIdle = true;
         wxapp_install_idle_handler();
+        gs_WakeUpIdle = false;
+    }
 
 #if wxUSE_THREADS
     if (!wxThread::IsMain())
@@ -237,8 +238,12 @@ static gint wxapp_idle_callback( gpointer WXUNUSED(data) )
         // But repaint the assertion message if necessary
         if (wxTopLevelWindows.GetCount() > 0)
         {
-            wxWindow* win = (wxWindow*) wxTopLevelWindows.Last()->Data();
+            wxWindow* win = (wxWindow*) wxTopLevelWindows.GetLast()->GetData();
+#ifdef __WXGTK20__
+            if (win->IsKindOf(CLASSINFO(wxMessageDialog)))
+#else
             if (win->IsKindOf(CLASSINFO(wxGenericMessageDialog)))
+#endif
                 win->OnInternalIdle();
         }
         return TRUE;
@@ -361,6 +366,11 @@ static gint wxapp_poll_func( GPollFD *ufds, guint nfds, gint timeout )
 
 void wxapp_install_idle_handler()
 {
+    // GD: this assert is raised when using the thread sample (which works)
+    //     so the test is probably not so easy. Can widget callbacks be
+    //     triggered from child threads and, if so, for which widgets?
+    // wxASSERT_MSG( wxThread::IsMain() || gs_WakeUpIdle, wxT("attempt to install idle handler from widget callback in child thread (should be exclusively from wxWakeUpIdle)") );
+
     wxASSERT_MSG( wxTheApp->m_idleTag == 0, wxT("attempt to install idle handler twice") );
 
     g_isIdle = FALSE;
@@ -607,13 +617,13 @@ bool wxApp::CallInternalIdle( wxWindow* win )
 {
     win->OnInternalIdle();
 
-    wxNode* node = win->GetChildren().First();
+    wxWindowList::Node  *node = win->GetChildren().GetFirst();
     while (node)
     {
-        wxWindow* win = (wxWindow*) node->Data();
-        CallInternalIdle( win );
+        wxWindow    *win = node->GetData();
 
-        node = node->Next();
+        CallInternalIdle( win );
+        node = node->GetNext();
     }
 
     return TRUE;
@@ -631,14 +641,14 @@ bool wxApp::SendIdleEvents( wxWindow* win )
     if (event.MoreRequested())
         needMore = TRUE;
 
-    wxNode* node = win->GetChildren().First();
+    wxWindowList::Node  *node = win->GetChildren().GetFirst();
     while (node)
     {
-        wxWindow* win = (wxWindow*) node->Data();
+        wxWindow    *win = node->GetData();
+
         if (SendIdleEvents(win))
             needMore = TRUE;
-
-        node = node->Next();
+        node = node->GetNext();
     }
 
     return needMore;
@@ -673,17 +683,17 @@ void wxApp::Dispatch()
 
 void wxApp::DeletePendingObjects()
 {
-    wxNode *node = wxPendingDelete.First();
+    wxNode *node = wxPendingDelete.GetFirst();
     while (node)
     {
-        wxObject *obj = (wxObject *)node->Data();
+        wxObject *obj = (wxObject *)node->GetData();
 
         delete obj;
 
         if (wxPendingDelete.Find(obj))
             delete node;
 
-        node = wxPendingDelete.First();
+        node = wxPendingDelete.GetFirst();
     }
 }
 
@@ -704,10 +714,6 @@ bool wxApp::Initialize()
     wxInitializeStockLists();
     wxInitializeStockObjects();
 
-#if wxUSE_WX_RESOURCES
-    wxInitializeResourceSystem();
-#endif
-
     wxModule::RegisterModules();
     if (!wxModule::InitializeModules())
         return FALSE;
@@ -723,10 +729,6 @@ void wxApp::CleanUp()
 {
     wxModule::CleanUpModules();
 
-#if wxUSE_WX_RESOURCES
-    wxCleanUpResourceSystem();
-#endif
-
     delete wxTheColourDatabase;
     wxTheColourDatabase = (wxColourDatabase*) NULL;
 
@@ -741,7 +743,9 @@ void wxApp::CleanUp()
 
 #if wxUSE_THREADS
     delete wxPendingEvents;
+    wxPendingEvents = NULL;
     delete wxPendingEventsLocker;
+    wxPendingEventsLocker = NULL;
 #endif
 
     // check for memory leaks