]> git.saurik.com Git - wxWidgets.git/blobdiff - src/gtk/app.cpp
Fixed drawing sample compilo for wxMotif (doesn't have wxRegion::Offset)
[wxWidgets.git] / src / gtk / app.cpp
index 43d42a540f3b96bd3c0788141d24415f83509328..a1bdce64aa5fa862a3485798b6708e00cc034f69 100644 (file)
@@ -42,7 +42,9 @@
 #endif
 
 #include <unistd.h>
-#ifdef __VMS
+#if defined(__DARWIN__)
+// FIXME: select must be used instead of poll (GD)
+#elif defined(__VMS)
 # include <poll.h>
 #else
 # include <sys/poll.h>
@@ -245,7 +247,14 @@ static gint wxapp_poll_func( GPollFD *ufds, guint nfds, gint timeout )
     wxMutexGuiLeave();
     g_mainThreadLocked = TRUE;
 
+#ifdef __DARWIN__
+    // FIXME: poll is not available under Darwin/Mac OS X and this needs
+    //        to be implemented using select instead (GD)
+    //        what about other BSD derived systems?
+    res = -1;
+#else
     res = poll( (struct pollfd*) ufds, nfds, timeout );
+#endif
 
     wxMutexGuiEnter();
     g_mainThreadLocked = FALSE;
@@ -486,12 +495,37 @@ bool wxApp::SendIdleEvents()
         wxWindow* win = node->GetData();
         if (SendIdleEvents(win))
             needMore = TRUE;
+            
         node = node->GetNext();
     }
 
+    node = wxTopLevelWindows.GetFirst();
+    while (node)
+    {
+        wxWindow* win = node->GetData();
+        CallInternalIdle( win );
+        
+        node = node->GetNext();
+    }
     return needMore;
 }
 
+bool wxApp::CallInternalIdle( wxWindow* win )
+{
+    win->OnInternalIdle();
+
+    wxNode* node = win->GetChildren().First();
+    while (node)
+    {
+        wxWindow* win = (wxWindow*) node->Data();
+        CallInternalIdle( win );
+
+        node = node->Next();
+    }
+    
+    return TRUE;
+}
+
 bool wxApp::SendIdleEvents( wxWindow* win )
 {
     bool needMore = FALSE;
@@ -514,8 +548,6 @@ bool wxApp::SendIdleEvents( wxWindow* win )
         node = node->Next();
     }
     
-    win->OnInternalIdle();
-
     return needMore;
 }