#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"
void wxapp_install_idle_handler();
-//-----------------------------------------------------------------------------
-// wxExit
-//-----------------------------------------------------------------------------
-
-void wxExit()
-{
- gtk_main_quit();
-}
-
//-----------------------------------------------------------------------------
// wxYield
//-----------------------------------------------------------------------------
// wxWakeUpIdle
//-----------------------------------------------------------------------------
-void wxWakeUpIdle()
+void wxApp::WakeUpIdle()
{
#if wxUSE_THREADS
if (!wxThread::IsMain())
// 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;
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;
{
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;
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;
return 0;
}
+void wxApp::Exit()
+{
+ // VZ: no idea why is it different from ExitMainLoop() but this is what
+ // wxExit() used to do
+ gtk_main_quit();
+}
+
void wxApp::ExitMainLoop()
{
if (gtk_main_level() > 0)
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();
}
}
wxInitializeStockLists();
wxInitializeStockObjects();
-#if wxUSE_WX_RESOURCES
- wxInitializeResourceSystem();
-#endif
-
wxModule::RegisterModules();
if (!wxModule::InitializeModules())
return FALSE;
{
wxModule::CleanUpModules();
-#if wxUSE_WX_RESOURCES
- wxCleanUpResourceSystem();
-#endif
-
delete wxTheColourDatabase;
wxTheColourDatabase = (wxColourDatabase*) NULL;
#if wxUSE_THREADS
delete wxPendingEvents;
+ wxPendingEvents = NULL;
delete wxPendingEventsLocker;
+ wxPendingEventsLocker = NULL;
#endif
// check for memory leaks
if (!wxOKlibc()) wxConvCurrent = (wxMBConv*) NULL;
#endif
- gdk_threads_enter();
-
gtk_init( &argc, &argv );
+ /* we can not enter threads before gtk_init is done */
+ gdk_threads_enter();
+
wxSetDetectableAutoRepeat( TRUE );
if (!wxApp::Initialize())