1
0
mirror of https://github.com/cookiengineer/audacity synced 2025-04-30 07:39:42 +02:00

Add full file replacements for the patched wxWidgets source files

This commit is contained in:
Leland Lucius 2015-07-30 17:20:25 -05:00
parent e4bb5082bc
commit 3715b21167
8 changed files with 16192 additions and 3 deletions

View File

@ -1,9 +1,16 @@
Distributed versions of Audacity are built with accessibility
enabled. This requires a patch to wxWidgets:
There's a few changes that need to be made to the wxWidgets 3.0.2 source
before you build it. You can choose to apply the patches listed below.
Or you may copy the wxWidgets-3.0.2 subdirectory in this directory to
where your wxWidgets-3.0.2 source tree is located, overlaying the existing
files.
Distributed versions of Audacity are built with accessibility enabled.
This requires a patch to wxWidgets:
accessibility.diff
Patches that need to be applied to wxWidgets 3.0.2. These should not
Other patches that need to be applied to wxWidgets 3.0.2. These should not
be required for later versions:
changeset_0797a6f8754db982b87a1df63975ccf76df2905f.diff

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,94 @@
/////////////////////////////////////////////////////////////////////////////
// Name: wx/msw/init.h
// Purpose: Windows-specific wxEntry() overload
// Author: Julian Smart
// Modified by:
// Created: 01/02/97
// Copyright: (c) Julian Smart
// Licence: wxWindows licence
/////////////////////////////////////////////////////////////////////////////
#ifndef _WX_MSW_INIT_H_
#define _WX_MSW_INIT_H_
// ----------------------------------------------------------------------------
// Windows-specific wxEntry() overload and wxIMPLEMENT_WXWIN_MAIN definition
// ----------------------------------------------------------------------------
// we need HINSTANCE declaration to define WinMain()
#include "wx/msw/wrapwin.h"
#ifndef SW_SHOWNORMAL
#define SW_SHOWNORMAL 1
#endif
// WinMain() is always ANSI, even in Unicode build, under normal Windows
// but is always Unicode under CE
#ifdef __WXWINCE__
typedef wchar_t *wxCmdLineArgType;
#else
typedef char *wxCmdLineArgType;
#endif
// Call this function to prevent wxMSW from calling SetProcessDPIAware().
// Must be called before wxEntry().
extern WXDLLIMPEXP_CORE void wxMSWDisableSettingHighDPIAware();
// Windows-only overloads of wxEntry() and wxEntryStart() which take the
// parameters passed to WinMain() instead of those passed to main()
extern WXDLLIMPEXP_CORE bool
wxEntryStart(HINSTANCE hInstance,
HINSTANCE hPrevInstance = NULL,
wxCmdLineArgType pCmdLine = NULL,
int nCmdShow = SW_SHOWNORMAL);
extern WXDLLIMPEXP_CORE int
wxEntry(HINSTANCE hInstance,
HINSTANCE hPrevInstance = NULL,
wxCmdLineArgType pCmdLine = NULL,
int nCmdShow = SW_SHOWNORMAL);
#if defined(__BORLANDC__) && wxUSE_UNICODE
// Borland C++ has the following nonstandard behaviour: when the -WU
// command line flag is used, the linker expects to find wWinMain instead
// of WinMain. This flag causes the compiler to define _UNICODE and
// UNICODE symbols and there's no way to detect its use, so we have to
// define both WinMain and wWinMain so that wxIMPLEMENT_WXWIN_MAIN works
// for both code compiled with and without -WU.
// See http://sourceforge.net/tracker/?func=detail&atid=309863&aid=1935997&group_id=9863
// for more details.
#define wxIMPLEMENT_WXWIN_MAIN_BORLAND_NONSTANDARD \
extern "C" int WINAPI wWinMain(HINSTANCE hInstance, \
HINSTANCE hPrevInstance, \
wchar_t * WXUNUSED(lpCmdLine), \
int nCmdShow) \
{ \
wxDISABLE_DEBUG_SUPPORT(); \
\
/* NB: wxEntry expects lpCmdLine argument to be char*, not */ \
/* wchar_t*, but fortunately it's not used anywhere */ \
/* and we can simply pass NULL in: */ \
return wxEntry(hInstance, hPrevInstance, NULL, nCmdShow); \
}
#else
#define wxIMPLEMENT_WXWIN_MAIN_BORLAND_NONSTANDARD
#endif // defined(__BORLANDC__) && wxUSE_UNICODE
#define wxIMPLEMENT_WXWIN_MAIN \
extern "C" int WINAPI WinMain(HINSTANCE hInstance, \
HINSTANCE hPrevInstance, \
wxCmdLineArgType WXUNUSED(lpCmdLine), \
int nCmdShow) \
{ \
wxDISABLE_DEBUG_SUPPORT(); \
\
/* NB: We pass NULL in place of lpCmdLine to behave the same as */ \
/* Borland-specific wWinMain() above. If it becomes needed */ \
/* to pass lpCmdLine to wxEntry() here, you'll have to fix */ \
/* wWinMain() above too. */ \
return wxEntry(hInstance, hPrevInstance, NULL, nCmdShow); \
} \
wxIMPLEMENT_WXWIN_MAIN_BORLAND_NONSTANDARD
#endif // _WX_MSW_INIT_H_

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,128 @@
/////////////////////////////////////////////////////////////////////////////
// Name: init.h
// Purpose: interface of global functions
// Author: wxWidgets team
// Licence: wxWindows licence
/////////////////////////////////////////////////////////////////////////////
/**
@class wxInitializer
Create an object of this class on the stack to initialize/cleanup the library
automatically.
@library{wxbase}
@category{appmanagement}
@see wxGLContext
*/
class wxInitializer
{
public:
/**
Initializes the library.
Calls wxInitialize().
*/
wxInitializer(int argc = 0, wxChar **argv = NULL);
/**
Has the initialization been successful? (explicit test)
*/
bool IsOk() const;
/**
This dtor only does clean up if we initialized the library properly.
Calls wxUninitialize().
*/
~wxInitializer();
};
/** @addtogroup group_funcmacro_appinitterm */
//@{
/**
This function can be used to perform the initialization of wxWidgets if you
can't use the default initialization code for any reason.
If the function returns true, the initialization was successful and the
global wxApp object ::wxTheApp has been created. Moreover, wxEntryCleanup()
must be called afterwards. If the function returns false, a catastrophic
initialization error occurred and (at least the GUI part of) the library
can't be used at all.
Notice that parameters @c argc and @c argv may be modified by this
function.
@header{wx/init.h}
*/
bool wxEntryStart(int& argc, wxChar** argv);
/**
See wxEntryStart(int&,wxChar**) for more info about this function.
This is an additional overload of wxEntryStart() provided under MSW only.
It is meant to be called with the parameters passed to WinMain().
@note Under Windows CE platform, and only there, the type of @a pCmdLine is
@c wchar_t *, otherwise it is @c char *, even in Unicode build.
@onlyfor{wxmsw}
@header{wx/init.h}
*/
bool wxEntryStart(HINSTANCE hInstance,
HINSTANCE hPrevInstance = NULL,
char* pCmdLine = NULL,
int nCmdShow = SW_SHOWNORMAL);
/**
Free resources allocated by a successful call to wxEntryStart().
@header{wx/init.h}
*/
void wxEntryCleanup();
/**
Initialize the library (may be called as many times as needed, but each
call to wxInitialize() must be matched by wxUninitialize()).
With this function you may avoid wxDECLARE_APP() and wxIMPLEMENT_APP() macros
and use wxInitialize() and wxUninitialize() dynamically in the
program startup and termination.
@header{wx/init.h}
*/
bool wxInitialize(int argc = 0, wxChar **argv = NULL);
/**
Clean up; the library can't be used any more after the last call to
wxUninitialize().
See wxInitialize() for more info.
@header{wx/init.h}
*/
void wxUninitialize();
/**
Prevents wxWidgets from setting HighDPI awareness mode.
wxEntry calls SetDPIProcessAware() early during initialization on Windows.
To prevent this (e.g. because wx is embedded in native code and disabling
DPI awareness in the manifest is not an option), call this function
*before* wxEntry() is called.
@onlyfor{wxmsw}
@header{wx/init.h}
@since 3.0.3, but only available in 3.0.x, not 3.1+ which doesn't make
the SetDPIProcessAware() call anymore.
*/
void wxMSWDisableSettingHighDPIAware();
//@}

View File

@ -0,0 +1,455 @@
/////////////////////////////////////////////////////////////////////////////
// Name: src/msw/main.cpp
// Purpose: WinMain/DllMain
// Author: Julian Smart
// Modified by:
// Created: 04/01/98
// Copyright: (c) Julian Smart
// Licence: wxWindows licence
/////////////////////////////////////////////////////////////////////////////
// ============================================================================
// declarations
// ============================================================================
// ----------------------------------------------------------------------------
// headers
// ----------------------------------------------------------------------------
// For compilers that support precompilation, includes "wx.h".
#include "wx/wxprec.h"
#ifdef __BORLANDC__
#pragma hdrstop
#endif
#ifndef WX_PRECOMP
#include "wx/event.h"
#include "wx/app.h"
#include "wx/utils.h"
#endif //WX_PRECOMP
#include "wx/cmdline.h"
#include "wx/dynlib.h"
#include "wx/scopeguard.h"
#include "wx/msw/private.h"
#include "wx/msw/seh.h"
#if wxUSE_ON_FATAL_EXCEPTION
#include "wx/datetime.h"
#include "wx/msw/crashrpt.h"
#endif // wxUSE_ON_FATAL_EXCEPTION
#ifdef __WXWINCE__
// there is no ExitProcess() under CE but exiting the main thread has the
// same effect
#ifndef ExitProcess
#define ExitProcess ExitThread
#endif
#endif // __WXWINCE__
#ifdef __BORLANDC__
// BC++ has to be special: its run-time expects the DLL entry point to be
// named DllEntryPoint instead of the (more) standard DllMain
#define DllMain DllEntryPoint
#endif // __BORLANDC__
#if defined(__WXMICROWIN__)
#define HINSTANCE HANDLE
#endif
// defined in common/init.cpp
extern int wxEntryReal(int& argc, wxChar **argv);
extern int wxEntryCleanupReal(int& argc, wxChar **argv);
// ============================================================================
// implementation: various entry points
// ============================================================================
#if wxUSE_BASE
// ----------------------------------------------------------------------------
// wrapper wxEntry catching all Win32 exceptions occurring in a wx program
// ----------------------------------------------------------------------------
// wrap real wxEntry in a try-except block to be able to call
// OnFatalException() if necessary
#if wxUSE_ON_FATAL_EXCEPTION
// global pointer to exception information, only valid inside OnFatalException,
// used by wxStackWalker and wxCrashReport
extern EXCEPTION_POINTERS *wxGlobalSEInformation = NULL;
// flag telling us whether the application wants to handle exceptions at all
static bool gs_handleExceptions = false;
static void wxFatalExit()
{
// use the same exit code as abort()
::ExitProcess(3);
}
unsigned long wxGlobalSEHandler(EXCEPTION_POINTERS *pExcPtrs)
{
if ( gs_handleExceptions && wxTheApp )
{
// store the pointer to exception info
wxGlobalSEInformation = pExcPtrs;
// give the user a chance to do something special about this
wxSEH_TRY
{
wxTheApp->OnFatalException();
}
wxSEH_IGNORE // ignore any exceptions inside the exception handler
wxGlobalSEInformation = NULL;
// this will execute our handler and terminate the process
return EXCEPTION_EXECUTE_HANDLER;
}
return EXCEPTION_CONTINUE_SEARCH;
}
#ifdef __VISUALC__
void wxSETranslator(unsigned int WXUNUSED(code), EXCEPTION_POINTERS *ep)
{
switch ( wxGlobalSEHandler(ep) )
{
default:
wxFAIL_MSG( wxT("unexpected wxGlobalSEHandler() return value") );
// fall through
case EXCEPTION_EXECUTE_HANDLER:
// if wxApp::OnFatalException() had been called we should exit the
// application -- but we shouldn't kill our host when we're a DLL
#ifndef WXMAKINGDLL
wxFatalExit();
#endif // not a DLL
break;
case EXCEPTION_CONTINUE_SEARCH:
// we're called for each "catch ( ... )" and if we (re)throw from
// here, the catch handler body is not executed, so the effect is
// as if had inhibited translation of SE to C++ ones because the
// handler will never see any structured exceptions
throw;
}
}
#endif // __VISUALC__
bool wxHandleFatalExceptions(bool doit)
{
// assume this can only be called from the main thread
gs_handleExceptions = doit;
#if wxUSE_CRASHREPORT
if ( doit )
{
// try to find a place where we can put out report file later
wxChar fullname[MAX_PATH];
if ( !::GetTempPath(WXSIZEOF(fullname), fullname) )
{
wxLogLastError(wxT("GetTempPath"));
// when all else fails...
wxStrcpy(fullname, wxT("c:\\"));
}
// use PID and date to make the report file name more unique
wxString name = wxString::Format
(
wxT("%s_%s_%lu.dmp"),
wxTheApp ? (const wxChar*)wxTheApp->GetAppDisplayName().c_str()
: wxT("wxwindows"),
wxDateTime::Now().Format(wxT("%Y%m%dT%H%M%S")).c_str(),
::GetCurrentProcessId()
);
wxStrncat(fullname, name, WXSIZEOF(fullname) - wxStrlen(fullname) - 1);
wxCrashReport::SetFileName(fullname);
}
#endif // wxUSE_CRASHREPORT
return true;
}
int wxEntry(int& argc, wxChar **argv)
{
DisableAutomaticSETranslator();
wxSEH_TRY
{
return wxEntryReal(argc, argv);
}
wxSEH_HANDLE(-1)
}
#else // !wxUSE_ON_FATAL_EXCEPTION
int wxEntry(int& argc, wxChar **argv)
{
return wxEntryReal(argc, argv);
}
#endif // wxUSE_ON_FATAL_EXCEPTION/!wxUSE_ON_FATAL_EXCEPTION
#endif // wxUSE_BASE
#if wxUSE_GUI
namespace
{
#if wxUSE_UNICODE && !defined(__WXWINCE__)
#define NEED_UNICODE_CHECK
#endif
#ifdef NEED_UNICODE_CHECK
// check whether Unicode is available
bool wxIsUnicodeAvailable()
{
static const wchar_t *ERROR_STRING = L"wxWidgets Fatal Error";
if ( wxGetOsVersion() != wxOS_WINDOWS_NT )
{
// we need to be built with MSLU support
#if !wxUSE_UNICODE_MSLU
// note that we can use MessageBoxW() as it's implemented even under
// Win9x - OTOH, we can't use wxGetTranslation() because the file APIs
// used by wxLocale are not
::MessageBox
(
NULL,
L"This program uses Unicode and requires Windows NT/2000/XP.\n"
L"\n"
L"Program aborted.",
ERROR_STRING,
MB_ICONERROR | MB_OK
);
return false;
#else // wxUSE_UNICODE_MSLU
// and the MSLU DLL must also be available
HMODULE hmod = ::LoadLibraryA("unicows.dll");
if ( !hmod )
{
::MessageBox
(
NULL,
L"This program uses Unicode and requires unicows.dll to work "
L"under current operating system.\n"
L"\n"
L"Please install unicows.dll and relaunch the program.",
ERROR_STRING,
MB_ICONERROR | MB_OK
);
return false;
}
// this is not really necessary but be tidy
::FreeLibrary(hmod);
// finally do the last check: has unicows.lib initialized correctly?
hmod = ::LoadLibraryW(L"unicows.dll");
if ( !hmod )
{
::MessageBox
(
NULL,
L"This program uses Unicode but is not using unicows.dll\n"
L"correctly and so cannot work under current operating system.\n"
L"Please contact the program author for an updated version.\n"
L"\n"
L"Program aborted.",
ERROR_STRING,
MB_ICONERROR | MB_OK
);
return false;
}
::FreeLibrary(hmod);
#endif // !wxUSE_UNICODE_MSLU
}
return true;
}
#endif // NEED_UNICODE_CHECK
void wxSetProcessDPIAware()
{
#if wxUSE_DYNLIB_CLASS
typedef BOOL (WINAPI *SetProcessDPIAware_t)(void);
wxDynamicLibrary dllUser32(wxT("user32.dll"));
SetProcessDPIAware_t pfnSetProcessDPIAware =
(SetProcessDPIAware_t)dllUser32.RawGetSymbol(wxT("SetProcessDPIAware"));
if ( pfnSetProcessDPIAware )
pfnSetProcessDPIAware();
#endif // wxUSE_DYNLIB_CLASS
}
// It is sometimes undesirable to force DPI awareness on appplications, e.g.
// when they are artwork heavy and don't have appropriately scaled bitmaps, or
// when they are using non-wx, DPI-unaware code. Allow disabling
// SetProcessDPIAware() call.
//
// Further discussion:
// http://trac.wxwidgets.org/ticket/16116
// https://groups.google.com/d/topic/wx-dev/Z0VpgzCY34U/discussion
bool gs_allowChangingDPIAwareness = true;
} //anonymous namespace
void wxMSWDisableSettingHighDPIAware()
{
gs_allowChangingDPIAwareness = false;
}
// ----------------------------------------------------------------------------
// Windows-specific wxEntry
// ----------------------------------------------------------------------------
struct wxMSWCommandLineArguments
{
wxMSWCommandLineArguments() { argc = 0; argv = NULL; }
void Init(const wxArrayString& args)
{
argc = args.size();
// +1 here for the terminating NULL
argv = new wxChar *[argc + 1];
for ( int i = 0; i < argc; i++ )
{
argv[i] = wxStrdup(args[i].t_str());
}
// argv[] must be NULL-terminated
argv[argc] = NULL;
}
void Free()
{
if ( !argc )
return;
for ( int i = 0; i < argc; i++ )
{
free(argv[i]);
}
wxDELETEA(argv);
argc = 0;
}
int argc;
wxChar **argv;
};
static wxMSWCommandLineArguments wxArgs;
// common part of wxMSW-specific wxEntryStart() and wxEntry() overloads
static bool
wxMSWEntryCommon(HINSTANCE hInstance, int nCmdShow)
{
// 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
// as it has no chance to work and has all chances to crash
#ifdef NEED_UNICODE_CHECK
if ( !wxIsUnicodeAvailable() )
return false;
#endif // NEED_UNICODE_CHECK
// remember the parameters Windows gave us
wxSetInstance(hInstance);
#ifdef __WXMSW__
wxApp::m_nCmdShow = nCmdShow;
#endif
// parse the command line: we can't use pCmdLine in Unicode build so it is
// simpler to never use it at all (this also results in a more correct
// argv[0])
// break the command line in words
wxArrayString args;
const wxChar *cmdLine = ::GetCommandLine();
if ( cmdLine )
{
args = wxCmdLineParser::ConvertStringToArgs(cmdLine);
}
#ifdef __WXWINCE__
// WinCE doesn't insert the program itself, so do it ourselves.
args.Insert(wxGetFullModuleName(), 0);
#endif
wxArgs.Init(args);
return true;
}
WXDLLEXPORT bool wxEntryStart(HINSTANCE hInstance,
HINSTANCE WXUNUSED(hPrevInstance),
wxCmdLineArgType WXUNUSED(pCmdLine),
int nCmdShow)
{
if ( !wxMSWEntryCommon(hInstance, nCmdShow) )
return false;
return wxEntryStart(wxArgs.argc, wxArgs.argv);
}
WXDLLEXPORT int wxEntry(HINSTANCE hInstance,
HINSTANCE WXUNUSED(hPrevInstance),
wxCmdLineArgType WXUNUSED(pCmdLine),
int nCmdShow)
{
// wxWidgets library doesn't have problems with non-default DPI settings,
// so we can mark the app as "DPI aware" for Vista/Win7 (see
// http://msdn.microsoft.com/en-us/library/dd464659%28VS.85%29.aspx).
// Note that we intentionally do it here and not in wxApp, so that it
// doesn't happen if wx code is hosted in another app (e.g. a plugin).
// It can be disabled by calling wxMSWAllowChangingDPIAwareness().
if ( gs_allowChangingDPIAwareness )
wxSetProcessDPIAware();
if ( !wxMSWEntryCommon(hInstance, nCmdShow) )
return -1;
wxON_BLOCK_EXIT_OBJ0(wxArgs, wxMSWCommandLineArguments::Free);
return wxEntry(wxArgs.argc, wxArgs.argv);
}
#endif // wxUSE_GUI
// ----------------------------------------------------------------------------
// global HINSTANCE
// ----------------------------------------------------------------------------
#if wxUSE_BASE
HINSTANCE wxhInstance = 0;
extern "C" HINSTANCE wxGetInstance()
{
return wxhInstance;
}
void wxSetInstance(HINSTANCE hInst)
{
wxhInstance = hInst;
}
#endif // wxUSE_BASE

File diff suppressed because it is too large Load Diff