[SCM] audacity/master: Backport upstream preliminary changes for wxWidgets 3.0.1
bdrung at users.alioth.debian.org
bdrung at users.alioth.debian.org
Wed Oct 8 22:59:40 UTC 2014
The following commit has been merged in the master branch:
commit d5cfb3149fe7eb9c5578d69d8423b6f121276fcb
Author: Benjamin Drung <bdrung at debian.org>
Date: Thu Oct 9 00:52:01 2014 +0200
Backport upstream preliminary changes for wxWidgets 3.0.1
diff --git a/debian/patches/backport-wx30-r13403.patch b/debian/patches/backport-wx30-r13403.patch
new file mode 100644
index 0000000..9b4c98b
--- /dev/null
+++ b/debian/patches/backport-wx30-r13403.patch
@@ -0,0 +1,1419 @@
+Description: Preliminary changes for wxWidgets 3.0.1
+ We can't go to 3.0.1 yet as there are still build issues on
+ Linux and OSX. You can get Windows to build, but there's
+ still some display issues.
+ .
+ These changes should work with wxWidgets 2.8.12 as well, so
+ we can take our time to get things working properly before
+ switching over.
+Origin: backport, https://code.google.com/p/audacity/source/detail?r=13403
+
+--- a/configure.ac
++++ b/configure.ac
+@@ -292,7 +292,7 @@
+ AC_MSG_NOTICE([Checking that the chosen version of wxWidgets is 2.8.x])
+
+ case "${wx_version}" in
+- 2.8.*)
++ 2.8.* | 3.0.*)
+ echo "Great, you're using wxWidgets ${wx_version}!"
+ ;;
+ *)
+--- a/lib-src/FileDialog/FileDialog.cpp
++++ b/lib-src/FileDialog/FileDialog.cpp
+@@ -49,16 +49,16 @@
+ // FileDialog convenience functions
+ //----------------------------------------------------------------------------
+
+-wxString FileSelector(const wxChar *title,
+- const wxChar *defaultDir,
+- const wxChar *defaultFileName,
+- const wxChar *defaultExtension,
+- const wxChar *filter,
++wxString FileSelector(const wxString & title,
++ const wxString & defaultDir,
++ const wxString & defaultFileName,
++ const wxString & defaultExtension,
++ const wxString & filter,
+ int flags,
+ wxWindow *parent,
+ wxString label, fdCallback cb, void *cbdata)
+ {
+- // The defaultExtension, if non-NULL, is
++ // The defaultExtension, if non-empty, is
+ // appended to the filename if the user fails to type an extension. The new
+ // implementation (taken from wxFileSelectorEx) appends the extension
+ // automatically, by looking at the filter specification. In fact this
+@@ -70,21 +70,13 @@
+ // suitable filter.
+
+ wxString filter2;
+- if (defaultExtension && !filter)
++ if (!defaultExtension.empty() && filter.empty())
+ filter2 = wxString(wxT("*.")) + defaultExtension;
+- else if (filter)
++ else if (!filter.empty())
+ filter2 = filter;
+
+- wxString defaultDirString;
+- if (defaultDir)
+- defaultDirString = defaultDir;
+-
+- wxString defaultFilenameString;
+- if (defaultFileName)
+- defaultFilenameString = defaultFileName;
+-
+- FileDialog fileDialog(parent, title, defaultDirString,
+- defaultFilenameString, filter2,
++ FileDialog fileDialog(parent, title, defaultDir,
++ defaultFileName, filter2,
+ flags);
+
+ // Enable the extra button if desired
+@@ -94,7 +86,7 @@
+ }
+
+ // if filter is of form "All files (*)|*|..." set correct filter index
+- if ((wxStrlen(defaultExtension) != 0) && (filter2.Find(wxT('|')) != wxNOT_FOUND))
++ if (!defaultExtension.empty() && filter2.find(wxT('|')) != wxString::npos)
+ {
+ int filterIndex = 0;
+
+--- a/lib-src/FileDialog/FileDialog.h
++++ b/lib-src/FileDialog/FileDialog.h
+@@ -43,11 +43,11 @@
+ //----------------------------------------------------------------------------
+
+ wxString
+-FileSelector(const wxChar *message = wxFileSelectorPromptStr,
+- const wxChar *default_path = NULL,
+- const wxChar *default_filename = NULL,
+- const wxChar *default_extension = NULL,
+- const wxChar *wildcard = wxFileSelectorDefaultWildcardStr,
++FileSelector(const wxString & message = wxFileSelectorPromptStr,
++ const wxString & default_path = wxEmptyString,
++ const wxString & default_filename = wxEmptyString,
++ const wxString & default_extension = wxEmptyString,
++ const wxString & wildcard = wxFileSelectorDefaultWildcardStr,
+ int flags = 0,
+ wxWindow *parent = NULL,
+ wxString label = wxEmptyString,
+--- a/lib-src/FileDialog/win/FileDialogPrivate.cpp
++++ b/lib-src/FileDialog/win/FileDialogPrivate.cpp
+@@ -209,7 +209,7 @@
+ {
+ CommDlg_OpenSave_SetControlText( hwndDialog,
+ pshHelp,
+- (LPTSTR)me->m_buttonlabel.c_str());
++ (LPCTSTR)me->m_buttonlabel.c_str());
+ }
+ }
+ else if (CDN_HELP == (pNotifyCode->hdr).code)
+@@ -515,7 +515,7 @@
+ void FileDialog::SetPath(const wxString& path)
+ {
+ wxString ext;
+- wxSplitPath(path, &m_dir, &m_fileName, &ext);
++ wxFileName::SplitPath(path, &m_dir, &m_fileName, &ext);
+ if ( !ext.empty() )
+ m_fileName << wxT('.') << ext;
+ }
+@@ -717,7 +717,7 @@
+ }
+ }
+
+- of.lpstrFilter = (LPTSTR)filterBuffer.c_str();
++ of.lpstrFilter = (LPCTSTR)filterBuffer.c_str();
+ of.nFilterIndex = m_filterIndex + 1;
+
+ ParseFilter(of.nFilterIndex);
+--- a/lib-src/lib-widget-extra/configure.ac
++++ b/lib-src/lib-widget-extra/configure.ac
+@@ -131,7 +131,7 @@
+ AC_MSG_NOTICE([Checking that the chosen version of wxWidgets is 2.8.x])
+
+ case "${wx_version}" in
+- 2.8.*)
++ 2.8.* | 3.0.*)
+ echo "Great, you're using wxWidgets ${wx_version}!"
+ ;;
+ *)
+--- a/src/AudacityApp.cpp
++++ b/src/AudacityApp.cpp
+@@ -606,7 +606,7 @@
+ if (!cmd.IsEmpty()) {
+ wxCommandEvent e(EVT_OPEN_AUDIO_FILE);
+ e.SetString(data);
+- project->AddPendingEvent(e);
++ project->GetEventHandler()->AddPendingEvent(e);
+ }
+
+ return true;
+@@ -1295,7 +1295,11 @@
+ }
+
+ if (option < argc - 1 &&
+- argv[option + 1] &&
++#if wxCHECK_VERSION(3,0,0)
++ !argv[option + 1].IsEmpty() &&
++#else
++ argv[option + 1] &&
++#endif
+ !wxString(wxT("-blocksize")).CmpNoCase(argv[option])) {
+ long theBlockSize;
+ if (wxString(argv[option + 1]).ToLong(&theBlockSize)) {
+--- a/src/AudacityLogger.cpp
++++ b/src/AudacityLogger.cpp
+@@ -286,7 +286,7 @@
+ wxString fName = _("log.txt");
+
+ fName = FileSelector(_("Save log to:"),
+- NULL,
++ wxEmptyString,
+ fName,
+ wxT("txt"),
+ wxT("*.txt"),
+--- a/src/Benchmark.cpp
++++ b/src/Benchmark.cpp
+@@ -245,7 +245,7 @@
+ wxString fName = wxT("benchmark.txt");
+
+ fName = FileSelector(wxT("Export Benchmark Data As:"),
+- NULL, fName, wxT("txt"), wxT("*.txt"), wxFD_SAVE | wxRESIZE_BORDER, this);
++ wxEmptyString, fName, wxT("txt"), wxT("*.txt"), wxFD_SAVE | wxRESIZE_BORDER, this);
+
+ if (fName == wxT(""))
+ return;
+--- a/src/FileIO.cpp
++++ b/src/FileIO.cpp
+@@ -76,6 +76,7 @@
+ void FileIO::SetCatalogInfo()
+ {
+ #ifdef __WXMAC__
++#if !wxCHECK_VERSION(3, 0, 0)
+ if (!mOpen ) {
+ return;
+ }
+@@ -91,6 +92,7 @@
+
+ SetCatalogInfo(type);
+ #endif
++#endif
+
+ return;
+ }
+@@ -98,6 +100,7 @@
+ void FileIO::SetCatalogInfo(wxUint32 type)
+ {
+ #ifdef __WXMAC__
++#if !wxCHECK_VERSION(3, 0, 0)
+ if (!mOpen ) {
+ return;
+ }
+@@ -106,6 +109,7 @@
+
+ fn.MacSetTypeAndCreator(type, AUDACITY_CREATOR);
+ #endif
++#endif
+
+ return;
+ }
+--- a/src/FreqWindow.cpp
++++ b/src/FreqWindow.cpp
+@@ -43,10 +43,10 @@
+ #pragma hdrstop
+ #endif
+
+-#ifndef WX_PRECOMP
+ #include <wx/brush.h>
+ #include <wx/button.h>
+ #include <wx/choice.h>
++#include <wx/font.h>
+ #include <wx/image.h>
+ #include <wx/dcmemory.h>
+ #include <wx/msgdlg.h>
+@@ -56,7 +56,6 @@
+ #include <wx/sizer.h>
+ #include <wx/stattext.h>
+ #include <wx/statusbr.h>
+-#endif
+
+ #include <wx/textfile.h>
+
+@@ -124,7 +123,7 @@
+ if (!p)
+ return;
+
+- mFreqFont = wxFont(fontSize, wxSWISS, wxNORMAL, wxNORMAL);
++ mFreqFont = wxFont(fontSize, wxFONTFAMILY_SWISS, wxFONTSTYLE_NORMAL, wxFONTWEIGHT_NORMAL);
+ mArrowCursor = new wxCursor(wxCURSOR_ARROW);
+ mCrossCursor = new wxCursor(wxCURSOR_CROSS);
+
+@@ -1223,7 +1222,7 @@
+ wxString fName = _("spectrum.txt");
+
+ fName = FileSelector(_("Export Spectral Data As:"),
+- NULL, fName, wxT("txt"), wxT("*.txt"), wxFD_SAVE | wxRESIZE_BORDER, this);
++ wxEmptyString, fName, wxT("txt"), wxT("*.txt"), wxFD_SAVE | wxRESIZE_BORDER, this);
+
+ if (fName == wxT(""))
+ return;
+--- a/src/Internat.cpp
++++ b/src/Internat.cpp
+@@ -188,7 +188,7 @@
+ wxMessageBox(_("The specified filename could not be converted due to Unicode character use."));
+
+ name = FileSelector(_("Specify New Filename:"),
+- NULL,
++ wxEmptyString,
+ name,
+ f.GetExt(),
+ wxT("*.") + f.GetExt(),
+--- a/src/LabelDialog.cpp
++++ b/src/LabelDialog.cpp
+@@ -565,7 +565,7 @@
+ wxString fName = mTrackNames[mTrackNames.GetCount() - 1].AfterFirst(wxT('-')).Mid(1);
+
+ fName = FileSelector(_("Export Labels As:"),
+- NULL,
++ wxEmptyString,
+ fName.c_str(),
+ wxT("txt"),
+ wxT("*.txt"),
+--- a/src/Lyrics.cpp
++++ b/src/Lyrics.cpp
+@@ -230,12 +230,12 @@
+
+ void Lyrics::SetDrawnFont(wxDC *dc)
+ {
+- dc->SetFont(wxFont(mKaraokeFontSize, wxSWISS, wxNORMAL, wxNORMAL));
++ dc->SetFont(wxFont(mKaraokeFontSize, wxFONTFAMILY_SWISS, wxFONTSTYLE_NORMAL, wxFONTWEIGHT_NORMAL));
+ }
+
+ void Lyrics::SetHighlightFont() // for kHighlightLyrics
+ {
+- wxFont newFont(mKaraokeFontSize, wxSWISS, wxNORMAL, wxNORMAL);
++ wxFont newFont(mKaraokeFontSize, wxFONTFAMILY_SWISS, wxFONTSTYLE_NORMAL, wxFONTWEIGHT_NORMAL);
+ mHighlightTextCtrl->SetDefaultStyle(wxTextAttr(wxNullColour, wxNullColour, newFont));
+ mHighlightTextCtrl->SetStyle(0, mHighlightTextCtrl->GetLastPosition(),
+ wxTextAttr(wxNullColour, wxNullColour, newFont));
+--- a/src/Menus.cpp
++++ b/src/Menus.cpp
+@@ -2422,7 +2422,7 @@
+ // The workaround is to queue a context menu event, allowing the key press
+ // event to complete.
+ wxContextMenuEvent e(wxEVT_CONTEXT_MENU, GetId());
+- mTrackPanel->AddPendingEvent(e);
++ mTrackPanel->GetEventHandler()->AddPendingEvent(e);
+ }
+
+ void AudacityProject::OnTrackMute()
+@@ -2898,7 +2898,7 @@
+ }
+
+ fName = FileSelector(_("Export Labels As:"),
+- NULL,
++ wxEmptyString,
+ fName,
+ wxT("txt"),
+ wxT("*.txt"),
+@@ -2979,7 +2979,7 @@
+ wxString fName = wxT("");
+
+ fName = FileSelector(_("Export MIDI As:"),
+- NULL,
++ wxEmptyString,
+ fName,
+ wxT(".mid|.gro"),
+ _("MIDI file (*.mid)|*.mid|Allegro file (*.gro)|*.gro"),
+--- a/src/MixerBoard.cpp
++++ b/src/MixerBoard.cpp
+@@ -331,8 +331,14 @@
+ #endif // wxUSE_TOOLTIPS
+
+ #ifdef __WXMAC__
++#if wxCHECK_VERSION(3, 0, 0)
++ wxSizeEvent event(GetSize(), GetId());
++ event.SetEventObject(this);
++ GetEventHandler()->ProcessEvent(event);
++#else
+ wxSizeEvent dummyEvent;
+ this->OnSize(dummyEvent);
++#endif
+ UpdateGain();
+ #endif
+ }
+--- a/src/PitchName.h
++++ b/src/PitchName.h
+@@ -18,7 +18,7 @@
+ #ifndef __AUDACITY_PITCHNAME__
+ #define __AUDACITY_PITCHNAME__
+
+-#include <wx/defs.h>
++#include <wx/wx.h>
+
+ // FreqToMIDInote takes a frequency in Hz (exponential scale relative to
+ // alphabetic pitch names) and returns a pitch ID number (linear
+--- a/src/PlatformCompatibility.cpp
++++ b/src/PlatformCompatibility.cpp
+@@ -37,9 +37,7 @@
+ static wxString path;
+
+ if (!found) {
+- wxStandardPaths std;
+-
+- path = std.GetExecutablePath();
++ path = wxStandardPaths::Get().GetExecutablePath();
+
+ found = true;
+ }
+--- a/src/Project.cpp
++++ b/src/Project.cpp
+@@ -85,9 +85,11 @@
+ #include <wx/arrimpl.cpp> // this allows for creation of wxObjArray
+
+ #if defined(__WXMAC__)
++#if !wxCHECK_VERSION(3, 0, 0)
+ #include <CoreServices/CoreServices.h>
+ #include <wx/mac/private.h>
+ #endif
++#endif
+
+ #include "Project.h"
+
+@@ -278,10 +280,12 @@
+ }
+
+ #if defined(__WXMAC__)
++#if !wxCHECK_VERSION(3, 0, 0)
+ if (format.GetFormatId() == kDragPromisedFlavorFindFile) {
+ return true;
+ }
+ #endif
++#endif
+
+ return false;
+ }
+@@ -305,6 +309,7 @@
+ bool GetData()
+ {
+ bool foundSupported = false;
++#if !wxCHECK_VERSION(3, 0, 0)
+ bool firstFileAdded = false;
+ OSErr result;
+
+@@ -356,13 +361,14 @@
+ break;
+ }
+ }
+-
++#endif
+ return foundSupported;
+ }
+
+ bool OnDrop(wxCoord x, wxCoord y)
+ {
+ bool foundSupported = false;
++#if !wxCHECK_VERSION(3, 0, 0)
+ bool firstFileAdded = false;
+ OSErr result;
+
+@@ -387,7 +393,7 @@
+ return true;
+ }
+ }
+-
++#endif
+ return CurrentDragHasSupportedFormat();
+ }
+
+@@ -1717,7 +1723,7 @@
+ wxCommandEvent e(EVT_CAPTURE_KEY);
+ e.SetEventObject(&event);
+
+- if (w->ProcessEvent(e)) {
++ if (w->GetEventHandler()->ProcessEvent(e)) {
+ return false;
+ }
+ }
+@@ -3261,9 +3267,11 @@
+ }
+
+ #ifdef __WXMAC__
++#if !wxCHECK_VERSION(3, 0, 0)
+ wxFileName fn(mFileName);
+ fn.MacSetTypeAndCreator(AUDACITY_PROJECT_TYPE, AUDACITY_CREATOR);
+ #endif
++#endif
+
+ if (bWantSaveCompressed)
+ mWantSaveCompressed = false; // Don't want this mode for AudacityProject::WriteXML() any more.
+--- a/src/Sequence.cpp
++++ b/src/Sequence.cpp
+@@ -1047,8 +1047,8 @@
+ _("Sequence has block file with length %s > mMaxSamples %s.\nTruncating to mMaxSamples."),
+ Internat::ToString(((wxLongLong)(bb->f->GetLength())).ToDouble(), 0).c_str(),
+ Internat::ToString(((wxLongLong)mMaxSamples).ToDouble(), 0).c_str());
+- ::wxMessageBox(sMsg, _("Warning - Length in Writing Sequence"), wxICON_EXCLAMATION | wxOK);
+- ::wxLogWarning(sMsg);
++ wxMessageBox(sMsg, _("Warning - Length in Writing Sequence"), wxICON_EXCLAMATION | wxOK);
++ wxLogWarning(sMsg);
+ bb->f->SetLength(mMaxSamples);
+ }
+
+--- a/src/Tags.cpp
++++ b/src/Tags.cpp
+@@ -474,7 +474,7 @@
+
+ while (*attrs) {
+ wxString attr = *attrs++;
+- if (!*attr)
++ if (attr.IsEmpty())
+ break;
+ wxString value = *attrs++;
+
+--- a/src/TrackPanel.cpp
++++ b/src/TrackPanel.cpp
+@@ -5124,7 +5124,7 @@
+ // The activate event is used to make the
+ // parent window 'come alive' if it didn't have focus.
+ wxActivateEvent e;
+- GetParent()->ProcessEvent(e);
++ GetParent()->GetEventHandler()->ProcessEvent(e);
+
+ // wxTimers seem to be a little unreliable, so this
+ // "primes" it to make sure it keeps going for a while...
+@@ -5562,7 +5562,7 @@
+ int trackKind = pTrack->GetKind();
+ currentTool = selectTool; // the default.
+
+- if( event.ButtonIsDown(3) || event.RightUp()){
++ if (event.ButtonIsDown(wxMOUSE_BTN_RIGHT) || event.RightUp()){
+ currentTool = zoomTool;
+ } else if( trackKind == Track::Time ){
+ currentTool = envelopeTool;
+@@ -8382,7 +8382,7 @@
+ mSliderOffset = 0;
+
+ int fontSize = 10;
+- mFont.Create(fontSize, wxSWISS, wxNORMAL, wxNORMAL);
++ mFont.Create(fontSize, wxFONTFAMILY_SWISS, wxFONTSTYLE_NORMAL, wxFONTWEIGHT_NORMAL);
+
+ int allowableWidth = GetTrackInfoWidth() - 2; // 2 to allow for left/right borders
+ int textWidth, textHeight;
+--- a/src/TrackPanelAx.cpp
++++ b/src/TrackPanelAx.cpp
+@@ -307,20 +307,20 @@
+ {
+ /* i18n-hint: This is for screen reader software and indicates that
+ on this track mute is on.*/
+- *name->Append( _( " Mute On" ) );
++ name->Append( _( " Mute On" ) );
+ }
+
+ if( t->GetSolo() )
+ {
+ /* i18n-hint: This is for screen reader software and indicates that
+ on this track solo is on.*/
+- *name->Append( _( " Solo On" ) );
++ name->Append( _( " Solo On" ) );
+ }
+ if( t->GetSelected() )
+ {
+ /* i18n-hint: This is for screen reader software and indicates that
+ this track is selected.*/
+- *name->Append( _( " Select On" ) );
++ name->Append( _( " Select On" ) );
+ }
+ if( t->IsSyncLockSelected() )
+ {
+@@ -328,7 +328,7 @@
+ this track is shown with a sync-locked icon.*/
+ // The absence of a dash between Sync and Locked is deliberate -
+ // if present, Jaws reads it as "dash".
+- *name->Append( _( " Sync Lock Selected" ) );
++ name->Append( _( " Sync Lock Selected" ) );
+ }
+ }
+ }
+--- a/src/commands/ScriptCommandRelay.cpp
++++ b/src/commands/ScriptCommandRelay.cpp
+@@ -57,7 +57,7 @@
+ wxASSERT(cmd != NULL);
+ AppCommandEvent ev;
+ ev.SetCommand(cmd);
+- project->AddPendingEvent(ev);
++ project->GetEventHandler()->AddPendingEvent(ev);
+ }
+
+ /// This is the function which actually obeys one command. Rather than applying
+--- a/src/effects/BassTreble.cpp
++++ b/src/effects/BassTreble.cpp
+@@ -35,6 +35,7 @@
+ #include <wx/checkbox.h>
+ #include <wx/slider.h>
+ #include <wx/sizer.h>
++#include <wx/textctrl.h>
+
+ // Used to communicate the type of the filter.
+ static const int bassType = 0; //Low Shelf
+--- a/src/effects/Compressor.h
++++ b/src/effects/Compressor.h
+@@ -14,6 +14,8 @@
+ class wxString;
+
+ #include <wx/defs.h>
++#include <wx/dc.h>
++#include <wx/dcclient.h>
+ #include <wx/bitmap.h>
+ #include <wx/button.h>
+ #include <wx/checkbox.h>
+--- a/src/effects/Contrast.cpp
++++ b/src/effects/Contrast.cpp
+@@ -496,7 +496,7 @@
+ wxString fName = wxT("contrast.txt");
+
+ fName = FileSelector(_("Export Contrast Result As:"),
+- NULL, fName, wxT("txt"), wxT("*.txt"), wxFD_SAVE | wxRESIZE_BORDER, this);
++ wxEmptyString, fName, wxT("txt"), wxT("*.txt"), wxFD_SAVE | wxRESIZE_BORDER, this);
+
+ if (fName == wxT(""))
+ return;
+--- a/src/effects/VST/VSTEffect.cpp
++++ b/src/effects/VST/VSTEffect.cpp
+@@ -3579,7 +3579,7 @@
+ wxCommandEvent sw(EVT_SIZEWINDOW);
+ sw.SetInt(w);
+ sw.SetExtraLong(h);
+- mDlg->AddPendingEvent(sw);
++ mDlg->GetEventHandler()->AddPendingEvent(sw);
+ }
+
+ return;
+@@ -3590,7 +3590,7 @@
+ // Tell the dialog to refresh effect information
+ if (mDlg) {
+ wxCommandEvent ud(EVT_UPDATEDISPLAY);
+- mDlg->AddPendingEvent(ud);
++ mDlg->GetEventHandler()->AddPendingEvent(ud);
+ }
+ }
+
+--- a/src/effects/nyquist/Nyquist.cpp
++++ b/src/effects/nyquist/Nyquist.cpp
+@@ -703,7 +703,7 @@
+ // See also http://bugzilla.audacityteam.org/show_bug.cgi?id=642#c9
+ // for further info about this thread safety question.
+ wxString prevlocale = wxSetlocale(LC_NUMERIC, NULL);
+- wxSetlocale(LC_NUMERIC, wxT("C"));
++ wxSetlocale(LC_NUMERIC, wxString(wxT("C")));
+
+ nyx_init();
+ nyx_set_os_callback(StaticOSCallback, (void *)this);
+--- a/src/export/ExportPCM.cpp
++++ b/src/export/ExportPCM.cpp
+@@ -587,10 +587,12 @@
+ AddID3Chunk(fName, metadata, sf_format);
+
+ #ifdef __WXMAC__
++#if !wxCHECK_VERSION(3, 0, 0)
+ wxFileName fn(fName);
+ fn.MacSetTypeAndCreator(sf_header_mactype(sf_format & SF_FORMAT_TYPEMASK),
+ AUDACITY_CREATOR);
+ #endif
++#endif
+
+ return updateResult;
+ }
+--- a/src/import/ImportRaw.cpp
++++ b/src/import/ImportRaw.cpp
+@@ -337,7 +337,7 @@
+
+ if (sf_format_check(&info)) {
+ mEncodingSubtype[mNumEncodings] = subtype;
+- encodings.Add(LAT1CTOWX(sf_encoding_index_name(i)));
++ encodings.Add(sf_encoding_index_name(i));
+
+ if ((mEncoding & SF_FORMAT_SUBMASK) == subtype)
+ selection = mNumEncodings;
+--- a/src/ondemand/ODManager.cpp
++++ b/src/ondemand/ODManager.cpp
+@@ -311,7 +311,7 @@
+ AudacityProject::AllProjectsDeleteLock();
+ AudacityProject* proj = GetActiveProject();
+ if(proj)
+- proj->AddPendingEvent( event );
++ proj->GetEventHandler()->AddPendingEvent(event);
+ AudacityProject::AllProjectsDeleteUnlock();
+ }
+ mTerminateMutex.Lock();
+--- a/src/ondemand/ODTask.cpp
++++ b/src/ondemand/ODTask.cpp
+@@ -158,7 +158,7 @@
+ if(IsTaskAssociatedWithProject(gAudacityProjects[i]))
+ {
+ //this assumes tasks are only associated with one project.
+- gAudacityProjects[i]->AddPendingEvent( event );
++ gAudacityProjects[i]->GetEventHandler()->AddPendingEvent(event);
+ //mark the changes so that the project can be resaved.
+ gAudacityProjects[i]->GetUndoManager()->SetODChangesFlag();
+ break;
+--- a/src/prefs/KeyConfigPrefs.cpp
++++ b/src/prefs/KeyConfigPrefs.cpp
+@@ -420,7 +420,7 @@
+ nevent.SetDirection(!e.ShiftDown());
+ nevent.SetEventObject(t);
+ nevent.SetCurrentFocus(t);
+- t->GetParent()->ProcessEvent(nevent);
++ t->GetParent()->GetEventHandler()->ProcessEvent(nevent);
+ return;
+ }
+
+@@ -465,7 +465,7 @@
+ nevent.SetDirection(!e.ShiftDown());
+ nevent.SetEventObject(t);
+ nevent.SetCurrentFocus(t);
+- t->GetParent()->ProcessEvent(nevent);
++ t->GetParent()->GetEventHandler()->ProcessEvent(nevent);
+
+ return;
+ }
+--- a/src/toolbars/ControlToolBar.cpp
++++ b/src/toolbars/ControlToolBar.cpp
+@@ -607,9 +607,14 @@
+ }
+ else {
+ // msmeyer: Show error message if stream could not be opened
+- wxMessageBox(_(
+- "Error while opening sound device. "
++ wxMessageBox(
++#if wxCHECK_VERSION(3,0,0)
++ _("Error while opening sound device. "
++ "Please check the playback device settings and the project sample rate."),
++#else
++ _("Error while opening sound device. "
+ wxT("Please check the playback device settings and the project sample rate.")),
++#endif
+ _("Error"), wxOK | wxICON_EXCLAMATION, this);
+ }
+ }
+--- a/src/toolbars/DeviceToolBar.cpp
++++ b/src/toolbars/DeviceToolBar.cpp
+@@ -72,8 +72,14 @@
+ ToolBar::Create(parent);
+
+ // Simulate a size event to set initial meter placement/size
++#if wxCHECK_VERSION(3, 0, 0)
++ wxSizeEvent event(GetSize(), GetId());
++ event.SetEventObject(this);
++ GetEventHandler()->ProcessEvent(event);
++#else
+ wxSizeEvent dummy;
+ OnSize(dummy);
++#endif
+ }
+
+ void DeviceToolBar::RecreateTipWindows()
+--- a/src/toolbars/SelectionBar.cpp
++++ b/src/toolbars/SelectionBar.cpp
+@@ -106,7 +106,7 @@
+ void SelectionBar::Populate()
+ {
+ // This will be inherited by all children:
+- SetFont(wxFont(9, wxSWISS, wxNORMAL, wxNORMAL));
++ SetFont(wxFont(9, wxFONTFAMILY_SWISS, wxFONTSTYLE_NORMAL, wxFONTWEIGHT_NORMAL));
+
+ wxFlexGridSizer *mainSizer;
+ wxBoxSizer *hSizer;
+--- a/src/toolbars/ToolManager.cpp
++++ b/src/toolbars/ToolManager.cpp
+@@ -47,10 +47,6 @@
+ #include <wx/minifram.h>
+ #include <wx/popupwin.h>
+
+-#if defined(__WXMAC__)
+-#include <wx/mac/uma.h>
+-#endif
+-
+ #include "ToolManager.h"
+ #include "ControlToolBar.h"
+ #include "DeviceToolBar.h"
+@@ -744,7 +740,7 @@
+ int bo = mBotDock->GetOrder( bar );
+
+ // Save
+- gPrefs->Write( wxT("Dock"), to ? TopDockID : bo ? BotDockID : NoDockID );
++ gPrefs->Write( wxT("Dock"), (int) (to ? TopDockID : bo ? BotDockID : NoDockID ));
+ gPrefs->Write( wxT("Order"), to + bo );
+ gPrefs->Write( wxT("Show"), IsVisible( ndx ) );
+
+--- a/src/toolbars/ToolsToolBar.cpp
++++ b/src/toolbars/ToolsToolBar.cpp
+@@ -57,23 +57,6 @@
+
+ IMPLEMENT_CLASS(ToolsToolBar, ToolBar);
+
+-// Strings to convert a tool number into a status message
+-// These MUST be in the same order as the ids above.
+-static const wxChar * MessageOfTool[numTools] = {
+- wxTRANSLATE("Click and drag to select audio"),
+- wxTRANSLATE("Click and drag to edit the amplitude envelope"),
+- wxTRANSLATE("Click and drag to edit the samples"),
+-#if defined( __WXMAC__ )
+- wxTRANSLATE("Click to Zoom In, Shift-Click to Zoom Out"),
+-#elif defined( __WXMSW__ )
+- wxTRANSLATE("Drag to Zoom Into Region, Right-Click to Zoom Out"),
+-#elif defined( __WXGTK__ )
+- wxTRANSLATE("Left=Zoom In, Right=Zoom Out, Middle=Normal"),
+-#endif
+- wxTRANSLATE("Click and drag to move a track in time"),
+- wxT("") // multi-mode tool
+-};
+-
+ ////////////////////////////////////////////////////////////
+ /// Methods for ToolsToolBar
+ ////////////////////////////////////////////////////////////
+@@ -96,6 +79,19 @@
+ wxASSERT( zoomTool == zoomTool - firstTool );
+ wxASSERT( drawTool == drawTool - firstTool );
+ wxASSERT( multiTool == multiTool - firstTool );
++
++ mMessageOfTool[selectTool] = _("Click and drag to select audio");
++ mMessageOfTool[envelopeTool] = _("Click and drag to edit the amplitude envelope");
++ mMessageOfTool[slideTool] = _("Click and drag to edit the samples");
++#if defined( __WXMAC__ )
++ mMessageOfTool[zoomTool] = _("Click to Zoom In, Shift-Click to Zoom Out");
++#elif defined( __WXMSW__ )
++ mMessageOfTool[zoomTool] = _("Drag to Zoom Into Region, Right-Click to Zoom Out");
++#elif defined( __WXGTK__ )
++ mMessageOfTool[zoomTool] = _("Left=Zoom In, Right=Zoom Out, Middle=Normal");
++#endif
++ mMessageOfTool[drawTool] = _("Click and drag to move a track in time");
++ mMessageOfTool[multiTool] = wxT(""); // multi-mode tool
+ }
+
+ ToolsToolBar::~ToolsToolBar()
+@@ -258,7 +254,8 @@
+ {
+ wxASSERT( ToolNumber >= 0 );
+ wxASSERT( ToolNumber < numTools );
+- return wxGetTranslation(MessageOfTool[ ToolNumber ]);
++
++ return mMessageOfTool[ToolNumber];
+ }
+
+
+--- a/src/toolbars/ToolsToolBar.h
++++ b/src/toolbars/ToolsToolBar.h
+@@ -79,6 +79,8 @@
+ wxGridSizer *mToolSizer;
+ int mCurrentTool;
+
++ const wxChar *mMessageOfTool[numTools];
++
+ public:
+
+ DECLARE_CLASS(ToolsToolBar);
+--- a/src/widgets/ASlider.cpp
++++ b/src/widgets/ASlider.cpp
+@@ -1191,7 +1191,7 @@
+ nevent.SetDirection( !event.ShiftDown() );
+ nevent.SetEventObject( mParent );
+ nevent.SetCurrentFocus( mParent );
+- mParent->GetParent()->ProcessEvent( nevent );
++ mParent->GetParent()->GetEventHandler()->ProcessEvent(nevent);
+ }
+ break;
+
+@@ -1203,7 +1203,7 @@
+ if (def && def->IsEnabled()) {
+ wxCommandEvent cevent(wxEVT_COMMAND_BUTTON_CLICKED,
+ def->GetId());
+- mParent->ProcessEvent(cevent);
++ mParent->GetEventHandler()->ProcessEvent(cevent);
+ }
+ }
+
+@@ -1228,7 +1228,7 @@
+ int intValue = (int)( ( mCurrentValue - mMinValue ) * 1000.0f /
+ ( mMaxValue - mMinValue ) );
+ e.SetInt( intValue );
+- mParent->ProcessEvent( e );
++ mParent->GetEventHandler()->ProcessEvent(e);
+ }
+
+ int LWSlider::ValueToPosition(float val)
+--- a/src/widgets/ExpandingToolBar.cpp
++++ b/src/widgets/ExpandingToolBar.cpp
+@@ -72,6 +72,7 @@
+ #include <wx/window.h>
+ #endif
+
++#include <wx/wx.h>
+ #include <wx/dcmemory.h>
+ #include <wx/log.h>
+ #include <wx/dragimag.h>
+--- a/src/widgets/Grabber.cpp
++++ b/src/widgets/Grabber.cpp
+@@ -89,7 +89,7 @@
+ e.SetEventObject(parent);
+
+ // Queue the event
+- parent->AddPendingEvent(e);
++ parent->GetEventHandler()->AddPendingEvent(e);
+ }
+
+ //
+--- a/src/widgets/Grid.cpp
++++ b/src/widgets/Grid.cpp
+@@ -79,6 +79,28 @@
+ GetTimeCtrl()->SetFocus();
+ }
+
++#if wxCHECK_VERSION(3,0,0)
++
++bool TimeEditor::EndEdit(int WXUNUSED(row), int WXUNUSED(col), const wxGrid *WXUNUSED(grid), const wxString & WXUNUSED(oldval), wxString *newval)
++{
++ double newtime = GetTimeCtrl()->GetTimeValue();
++ bool changed = newtime != mOld;
++
++ if (changed) {
++ mNew = newtime;
++ *newval = wxString::Format(wxT("%g"), newtime);
++ }
++
++ return changed;
++}
++
++void TimeEditor::ApplyEdit(int row, int col, wxGrid *grid)
++{
++ grid->GetTable()->SetValue(row, col, wxString::Format(wxT("%g"), mNew));
++}
++
++#else
++
+ bool TimeEditor::EndEdit(int row, int col, wxGrid *grid)
+ {
+ double newtime = GetTimeCtrl()->GetTimeValue();
+@@ -91,6 +113,8 @@
+ return changed;
+ }
+
++#endif
++
+ void TimeEditor::Reset()
+ {
+ GetTimeCtrl()->SetTimeValue(mOld);
+@@ -295,8 +319,40 @@
+ Choice()->SetFocus();
+ }
+
++#if wxCHECK_VERSION(3,0,0)
++
++bool ChoiceEditor::EndEdit(int WXUNUSED(row), int WXUNUSED(col), const wxGrid* WXUNUSED(grid), const wxString & WXUNUSED(oldval), wxString *newval)
++{
++ int sel = Choice()->GetSelection();
++
++ // This can happen if the wxChoice control is displayed and the list of choices get changed
++ if ((sel < 0) || (sel >= (int)(mChoices.GetCount())))
++ {
++ return false;
++ }
++
++ wxString val = mChoices[sel];
++ if (val == mOld)
++ {
++ return false;
++ }
++
++ *newval = val;
++
++ mNew = val;
++
++ return true;
++}
++
++void ChoiceEditor::ApplyEdit(int row, int col, wxGrid *grid)
++{
++ grid->GetTable()->SetValue(row, col, mNew);
++}
++
++#else
++
+ bool ChoiceEditor::EndEdit(int row, int col,
+- wxGrid* grid)
++ wxGrid* grid)
+ {
+ int sel = Choice()->GetSelection();
+
+@@ -315,6 +371,8 @@
+ return true;
+ }
+
++#endif
++
+ void ChoiceEditor::Reset()
+ {
+ Choice()->SetSelection(mChoices.Index(mOld));
+@@ -491,7 +549,7 @@
+ if (def && def->IsEnabled()) {
+ wxCommandEvent cevent(wxEVT_COMMAND_BUTTON_CLICKED,
+ def->GetId());
+- GetParent()->ProcessEvent(cevent);
++ GetParent()->GetEventHandler()->ProcessEvent(cevent);
+ }
+ }
+ else {
+--- a/src/widgets/Grid.h
++++ b/src/widgets/Grid.h
+@@ -52,7 +52,14 @@
+ void SetSize(const wxRect &rect);
+
+ void BeginEdit(int row, int col, wxGrid *grid);
++
++#if wxCHECK_VERSION(3,0,0)
++ bool EndEdit(int row, int col, const wxGrid *grid,
++ const wxString & oldval, wxString *newval);
++ void ApplyEdit(int, int, wxGrid *);
++#else
+ bool EndEdit(int row, int col, wxGrid *grid);
++#endif
+
+ void Reset();
+
+@@ -71,6 +78,7 @@
+ wxString mFormat;
+ double mRate;
+ double mOld;
++ double mNew;
+ };
+
+ // ----------------------------------------------------------------------------
+@@ -124,7 +132,14 @@
+ void SetSize(const wxRect &rect);
+
+ void BeginEdit(int row, int col, wxGrid *grid);
++
++#if wxCHECK_VERSION(3,0,0)
++ bool EndEdit(int row, int col, const wxGrid *grid,
++ const wxString & oldval, wxString *newval);
++ void ApplyEdit(int, int, wxGrid *);
++#else
+ bool EndEdit(int row, int col, wxGrid *grid);
++#endif
+
+ void Reset();
+
+@@ -159,6 +174,7 @@
+
+ wxArrayString mChoices;
+ wxString mOld;
++ wxString mNew;
+ };
+
+ // ----------------------------------------------------------------------------
+--- a/src/widgets/ImageRoll.cpp
++++ b/src/widgets/ImageRoll.cpp
+@@ -96,6 +96,7 @@
+
+ #include "ImageRoll.h"
+
++#include <wx/wx.h>
+ #include <wx/arrimpl.cpp>
+ #include <wx/bitmap.h>
+ #include <wx/dcmemory.h>
+@@ -299,7 +300,7 @@
+ }
+
+ void ImageRoll::DrawBitmap(wxDC &dc, wxBitmap &bitmap,
+- int x, int y, int logicalFunc)
++ int x, int y, wxRasterOperationMode logicalFunc)
+ {
+ if (logicalFunc == wxCOPY)
+ dc.DrawBitmap(bitmap, x, y);
+--- a/src/widgets/ImageRoll.h
++++ b/src/widgets/ImageRoll.h
+@@ -12,10 +12,15 @@
+ #ifndef __AUDACITY_IMAGE_ROLL__
+ #define __AUDACITY_IMAGE_ROLL__
+
++#include <wx/dc.h>
+ #include <wx/defs.h>
+ #include <wx/dynarray.h>
+ #include <wx/panel.h>
+
++#if !wxCHECK_VERSION(3,0,0)
++#define wxRasterOperationMode int
++#endif
++
+ WX_DECLARE_OBJARRAY(wxBitmap, BitmapArray);
+ WX_DECLARE_OBJARRAY(wxImage, ImageArray);
+
+@@ -48,7 +53,7 @@
+ protected:
+
+ void DrawBitmap(wxDC &dc, wxBitmap &bitmap,
+- int x, int y, int logicalFunc = wxCOPY);
++ int x, int y, wxRasterOperationMode logicalFunc = wxCOPY);
+
+ void Init(RollType type, const wxImage &src, wxColour magicColor);
+
+--- a/src/widgets/Meter.cpp
++++ b/src/widgets/Meter.cpp
+@@ -52,10 +52,6 @@
+ #include <wx/tooltip.h>
+ #include <wx/msgdlg.h>
+
+-#if defined(__WXMAC__)
+-#include <wx/mac/uma.h>
+-#endif
+-
+ #include <math.h>
+
+ #include "Meter.h"
+@@ -746,7 +742,7 @@
+ fontSize = 8;
+ #endif
+
+- return wxFont(fontSize, wxSWISS, wxNORMAL, wxNORMAL);
++ return wxFont(fontSize, wxFONTFAMILY_SWISS, wxFONTSTYLE_NORMAL, wxFONTWEIGHT_NORMAL);
+ }
+
+ void Meter::ResetBar(MeterBar *b, bool resetClipping)
+--- a/src/widgets/Ruler.cpp
++++ b/src/widgets/Ruler.cpp
+@@ -116,9 +116,9 @@
+ fontSize = 8;
+ #endif
+
+- mMinorMinorFont = new wxFont(fontSize-1, wxSWISS, wxNORMAL, wxNORMAL);
+- mMinorFont = new wxFont(fontSize, wxSWISS, wxNORMAL, wxNORMAL);
+- mMajorFont = new wxFont(fontSize, wxSWISS, wxNORMAL, wxBOLD);
++ mMinorMinorFont = new wxFont(fontSize - 1, wxFONTFAMILY_SWISS, wxFONTSTYLE_NORMAL, wxFONTWEIGHT_NORMAL);
++ mMinorFont = new wxFont(fontSize, wxFONTFAMILY_SWISS, wxFONTSTYLE_NORMAL, wxFONTWEIGHT_NORMAL);
++ mMajorFont = new wxFont(fontSize, wxFONTFAMILY_SWISS, wxFONTSTYLE_NORMAL, wxFONTWEIGHT_BOLD);
+ mUserFonts = false;
+
+ #ifdef __WXMAC__
+@@ -934,45 +934,45 @@
+ int j;
+
+ if (!mUserFonts) {
+- int fontSize = 4;
+- wxCoord strW, strH, strD, strL;
+- wxString exampleText = wxT("0.9"); //ignored for height calcs on all platforms
+- int desiredPixelHeight;
+-
+- if (mOrientation == wxHORIZONTAL)
+- desiredPixelHeight = mBottom-mTop-5; // height less ticks and 1px gap
+- else
++ int fontSize = 4;
++ wxCoord strW, strH, strD, strL;
++ wxString exampleText = wxT("0.9"); //ignored for height calcs on all platforms
++ int desiredPixelHeight;
++
++ if (mOrientation == wxHORIZONTAL)
++ desiredPixelHeight = mBottom - mTop - 5; // height less ticks and 1px gap
++ else
+ desiredPixelHeight = 12; // why 12? 10 -> 12 seems to be max/min
+
+- if (desiredPixelHeight < 10)//8)
+- desiredPixelHeight = 10;//8;
+- if (desiredPixelHeight > 12)
+- desiredPixelHeight = 12;
++ if (desiredPixelHeight < 10)//8)
++ desiredPixelHeight = 10;//8;
++ if (desiredPixelHeight > 12)
++ desiredPixelHeight = 12;
+
+ // Keep making the font bigger until it's too big, then subtract one.
+- mDC->SetFont(wxFont(fontSize, wxSWISS, wxNORMAL, wxBOLD));
++ mDC->SetFont(wxFont(fontSize, wxFONTFAMILY_SWISS, wxFONTSTYLE_NORMAL, wxFONTWEIGHT_BOLD));
+ mDC->GetTextExtent(exampleText, &strW, &strH, &strD, &strL);
+- while( (strH-strD-strL) <= desiredPixelHeight && fontSize < 40) {
++ while ((strH - strD - strL) <= desiredPixelHeight && fontSize < 40) {
+ fontSize++;
+- mDC->SetFont(wxFont(fontSize, wxSWISS, wxNORMAL, wxBOLD));
+- mDC->GetTextExtent(exampleText, &strW, &strH, &strD, & strL);
++ mDC->SetFont(wxFont(fontSize, wxFONTFAMILY_SWISS, wxFONTSTYLE_NORMAL, wxFONTWEIGHT_BOLD));
++ mDC->GetTextExtent(exampleText, &strW, &strH, &strD, &strL);
+ }
+ fontSize--;
+- mDC->SetFont(wxFont(fontSize, wxSWISS, wxNORMAL, wxNORMAL));
++ mDC->SetFont(wxFont(fontSize, wxFONTFAMILY_SWISS, wxFONTSTYLE_NORMAL, wxFONTWEIGHT_NORMAL));
+ mDC->GetTextExtent(exampleText, &strW, &strH, &strD, &strL);
+ mLead = strL;
+
+- if (mMajorFont)
+- delete mMajorFont;
+- mMajorFont = new wxFont(fontSize, wxSWISS, wxNORMAL, wxBOLD);
+-
+- if (mMinorFont)
+- delete mMinorFont;
+- mMinorFont = new wxFont(fontSize, wxSWISS, wxNORMAL, wxNORMAL);
+-
+- if (mMinorMinorFont)
+- delete mMinorMinorFont;
+- mMinorMinorFont = new wxFont(fontSize-1, wxSWISS, wxNORMAL, wxNORMAL);
++ if (mMajorFont)
++ delete mMajorFont;
++ mMajorFont = new wxFont(fontSize, wxFONTFAMILY_SWISS, wxFONTSTYLE_NORMAL, wxFONTWEIGHT_BOLD);
++
++ if (mMinorFont)
++ delete mMinorFont;
++ mMinorFont = new wxFont(fontSize, wxFONTFAMILY_SWISS, wxFONTSTYLE_NORMAL, wxFONTWEIGHT_NORMAL);
++
++ if (mMinorMinorFont)
++ delete mMinorMinorFont;
++ mMinorMinorFont = new wxFont(fontSize - 1, wxFONTFAMILY_SWISS, wxFONTSTYLE_NORMAL, wxFONTWEIGHT_NORMAL);
+ }
+
+ // If ruler is being resized, we could end up with it being too small.
+--- a/src/widgets/TimeTextCtrl.cpp
++++ b/src/widgets/TimeTextCtrl.cpp
+@@ -168,6 +168,7 @@
+
+ #include <math.h>
+
++#include <wx/wx.h>
+ #include <wx/dcmemory.h>
+ #include <wx/font.h>
+ #include <wx/intl.h>
+@@ -1055,18 +1056,18 @@
+ wxString exampleText = wxT("0");
+
+ // Keep making the font bigger until it's too big, then subtract one.
+- memDC.SetFont(wxFont(fontSize, wxFIXED, wxNORMAL, wxNORMAL));
++ memDC.SetFont(wxFont(fontSize, wxFONTFAMILY_TELETYPE, wxFONTSTYLE_NORMAL, wxFONTWEIGHT_NORMAL));
+ memDC.GetTextExtent(exampleText, &strW, &strH);
+ while(strW <= mDigitBoxW && strH <= mDigitBoxH) {
+ fontSize++;
+- memDC.SetFont(wxFont(fontSize, wxFIXED, wxNORMAL, wxNORMAL));
++ memDC.SetFont(wxFont(fontSize, wxFONTFAMILY_TELETYPE, wxFONTSTYLE_NORMAL, wxFONTWEIGHT_NORMAL));
+ memDC.GetTextExtent(exampleText, &strW, &strH);
+ }
+ fontSize--;
+
+ if (mDigitFont)
+ delete mDigitFont;
+- mDigitFont = new wxFont(fontSize, wxFIXED, wxNORMAL, wxNORMAL);
++ mDigitFont = new wxFont(fontSize, wxFONTFAMILY_TELETYPE, wxFONTSTYLE_NORMAL, wxFONTWEIGHT_NORMAL);
+ memDC.SetFont(*mDigitFont);
+ memDC.GetTextExtent(exampleText, &strW, &strH);
+ mDigitW = strW;
+@@ -1076,7 +1077,7 @@
+ fontSize--;
+ if (mLabelFont)
+ delete mLabelFont;
+- mLabelFont = new wxFont(fontSize, wxFIXED, wxNORMAL, wxNORMAL);
++ mLabelFont = new wxFont(fontSize, wxFONTFAMILY_TELETYPE, wxFONTSTYLE_NORMAL, wxFONTWEIGHT_NORMAL);
+
+ // Figure out the x-position of each field and label in the box
+ x = mBorderLeft;
+@@ -1435,7 +1436,7 @@
+ nevent.SetDirection(!event.ShiftDown());
+ nevent.SetEventObject(parent);
+ nevent.SetCurrentFocus(parent);
+- GetParent()->ProcessEvent(nevent);
++ GetParent()->GetEventHandler()->ProcessEvent(nevent);
+ event.Skip(false);
+ }
+
+@@ -1445,7 +1446,7 @@
+ if (def && def->IsEnabled()) {
+ wxCommandEvent cevent(wxEVT_COMMAND_BUTTON_CLICKED,
+ def->GetId());
+- GetParent()->ProcessEvent(cevent);
++ GetParent()->GetEventHandler()->ProcessEvent(cevent);
+ event.Skip(false);
+ }
+ }
+--- a/src/widgets/numformatter.cpp
++++ b/src/widgets/numformatter.cpp
+@@ -242,8 +242,13 @@
+
+ wxString wxNumberFormatter::ToString(wxLongLong_t val, int style)
+ {
+- return PostProcessIntString(wxString::Format(wxT("%") wxLongLongFmtSpec wxT("d"), val),
++#if wxCHECK_VERSION(3,0,0)
++ return PostProcessIntString(wxString::Format("%" wxLongLongFmtSpec "d", val),
+ style);
++#else
++ return PostProcessIntString(wxString::Format(wxT("%") wxLongLongFmtSpec wxT("d"), val),
++ style);
++#endif
+ }
+
+ #endif // wxHAS_LONG_LONG_T_DIFFERENT_FROM_LONG
+--- a/src/xml/XMLWriter.cpp
++++ b/src/xml/XMLWriter.cpp
+@@ -124,21 +124,11 @@
+ XMLEsc(value).c_str()));
+ }
+
+-void XMLWriter::WriteAttr(const wxChar *name, const wxChar *value)
+-{
+- WriteAttr(wxString(name), wxString(value));
+-}
+-
+ void XMLWriter::WriteAttr(const wxString &name, const wxChar *value)
+ {
+ WriteAttr(name, wxString(value));
+ }
+
+-void XMLWriter::WriteAttr(const wxChar *name, const wxString &value)
+-{
+- WriteAttr(wxString(name), value);
+-}
+-
+ void XMLWriter::WriteAttr(const wxString &name, int value)
+ {
+ Write(wxString::Format(wxT(" %s=\"%d\""),
+@@ -146,11 +136,6 @@
+ value));
+ }
+
+-void XMLWriter::WriteAttr(const wxChar *name, int value)
+-{
+- WriteAttr(wxString(name), value);
+-}
+-
+ void XMLWriter::WriteAttr(const wxString &name, bool value)
+ {
+ Write(wxString::Format(wxT(" %s=\"%d\""),
+@@ -158,11 +143,6 @@
+ value));
+ }
+
+-void XMLWriter::WriteAttr(const wxChar *name, bool value)
+-{
+- WriteAttr(wxString(name), value);
+-}
+-
+ void XMLWriter::WriteAttr(const wxString &name, long value)
+ {
+ Write(wxString::Format(wxT(" %s=\"%ld\""),
+@@ -170,11 +150,6 @@
+ value));
+ }
+
+-void XMLWriter::WriteAttr(const wxChar *name, long value)
+-{
+- WriteAttr(wxString(name), value);
+-}
+-
+ void XMLWriter::WriteAttr(const wxString &name, long long value)
+ {
+ Write(wxString::Format(wxT(" %s=\"%lld\""),
+@@ -182,11 +157,6 @@
+ value));
+ }
+
+-void XMLWriter::WriteAttr(const wxChar *name, long long value)
+-{
+- WriteAttr(wxString(name), value);
+-}
+-
+ void XMLWriter::WriteAttr(const wxString &name, size_t value)
+ {
+ Write(wxString::Format(wxT(" %s=\"%ld\""),
+@@ -194,11 +164,6 @@
+ value));
+ }
+
+-void XMLWriter::WriteAttr(const wxChar *name, size_t value)
+-{
+- WriteAttr(wxString(name), value);
+-}
+-
+ void XMLWriter::WriteAttr(const wxString &name, float value, int digits)
+ {
+ Write(wxString::Format(wxT(" %s=\"%s\""),
+@@ -206,11 +171,6 @@
+ Internat::ToString(value, digits).c_str()));
+ }
+
+-void XMLWriter::WriteAttr(const wxChar *name, float value, int digits)
+-{
+- WriteAttr(wxString(name), value, digits);
+-}
+-
+ void XMLWriter::WriteAttr(const wxString &name, double value, int digits)
+ {
+ Write(wxString::Format(wxT(" %s=\"%s\""),
+@@ -218,11 +178,6 @@
+ Internat::ToString(value, digits).c_str()));
+ }
+
+-void XMLWriter::WriteAttr(const wxChar *name, double value, int digits)
+-{
+- WriteAttr(wxString(name), value, digits);
+-}
+-
+ void XMLWriter::WriteData(const wxString &value)
+ {
+ int i;
+@@ -234,11 +189,6 @@
+ Write(XMLEsc(value));
+ }
+
+-void XMLWriter::WriteData(const wxChar *value)
+-{
+- WriteData(wxString(value));
+-}
+-
+ void XMLWriter::WriteSubTree(const wxString &value)
+ {
+ if (mInTag) {
+@@ -250,16 +200,6 @@
+ Write(value.c_str());
+ }
+
+-void XMLWriter::WriteSubTree(const wxChar *value)
+-{
+- WriteSubTree(wxString(value));
+-}
+-
+-void XMLWriter::Write(const wxChar *value)
+-{
+- Write(wxString(value));
+-}
+-
+ // See http://www.w3.org/TR/REC-xml for reference
+ wxString XMLWriter::XMLEsc(const wxString & s)
+ {
+--- a/src/xml/XMLWriter.h
++++ b/src/xml/XMLWriter.h
+@@ -27,32 +27,19 @@
+ void EndTag(const wxString &name);
+
+ void WriteAttr(const wxString &name, const wxString &value);
+- void WriteAttr(const wxChar *name, const wxChar *value);
+ void WriteAttr(const wxString &name, const wxChar *value);
+- void WriteAttr(const wxChar *name, const wxString &value);
+
+ void WriteAttr(const wxString &name, int value);
+- void WriteAttr(const wxChar *name, int value);
+ void WriteAttr(const wxString &name, bool value);
+- void WriteAttr(const wxChar *name, bool value);
+ void WriteAttr(const wxString &name, long value);
+- void WriteAttr(const wxChar *name, long value);
+ void WriteAttr(const wxString &name, long long value);
+- void WriteAttr(const wxChar *name, long long value);
+ void WriteAttr(const wxString &name, size_t value);
+- void WriteAttr(const wxChar *name, size_t value);
+ void WriteAttr(const wxString &name, float value, int digits = -1);
+- void WriteAttr(const wxChar *name, float value, int digits = -1);
+ void WriteAttr(const wxString &name, double value, int digits = -1);
+- void WriteAttr(const wxChar *name, double value, int digits = -1);
+
+ void WriteData(const wxString &value);
+- void WriteData(const wxChar *value);
+
+ void WriteSubTree(const wxString &value);
+- void WriteSubTree(const wxChar *value);
+-
+- void Write(const wxChar *data);
+
+ virtual void Write(const wxString &data) = 0;
+
diff --git a/debian/patches/series b/debian/patches/series
index 7f962d0..743f4c4 100644
--- a/debian/patches/series
+++ b/debian/patches/series
@@ -1 +1,2 @@
fix-minsrc-autoreconf.patch
+backport-wx30-r13403.patch
--
Audacity debian packaging
More information about the pkg-multimedia-commits
mailing list