// Modified by:
// Created: 04/01/98
// RCS-ID: $Id$
-// Copyright: (c) Julian Smart and Markus Holzem
-// Licence: wxWindows license
+// Copyright: (c) Julian Smart
+// Licence: wxWindows licence
/////////////////////////////////////////////////////////////////////////////
// ===========================================================================
WX_DEFINE_OBJARRAY(wxMsgArray);
#endif // wxUSE_THREADS
-#if wxUSE_WX_RESOURCES
- #include "wx/resource.h"
-#endif
-
#if wxUSE_TOOLTIPS
#include "wx/tooltip.h"
#endif // wxUSE_TOOLTIPS
// 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__)
+#if defined(__GNUWIN32_OLD__) || defined(__SYMANTEC__) || defined(__SALFORDC__)
#undef wxUSE_OLE
#define wxUSE_OLE 0
#include <string.h>
#include <ctype.h>
-#if defined(__WIN95__) && !((defined(__GNUWIN32_OLD__) || defined(__TWIN32__) || defined(__WXMICROWIN__)) && !defined(__CYGWIN10__))
+#if defined(__WIN95__) && !((defined(__GNUWIN32_OLD__) || defined(__WXMICROWIN__)) && !defined(__CYGWIN10__))
#include <commctrl.h>
#endif
HBRUSH wxDisableButtonBrush = (HBRUSH) 0;
+#ifdef __DIGITALMARS__
+extern "C" LRESULT WXDLLEXPORT APIENTRY wxWndProc(HWND, UINT, WPARAM, LPARAM);
+#else
LRESULT WXDLLEXPORT APIENTRY wxWndProc(HWND, UINT, WPARAM, LPARAM);
+#endif
// FIXME wxUSE_ON_FATAL_EXCEPTION is only supported for VC++ now because it
// needs compiler support for Win32 SEH. Others (especially Borland)
bool wxApp::Initialize()
{
// the first thing to do is to check if we're trying to run an Unicode
- // program under Win9x w/o MSLU emulation layer - if so, abort right now
+ // program under Win9x w/o MSLU emulation layer - if so, abort right now
// as it has no chance to work
#if wxUSE_UNICODE && !wxUSE_UNICODE_MSLU
if ( wxGetOsVersion() != wxWINDOWS_NT )
wxInitializeStockLists();
wxInitializeStockObjects();
-#if wxUSE_WX_RESOURCES
- wxInitializeResourceSystem();
-#endif
-
wxBitmap::InitStandardHandlers();
#if defined(__WIN95__) && !defined(__WXMICROWIN__)
wxModule::CleanUpModules();
-#if wxUSE_WX_RESOURCES
- wxCleanUpResourceSystem();
-
- // wxDefaultResourceTable->ClearTable();
-#endif
-
wxDeleteStockObjects();
// Destroy all GDI lists, etc.
#endif
delete wxWinHandleHash;
+ wxWinHandleHash = NULL; // Set to null in case anything later tries to ref it.
- // GL: I'm annoyed ... I don't know where to put this and I don't want to
- // create a module for that as it's part of the core.
delete wxPendingEvents;
+ wxPendingEvents = NULL; // Set to null because wxAppBase::wxEvtHandler is destroyed later.
#if wxUSE_THREADS
delete wxPendingEventsLocker;
+ wxPendingEventsLocker = NULL; // Set to null because wxAppBase::wxEvtHandler is destroyed later.
// If we don't do the following, we get an apparent memory leak
#if wxUSE_VALIDATORS
((wxEvtHandler&) wxDefaultValidator).ClearEventLocker();
// we can't simply double-click on the error message and get to that
// line in the source. So VC++ at least, let's have a sensible default.
#ifdef __VISUALC__
+#if wxUSE_LOG
wxLog::SetTimestamp(NULL);
-#endif
+#endif // wxUSE_LOG
+#endif // __VISUALC__
// init the app
int retValue = wxEntryInitGui() && wxTheApp->OnInit() ? 0 : -1;
// Send idle event to window and all subwindows
bool wxApp::SendIdleEvents(wxWindow* win)
{
- bool needMore = FALSE;
-
wxIdleEvent event;
event.SetEventObject(win);
win->GetEventHandler()->ProcessEvent(event);
- if (event.MoreRequested())
- needMore = TRUE;
+ bool needMore = event.MoreRequested();
- wxNode* node = win->GetChildren().First();
- while (node)
+ 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;
}
void wxApp::DeletePendingObjects()
{
- wxNode *node = wxPendingDelete.First();
+ wxNode *node = wxPendingDelete.GetFirst();
while (node)
{
- wxObject *obj = (wxObject *)node->Data();
+ wxObject *obj = node->GetData();
delete obj;
// Deleting one object may have deleted other pending
// objects, so start from beginning of list again.
- node = wxPendingDelete.First();
+ node = wxPendingDelete.GetFirst();
}
}
void wxExit()
{
- wxLogError(_("Fatal error: exiting"));
-
- wxApp::CleanUp();
- exit(0);
+ if ( wxTheApp )
+ {
+ wxTheApp->ExitMainLoop();
+ }
+ else
+ {
+ // what else can we do?
+ exit(-1);
+ }
}
// Yield to incoming messages
// MT-FIXME
static bool s_inYield = FALSE;
+#if wxUSE_LOG
// disable log flushing from here because a call to wxYield() shouldn't
// normally result in message boxes popping up &c
wxLog::Suspend();
+#endif // wxUSE_LOG
if ( s_inYield )
{
// if there are pending events, we must process them.
ProcessPendingEvents();
+#if wxUSE_LOG
// let the logs be flashed again
wxLog::Resume();
+#endif // wxUSE_LOG
s_inYield = FALSE;
// For some reason, with MSVC++ 1.5, WinMain isn't linked in properly
// if in a separate file. So include it here to ensure it's linked.
-#if (defined(__VISUALC__) && !defined(__WIN32__)) || (defined(__GNUWIN32__) && !defined(__WINE__) && !defined(__TWIN32__) && !defined(WXMAKINGDLL))
+#if (defined(__VISUALC__) && !defined(__WIN32__)) || (defined(__GNUWIN32__) && !defined(__WINE__) && !defined(WXMAKINGDLL))
#include "main.cpp"
#endif