// Created: 19.06.2003 (extracted from common/appcmn.cpp)
// RCS-ID: $Id$
// Copyright: (c) 2003 Vadim Zeitlin <vadim@wxwindows.org>
-// License: wxWindows license
+// Licence: wxWindows licence
///////////////////////////////////////////////////////////////////////////////
// ============================================================================
#endif
#ifndef WX_PRECOMP
- #ifdef __WXMSW__
+ #ifdef __WINDOWS__
#include "wx/msw/wrapwin.h" // includes windows.h for MessageBox()
#endif
#include "wx/list.h"
#include "wx/filename.h"
#include "wx/msgout.h"
#include "wx/scopedptr.h"
+#include "wx/sysopt.h"
#include "wx/tokenzr.h"
#include "wx/thread.h"
#include <typeinfo>
#endif
-#ifndef __WXPALMOS5__
-#if !defined(__WXMSW__) || defined(__WXMICROWIN__)
+#if !defined(__WINDOWS__) || defined(__WXMICROWIN__)
#include <signal.h> // for SIGTRAP used by wxTrap()
#endif //Win/Unix
#include <locale.h>
-#endif // ! __WXPALMOS5__
#if wxUSE_FONTMAP
#include "wx/fontmap.h"
#if wxDEBUG_LEVEL
#if wxUSE_STACKWALKER
#include "wx/stackwalk.h"
- #ifdef __WXMSW__
+ #ifdef __WINDOWS__
#include "wx/msw/debughlp.h"
#endif
#endif // wxUSE_STACKWALKER
// In unicode mode the SetTraceMasks call can cause an apptraits to be
// created, but since we are still in the constructor the wrong kind will
// be created for GUI apps. Destroy it so it can be created again later.
- delete m_traits;
- m_traits = NULL;
+ wxDELETE(m_traits);
#endif
#endif
+
+ wxEvtHandler::AddFilter(this);
}
wxAppConsoleBase::~wxAppConsoleBase()
{
+ wxEvtHandler::RemoveFilter(this);
+
// we're being destroyed and using this object from now on may not work or
// even crash so don't leave dangling pointers to it
ms_appInstance = NULL;
wxString wxAppConsoleBase::GetAppName() const
{
wxString name = m_appName;
-#ifndef __WXPALMOS__
if ( name.empty() )
{
if ( argv )
wxFileName::SplitPath(argv[0], NULL, &name, NULL);
}
}
-#endif // !__WXPALMOS__
return name;
}
void wxAppConsoleBase::CleanUp()
{
- if ( m_mainLoop )
- {
- delete m_mainLoop;
- m_mainLoop = NULL;
- }
+ wxDELETE(m_mainLoop);
}
// ----------------------------------------------------------------------------
bool wxAppConsoleBase::Yield(bool onlyIfNeeded)
{
wxEventLoopBase * const loop = wxEventLoopBase::GetActive();
+ if ( loop )
+ return loop->Yield(onlyIfNeeded);
- return loop && loop->Yield(onlyIfNeeded);
+ wxScopedPtr<wxEventLoopBase> tmpLoop(CreateMainLoop());
+ return tmpLoop->Yield(onlyIfNeeded);
}
void wxAppConsoleBase::WakeUpIdle()
wxLog::FlushActive();
#endif
+ // Garbage collect all objects previously scheduled for destruction.
+ DeletePendingObjects();
+
return event.MoreRequested();
}
int wxAppConsoleBase::FilterEvent(wxEvent& WXUNUSED(event))
{
// process the events normally by default
- return -1;
+ return Event_Skip;
}
void wxAppConsoleBase::DelayPendingEventHandler(wxEvtHandler* toDelay)
wxLEAVE_CRIT_SECT(m_handlersWithPendingEventsLocker);
}
-
- // Garbage collect all objects previously scheduled for destruction.
- DeletePendingObjects();
}
void wxAppConsoleBase::DeletePendingEvents()
{
#if wxDEBUG_LEVEL
-#if !defined(__WXMSW__)
+#if !defined(__WINDOWS__)
// on Unix stack frame generation may take some time, depending on the
// size of the executable mainly... warn the user that we are working
wxFprintf(stderr, "Collecting stack trace information, please wait...");
fflush(stderr);
-#endif // !__WXMSW__
+#endif // !__WINDOWS__
wxString stackTrace;
return x == y;
}
+void wxAbort()
+{
+#ifdef __WXWINCE__
+ ExitThread(3);
+#else
+ abort();
+#endif
+}
+
#if wxDEBUG_LEVEL
// break into the debugger
void wxTrap()
{
-#if defined(__WXMSW__) && !defined(__WXMICROWIN__)
+#if defined(__WINDOWS__) && !defined(__WXMICROWIN__)
DebugBreak();
#elif defined(_MSL_USING_MW_C_HEADERS) && _MSL_USING_MW_C_HEADERS
Debugger();
const wxString& cond,
const wxString& msg)
{
+ // If this option is set, we should abort immediately when assert happens.
+ if ( wxSystemOptions::GetOptionInt("exit-on-assert") )
+ wxAbort();
+
// FIXME MT-unsafe
static int s_bInAssert = 0;
static
bool DoShowAssertDialog(const wxString& msg)
{
- // under MSW we can show the dialog even in the console mode
-#if defined(__WXMSW__) && !defined(__WXMICROWIN__)
+ // under Windows we can show the dialog even in the console mode
+#if defined(__WINDOWS__) && !defined(__WXMICROWIN__)
wxString msgDlg(msg);
// this message is intentionally not translated -- it is for developers
wxT("You can also choose [Cancel] to suppress ")
wxT("further warnings.");
- switch ( ::MessageBox(NULL, msgDlg.wx_str(), wxT("wxWidgets Debug Alert"),
+ switch ( ::MessageBox(NULL, msgDlg.t_str(), wxT("wxWidgets Debug Alert"),
MB_YESNOCANCEL | MB_ICONSTOP ) )
{
case IDYES:
//case IDNO: nothing to do
}
-#else // !__WXMSW__
+#else // !__WINDOWS__
wxUnusedVar(msg);
-#endif // __WXMSW__/!__WXMSW__
+#endif // __WINDOWS__/!__WINDOWS__
// continue with the asserts by default
return false;