]> git.saurik.com Git - wxWidgets.git/blobdiff - src/msw/app.cpp
fix for (too big) combobox height
[wxWidgets.git] / src / msw / app.cpp
index 44e9132bb96e9599b2638df30d76957d7fa78351..94c9239a6dece9889408e2b6528964802c891615 100644 (file)
     #include "wx/tooltip.h"
 #endif // wxUSE_TOOLTIPS
 
-// OLE is used for drag-and-drop, clipboard, OLE Automation...
-#ifndef wxUSE_NORLANDER_HEADERS
-#if defined(__GNUWIN32__) || defined(__SC__) || defined(__SALFORDC__)
+// OLE is used for drag-and-drop, clipboard, OLE Automation..., but some
+// compilers don't support it (missing headers, libs, ...)
+#if defined(__GNUWIN32_OLD__) || defined(__SC__) || defined(__SALFORDC__)
     #undef wxUSE_OLE
 
     #define  wxUSE_OLE 0
 #endif // broken compilers
-#endif
 
 #if wxUSE_OLE
     #include <ole2.h>
@@ -87,7 +86,7 @@
 #include <string.h>
 #include <ctype.h>
 
-#if (defined(__WIN95__) && !defined(__GNUWIN32__)) || defined(__TWIN32__) || defined(wxUSE_NORLANDER_HEADERS)
+#if defined(__WIN95__) && !(defined(__GNUWIN32_OLD__) || defined(__TWIN32__))
     #include <commctrl.h>
 #endif
 
@@ -1006,14 +1005,21 @@ void wxApp::OnIdle(wxIdleEvent& event)
 
     s_inOnIdle = TRUE;
 
+    // If there are pending events, we must process them: pending events
+    // are either events to the threads other than main or events posted
+    // with wxPostEvent() functions
+    // GRG: I have moved this here so that all pending events are processed
+    //   before starting to delete any objects. This behaves better (in
+    //   particular, wrt wxPostEvent) and is coherent with wxGTK's current
+    //   behaviour. Changed Feb/2000 before 2.1.14
+    ProcessPendingEvents();
+
     // 'Garbage' collection of windows deleted with Close().
     DeletePendingObjects();
 
 #if wxUSE_LOG
     // flush the logged messages if any
-    wxLog *pLog = wxLog::GetActiveTarget();
-    if ( pLog != NULL && pLog->HasPendingMessages() )
-        pLog->Flush();
+    wxLog::FlushActive();
 #endif // wxUSE_LOG
 
     // Send OnIdle events to all windows
@@ -1024,11 +1030,6 @@ void wxApp::OnIdle(wxIdleEvent& event)
         event.RequestMore(TRUE);
     }
 
-    // If they are pending events, we must process them: pending events are
-    // either events to the threads other than main or events posted with
-    // wxPostEvent() functions
-    ProcessPendingEvents();
-
     s_inOnIdle = FALSE;
 }
 
@@ -1213,13 +1214,20 @@ void wxExit()
 // Yield to incoming messages
 bool wxYield()
 {
+    // disable log flushing from here because a call to wxYield() shouldn't
+    // normally result in message boxes popping up &c
+    wxLog::Suspend();
+
     // we don't want to process WM_QUIT from here - it should be processed in
     // the main event loop in order to stop it
-
     MSG msg;
     while ( PeekMessage(&msg, (HWND)0, 0, 0, PM_NOREMOVE) &&
             msg.message != WM_QUIT )
     {
+#if wxUSE_THREADS
+        wxMutexGuiLeaveOrEnter();
+#endif // wxUSE_THREADS
+
         if ( !wxTheApp->DoMessage() )
             break;
     }
@@ -1227,6 +1235,9 @@ bool wxYield()
     // If they are pending events, we must process them.
     wxTheApp->ProcessPendingEvents();
 
+    // let the logs be flashed again
+    wxLog::Resume();
+
     return TRUE;
 }