[SCM] audacity/master: Drop patches applied upstream
sramacher at users.alioth.debian.org
sramacher at users.alioth.debian.org
Tue Jan 12 00:01:04 UTC 2016
The following commit has been merged in the master branch:
commit 92f749e594184179acef856c43dfbab8d4746201
Author: Sebastian Ramacher <sramacher at debian.org>
Date: Mon Dec 7 19:06:31 2015 +0100
Drop patches applied upstream
diff --git a/debian/patches/clang-ftbfs.patch b/debian/patches/clang-ftbfs.patch
deleted file mode 100644
index f60a3b2..0000000
--- a/debian/patches/clang-ftbfs.patch
+++ /dev/null
@@ -1,139 +0,0 @@
-Description: Fix build failure with clang
- Fixed undefined reference error in lib-src/libnyquist/nyquist/ffts/src/fftlib.c
-Author: Arthur Marble <arthur at info9.net>
-Bug-Debian: https://bugs.debian.org/757531
-
---- a/lib-src/libnyquist/nyquist/ffts/src/fftlib.c
-+++ b/lib-src/libnyquist/nyquist/ffts/src/fftlib.c
-@@ -61,8 +61,8 @@
- parts of ffts1
- *************************************************/
-
--inline void bitrevR2(float *ioptr, long M, short *BRLow);
--inline void bitrevR2(float *ioptr, long M, short *BRLow){
-+static inline void bitrevR2(float *ioptr, long M, short *BRLow);
-+static inline void bitrevR2(float *ioptr, long M, short *BRLow){
- /*** bit reverse and first radix 2 stage of forward or inverse fft ***/
- float f0r;
- float f0i;
-@@ -512,8 +512,8 @@
- }
- }
-
--inline void bfR4(float *ioptr, long M, long NDiffU);
--inline void bfR4(float *ioptr, long M, long NDiffU){
-+static inline void bfR4(float *ioptr, long M, long NDiffU);
-+static inline void bfR4(float *ioptr, long M, long NDiffU){
- /*** 1 radix 4 stage ***/
- unsigned long pos;
- unsigned long posi;
-@@ -721,8 +721,8 @@
-
- }
-
--inline void bfstages(float *ioptr, long M, float *Utbl, long Ustride, long NDiffU, long StageCnt);
--inline void bfstages(float *ioptr, long M, float *Utbl, long Ustride, long NDiffU, long StageCnt){
-+static inline void bfstages(float *ioptr, long M, float *Utbl, long Ustride, long NDiffU, long StageCnt);
-+static inline void bfstages(float *ioptr, long M, float *Utbl, long Ustride, long NDiffU, long StageCnt){
- /*** RADIX 8 Stages ***/
- unsigned long pos;
- unsigned long posi;
-@@ -1125,8 +1125,8 @@
- parts of iffts1
- *************************************************/
-
--inline void scbitrevR2(float *ioptr, long M, short *BRLow, float scale);
--inline void scbitrevR2(float *ioptr, long M, short *BRLow, float scale){
-+static inline void scbitrevR2(float *ioptr, long M, short *BRLow, float scale);
-+static inline void scbitrevR2(float *ioptr, long M, short *BRLow, float scale){
- /*** scaled bit reverse and first radix 2 stage forward or inverse fft ***/
- float f0r;
- float f0i;
-@@ -1467,8 +1467,8 @@
- ioptr[15] = scale*f6i;
- }
-
--inline void ibfR2(float *ioptr, long M, long NDiffU);
--inline void ibfR2(float *ioptr, long M, long NDiffU){
-+static inline void ibfR2(float *ioptr, long M, long NDiffU);
-+static inline void ibfR2(float *ioptr, long M, long NDiffU){
- /*** 2nd radix 2 stage ***/
- unsigned long pos;
- unsigned long posi;
-@@ -1576,8 +1576,8 @@
- }
- }
-
--inline void ibfR4(float *ioptr, long M, long NDiffU);
--inline void ibfR4(float *ioptr, long M, long NDiffU){
-+static inline void ibfR4(float *ioptr, long M, long NDiffU);
-+static inline void ibfR4(float *ioptr, long M, long NDiffU){
- /*** 1 radix 4 stage ***/
- unsigned long pos;
- unsigned long posi;
-@@ -1785,8 +1785,8 @@
-
- }
-
--inline void ibfstages(float *ioptr, long M, float *Utbl, long Ustride, long NDiffU, long StageCnt);
--inline void ibfstages(float *ioptr, long M, float *Utbl, long Ustride, long NDiffU, long StageCnt){
-+static inline void ibfstages(float *ioptr, long M, float *Utbl, long Ustride, long NDiffU, long StageCnt);
-+static inline void ibfstages(float *ioptr, long M, float *Utbl, long Ustride, long NDiffU, long StageCnt){
- /*** RADIX 8 Stages ***/
- unsigned long pos;
- unsigned long posi;
-@@ -2109,8 +2109,8 @@
- }
- }
-
--void ifftrecurs(float *ioptr, long M, float *Utbl, long Ustride, long NDiffU, long StageCnt);
--void ifftrecurs(float *ioptr, long M, float *Utbl, long Ustride, long NDiffU, long StageCnt){
-+static inline void ifftrecurs(float *ioptr, long M, float *Utbl, long Ustride, long NDiffU, long StageCnt);
-+static inline void ifftrecurs(float *ioptr, long M, float *Utbl, long Ustride, long NDiffU, long StageCnt){
- /* recursive bfstages calls to maximize on chip cache efficiency */
- long i1;
- if (M <= MCACHE)
-@@ -2318,8 +2318,8 @@
- ioptr[7] = scale*f3i;
- }
-
--inline void rfft8pt(float *ioptr);
--inline void rfft8pt(float *ioptr){
-+static inline void rfft8pt(float *ioptr);
-+static inline void rfft8pt(float *ioptr){
- /*** RADIX 16 rfft ***/
- float w0r = 1.0/MYROOT2; /* cos(pi/4) */
- float w1r = MYCOSPID8; /* cos(pi/8) */
-@@ -2477,8 +2477,8 @@
- ioptr[15] = scale*f6i;
- }
-
--inline void frstage(float *ioptr, long M, float *Utbl);
--inline void frstage(float *ioptr, long M, float *Utbl){
-+static inline void frstage(float *ioptr, long M, float *Utbl);
-+static inline void frstage(float *ioptr, long M, float *Utbl){
- /* Finish RFFT */
-
- unsigned long pos;
-@@ -2811,8 +2811,8 @@
- ioptr[7] = scale*f3i;
- }
-
--inline void rifft8pt(float *ioptr, float scale);
--inline void rifft8pt(float *ioptr, float scale){
-+static inline void rifft8pt(float *ioptr, float scale);
-+static inline void rifft8pt(float *ioptr, float scale){
- /*** RADIX 16 rifft ***/
- float w0r = 1.0/MYROOT2; /* cos(pi/4) */
- float w1r = MYCOSPID8; /* cos(pi/8) */
-@@ -2968,8 +2968,8 @@
- ioptr[15] = scale*f6i;
- }
-
--inline void ifrstage(float *ioptr, long M, float *Utbl);
--inline void ifrstage(float *ioptr, long M, float *Utbl){
-+static inline void ifrstage(float *ioptr, long M, float *Utbl);
-+static inline void ifrstage(float *ioptr, long M, float *Utbl){
- /* Start RIFFT */
-
- unsigned long pos;
diff --git a/debian/patches/fix-cursor-recapturing-sliders.patch b/debian/patches/fix-cursor-recapturing-sliders.patch
deleted file mode 100644
index d12034c..0000000
--- a/debian/patches/fix-cursor-recapturing-sliders.patch
+++ /dev/null
@@ -1,26 +0,0 @@
-Description: Fix cursor recapturing in track panel sliders
- wxWidgets 3.0 has added a lot of asserts to detect incorrect usage
- of its APIs. Now capturing the cursor, when it's already captured,
- throughs an assertion failure. This can be the case in the track
- panel sliders because the sliders capture the cursor themselves
- (because they are also used in other places outside the track panel,
- where this is actually necessary), but the track panel also manages
- the cursor capturing because it needs it for other operations.
- Fix the recapturing problem by letting the sliders capture the cursor
- only if necessary.
-Author: Martin Steghöfer <martin at steghoefer.eu>
-Bug-Debian: https://bugs.debian.org/765779
-
---- a/src/widgets/ASlider.cpp
-+++ b/src/widgets/ASlider.cpp
-@@ -1070,7 +1070,9 @@ void LWSlider::OnMouseEvent(wxMouseEvent & event)
- event.ShiftDown());
- }
-
-- mParent->CaptureMouse();
-+ if (!mParent->HasCapture()) {
-+ mParent->CaptureMouse();
-+ }
- // wxSetCursor(wxCURSOR_BLANK);
- ((TipPanel*)LWSlider::sharedTipPanel)->SetTargetParent(mParent);
- FormatPopWin();
diff --git a/debian/patches/series b/debian/patches/series
index 918216d..1e2657f 100644
--- a/debian/patches/series
+++ b/debian/patches/series
@@ -1,7 +1,2 @@
fix-minsrc-autoreconf.patch
-wxWidgets-3.0.patch
-clang-ftbfs.patch
-fix-cursor-recapturing-sliders.patch
workaround-wxwidgets-fit-recovery.patch
-wxwidgets-clipboard-reentry-workaround.patch
-wxwidgets-effect-dialogs-segfault.patch
diff --git a/debian/patches/wxWidgets-3.0.patch b/debian/patches/wxWidgets-3.0.patch
deleted file mode 100644
index 20d0a30..0000000
--- a/debian/patches/wxWidgets-3.0.patch
+++ /dev/null
@@ -1,1802 +0,0 @@
-Description: Compile audacity against wxWidgets 3.0
- Solved compilation issues:
- (1.) Allow wxWidgets 3.0 in various configure scripts.
- (2.) The file dialog was derived from an internal wx class that
- disappeared in wx3.0 (discussed in further detail below).
- (3.) In several places the types in interfaces changed between
- wxChar* and wxString. I've tried to modify the code so it works with
- both interfaces (thanks to implicit conversion; may look a bit weird
- in some places).
- (4.) Calls to "wxTheApp->SuspendIdleCallback()" are no longer
- supported. They were part of a workaround for a clipboard problem,
- which fortunately doesn't seem to be there any longer in wx3.0, so I
- deactivated it for wx3.0.
- (5.) AddPendingEvent() and ProcessEvent() now have the visibility
- "protected" in wxWindow. It has always been a bad idea to call them
- directly on a wxWindow object, but now it's explicitly forbidden.
- Instead, those functions should be called on the object returned by
- GetEventHandler().
- (6.) The class wxStandardPaths is now a singleton and has to be
- treated as such (no more explicit constructor calls).
- (7.) "wxLogWarning" is a macro now, so the "::" prefix doesn't work
- on it anymore.
- (8.) Several int types (which were actually used as enums) are now
- real enum types (e.g. wxRasterOperationMode, wxMouseButton) and have
- to be used as such.
- (9.) Apart from the FD constants (which have been fixed in Olly's
- patch already) there are some other constants which have received a
- prefix (e.g. wx* -> wxFONTFAMILY_*, wx* -> wxFONTSTYLE_*, wx* ->
- wxFONTWEIGHT_*).
- (10.) Signature changes in constructors of wxFlexGridSizer and wxIcon
- and wxSizeEvent
- (11.) Missing includes (missing header files were probably included
- indirectly in wx2.8 by chance)
- (12.) When deriving from the abstract class wxGridTableBase,
- different methods have to be implemented with wx3.0 (EndEdit with new
- signature and ApplyEdit) than before with wx2.8 (only EndEdit with
- old signature). Now both versions are implemented in parallel in the
- classes TimeEditor and ChoiceEditor (one version essentially being a
- wrapper of the other one).
- Solved runtime issues:
- (1.) Segmentation fault: The LadspaEffectDialog receives EVT_TEXT
- events before it's properly initialized. To prevent this, a
- workaround was already in place, but was only active on Windows. It
- looks like this happens now on more platforms (including GTK). As the
- workaround doesn't do any harm, even if activated unnecessarily, I've
- simply activated it for all environments.
- (2.) GTK critical warning "IA__gtk_range_set_range: assertion
- 'min < max' failed" because of negative numbers as result of window
- size checking. Added a sanity check that straightens up the numbers
- in edge cases.
- (3.) GTK critical warning "IA__gdk_window_get_origin: assertion
- 'GDK_IS_WINDOW (window)' failed": Received events of type wxSizeEvent
- on the main project window cause calls to "ClientToScreen" - which is
- not available until the window is first shown. So the class has to
- keep track of wxShowEvent events and inhibit those actions until the
- window is first shown.
- (4.) The functions wxString::Format and wxString::Printf have become
- stricter about parameter types that don't match (format string vs.
- function parameters). A systematic check of all occurrences was done
- to make sure all of them are fixed.
- (5.) Fix a segmentation fault that was due to an incorrect
- implementation of wxStaticCast. Use the C++ static_case as a
- workaround.
- (6.) Fix a segmentation fault due to double initialization of the
- classes wxNumberFormatter and wxNumValidator. Those classes had
- been copied from wxWidgets to audacity, but are included in
- wxWidgets 3.0, too. Use the original classes, if we compile
- against wxWidgets 3.0.
-Author: Martin Steghöfer <martin at steghoefer.eu>
-Bug-Debian: https://bugs.debian.org/749659
-
---- a/configure.ac
-+++ b/configure.ac
-@@ -184,13 +184,11 @@
- [dynamic_loading="$enableval"],
- [dynamic_loading="yes"])
-
--dnl AC_ARG_WITH(wx-version,
--dnl [AS_HELP_STRING([--with-wx-version],
--dnl [select wxWidgets version (if both installed) [2.8,]])],
--dnl wx_preference="--version=$withval",
--dnl wx_preference="")
--dnl At the moment we only support wx2.8. If we start supporting 3.0 when it
--dnl comes out, we'll want it back again.
-+AC_ARG_WITH(wx-version,
-+ [AS_HELP_STRING([--with-wx-version],
-+ [select wxWidgets version (if both installed) [2.8, 3.0]])],
-+ wx_preference="--version=$withval",
-+ wx_preference="")
-
- dnl ----------------------------------------------------
- dnl If user asked for debug, put debug in compiler flags
-@@ -289,19 +287,21 @@
- wxconfigargs="$static_wx_preference $unicode_preference $wxconfigargs $wx_preference"
- wx_version=`${WX_CONFIG} $wxconfigargs --version`
-
--AC_MSG_NOTICE([Checking that the chosen version of wxWidgets is 2.8.x])
-+AC_MSG_NOTICE([Checking that the chosen version of wxWidgets is 2.8.x or 3.0.x])
-
- case "${wx_version}" in
- 2.8.*)
- echo "Great, you're using wxWidgets ${wx_version}!"
- ;;
-+ 3.0.*)
-+ echo "Great, you're using wxWidgets ${wx_version}!"
-+ ;;
- *)
- wx_list=`${WX_CONFIG} --list`
-- AC_MSG_ERROR([Unable to locate a suitable configuration of wxWidgets v2.8.x or higher.
--The currently available configurations are listed below. If necessary, either
--install the package for your distribution or download the latest version of
--wxWidgets
--from http://wxwidgets.org.
-+ AC_MSG_ERROR([Unable to locate a suitable configuration of wxWidgets v2.8.x
-+or v3.0.x. The currently available configurations are listed below. If
-+necessary, either install the package for your distribution or download a
-+suitable version of wxWidgets from http://wxwidgets.org.
- ${wx_list}])
- esac
-
---- a/lib-src/FileDialog/FileDialog.h
-+++ b/lib-src/FileDialog/FileDialog.h
-@@ -43,11 +43,11 @@
- //----------------------------------------------------------------------------
-
- wxString
--FileSelector(const wxChar *message = wxFileSelectorPromptStr,
-+FileSelector(const wxChar *message = wxString(wxFileSelectorPromptStr, wxConvUTF8).wc_str(),
- const wxChar *default_path = NULL,
- const wxChar *default_filename = NULL,
- const wxChar *default_extension = NULL,
-- const wxChar *wildcard = wxFileSelectorDefaultWildcardStr,
-+ const wxChar *wildcard = wxString(wxFileSelectorDefaultWildcardStr, wxConvUTF8).wc_str(),
- int flags = 0,
- wxWindow *parent = NULL,
- wxString label = wxEmptyString,
---- a/lib-src/FileDialog/Makefile.am
-+++ b/lib-src/FileDialog/Makefile.am
-@@ -32,3 +32,7 @@
- if WINDOWS
- libFileDialog_la_SOURCES += win/FileDialogPrivate.cpp win/FileDialogPrivate.h
- endif
-+
-+if WX30
-+libFileDialog_la_SOURCES += wx30/FileDialogPrivate.cpp wx30/FileDialogPrivate.h
-+endif
---- a/lib-src/FileDialog/configure.ac
-+++ b/lib-src/FileDialog/configure.ac
-@@ -42,7 +42,7 @@
- debug_preference="")
-
- AC_ARG_WITH(wx-version,
-- [AS_HELP_STRING([--with-wx-version],[override default wxWidgets version [2.6,2.8]])],
-+ [AS_HELP_STRING([--with-wx-version],[override default wxWidgets version [2.8, 3.0]])],
- wx_preference="--version=$withval",
- wx_preference="")
-
-@@ -67,27 +67,48 @@
-
- PKG_CHECK_MODULES(GTK, gtk+-2.0, have_gtk="yes", have_gtk="no")
-
--dnl OS-specific configuration
-+dnl Get wx version
-+wx_version=`${WX_CONFIG} $wxconfigargs --version`
-+
-+dnl OS- and wx-version-specific configuration
-
- AC_CANONICAL_HOST
-
- IMPLEMENTATION="generic"
--case "${host_os}" in
-- darwin*)
-- dnl Mac OS X configuration
-- IMPLEMENTATION="mac"
-+case "${wx_version}" in
-+ 2.8.*)
-+ case "${host_os}" in
-+ darwin*)
-+ dnl Mac OS X configuration
-+ IMPLEMENTATION="mac"
-+ ;;
-+
-+ cygwin*)
-+ dnl Windows/CygWin configuration
-+ IMPLEMENTATION="win"
-+ ;;
-+
-+ *)
-+ if test "$have_gtk" = "yes"; then
-+ AC_DEFINE(HAVE_GTK, 1, [Define to 1 if GTK+ is available.])
-+ IMPLEMENTATION="gtk"
-+ fi
-+ ;;
-+ esac
- ;;
-
-- cygwin*)
-- dnl Windows/CygWin configuration
-- IMPLEMENTATION="win"
-+ 3.0.*)
-+ dnl wx3.0 version for all platforms
-+ IMPLEMENTATION="wx30"
- ;;
-
- *)
-- if test "$have_gtk" = "yes"; then
-- AC_DEFINE(HAVE_GTK, 1, [Define to 1 if GTK+ is available.])
-- IMPLEMENTATION="gtk"
-- fi
-+ wx_list=`${WX_CONFIG} --list`
-+ AC_MSG_ERROR([Unable to locate a suitable configuration of wxWidgets v2.8.x
-+ or v3.0.x. The currently available configurations are listed below. If
-+ necessary, either install the package for your distribution or download a
-+ suitable version of wxWidgets from http://wxwidgets.org.
-+ ${wx_list}])
- ;;
- esac
-
-@@ -96,6 +117,7 @@
- AM_CONDITIONAL([GTK], test "$IMPLEMENTATION" = "gtk")
- AM_CONDITIONAL([MAC], test "$IMPLEMENTATION" = "mac")
- AM_CONDITIONAL([WINDOWS], test "$IMPLEMENTATION" = "win")
-+AM_CONDITIONAL([WX30], test "$IMPLEMENTATION" = "wx30")
-
- echo "Implementation to use: $IMPLEMENTATION"
-
---- /dev/null
-+++ b/lib-src/FileDialog/wx30/FileDialogPrivate.cpp
-@@ -0,0 +1,61 @@
-+#include <wx/wxprec.h>
-+#ifndef WX_PRECOMP
-+# include <wx/wx.h>
-+#endif
-+
-+#include "../FileDialog.h"
-+
-+#include <cassert>
-+
-+#include "wx/event.h"
-+#include "wx/filedlg.h"
-+#include "wx/window.h"
-+
-+
-+FileDialog::FileDialog(wxWindow *parent,
-+ const wxString& message,
-+ const wxString& defaultDir,
-+ const wxString& defaultFile,
-+ const wxString& wildCard,
-+ long style,
-+ const wxPoint& pos,
-+ const wxSize& sz,
-+ const wxString& name)
-+: wxFileDialog(parent, message, defaultDir, defaultFile, wildCard, style, pos, sz, name)
-+{
-+}
-+
-+
-+FileDialog::~FileDialog()
-+{
-+ // intentionally left blank; it's just there to make sure
-+ // we have a virtual destructor (in case of subclassing)
-+}
-+
-+
-+int FileDialog::ShowModal()
-+{
-+ assert (SupportsExtraControl());
-+
-+ if (!m_buttonlabel.IsEmpty()) {
-+ SetExtraControlCreator(&FileDialog::CreateButton);
-+ }
-+
-+ return wxFileDialog::ShowModal();
-+}
-+
-+
-+wxWindow * FileDialog::CreateButton(wxWindow *fileDialogGeneric)
-+{
-+ FileDialog *fileDialog = (FileDialog *) fileDialogGeneric;
-+ wxButton *button = new wxButton(fileDialog, wxID_ANY, fileDialog->m_buttonlabel);
-+ fileDialog->Bind(wxEVT_BUTTON, &FileDialog::OnButton, fileDialog, button->GetId());
-+ return button;
-+}
-+
-+void FileDialog::OnButton(wxCommandEvent& WXUNUSED(event))
-+{
-+ ClickButton(GetFilterIndex());
-+}
-+
-+
---- /dev/null
-+++ b/lib-src/FileDialog/wx30/FileDialogPrivate.h
-@@ -0,0 +1,47 @@
-+#ifndef __FILEDIALOGWX30H__
-+#define __FILEDIALOGWX30H__
-+
-+
-+#include "wx/filedlg.h"
-+
-+
-+class FileDialog : public wxFileDialog
-+{
-+public: // constructors/destructors
-+ FileDialog() { }
-+
-+ FileDialog(wxWindow *parent,
-+ const wxString& message = wxFileSelectorPromptStr,
-+ const wxString& defaultDir = wxEmptyString,
-+ const wxString& defaultFile = wxEmptyString,
-+ const wxString& wildCard = wxFileSelectorDefaultWildcardStr,
-+ long style = wxFD_DEFAULT_STYLE,
-+ const wxPoint& pos = wxDefaultPosition,
-+ const wxSize& sz = wxDefaultSize,
-+ const wxString& name = wxFileDialogNameStr);
-+
-+ virtual ~FileDialog();
-+
-+public: // public methods
-+ virtual void EnableButton(wxString label, fdCallback cb, void *cbdata);
-+
-+ virtual void ClickButton(int index);
-+
-+ virtual int ShowModal();
-+
-+ void OnButton(wxCommandEvent& event);
-+
-+private: // private methods
-+ static wxWindow * CreateButton(wxWindow *fileDialog);
-+
-+private: // attributes
-+ wxString m_buttonlabel;
-+
-+ fdCallback m_callback;
-+
-+ void *m_cbdata;
-+};
-+
-+
-+#endif
-+
---- a/lib-src/lib-widget-extra/configure.ac
-+++ b/lib-src/lib-widget-extra/configure.ac
-@@ -63,12 +63,11 @@
- debug_preference="$enableval",
- debug_preference="no")
-
--dnl AC_ARG_WITH(wx-version,
--dnl [AS_HELP_STRING([--with-wx-version],
--dnl [select wxWidgets version (if both installed) [2.8,]])],
--dnl wx_preference="--version=$withval",
--dnl wx_preference="")
--dnl Right now only support wx 2.8
-+AC_ARG_WITH(wx-version,
-+ [AS_HELP_STRING([--with-wx-version],
-+ [select wxWidgets version (if both installed) [2.8, 3.0]])],
-+ wx_preference="--version=$withval",
-+ wx_preference="")
-
- dnl ----------------------------------------------------
- dnl If user asked for debug, put debug in compiler flags
-@@ -128,19 +127,21 @@
-
- wx_version=`${WX_CONFIG} $wxconfigargs --version`
-
--AC_MSG_NOTICE([Checking that the chosen version of wxWidgets is 2.8.x])
-+AC_MSG_NOTICE([Checking that the chosen version of wxWidgets is 2.8.x or 3.0.x])
-
- case "${wx_version}" in
- 2.8.*)
- echo "Great, you're using wxWidgets ${wx_version}!"
- ;;
-+ 3.0.*)
-+ echo "Great, you're using wxWidgets ${wx_version}!"
-+ ;;
- *)
- wx_list=`${WX_CONFIG} --list`
-- AC_MSG_ERROR([Unable to locate a suitable configuration of wxWidgets v2.8.x or higher.
--The currently available configurations are listed below. If necessary, either
--install the package for your distribution or download the latest version of
--wxWidgets
--from http://wxwidgets.org.
-+ AC_MSG_ERROR([Unable to locate a suitable configuration of wxWidgets v2.8.x
-+or v3.0.x. The currently available configurations are listed below. If
-+necessary, either install the package for your distribution or download a
-+suitable version of wxWidgets from http://wxwidgets.org.
- ${wx_list}])
- esac
-
---- a/src/AudacityApp.cpp
-+++ b/src/AudacityApp.cpp
-@@ -924,7 +924,7 @@
-
- AudacityLogger *AudacityApp::GetLogger()
- {
-- return wxStaticCast(wxLog::GetActiveTarget(), AudacityLogger);
-+ return static_cast<AudacityLogger *>(wxLog::GetActiveTarget());
- }
-
- void AudacityApp::InitLang( const wxString & lang )
-@@ -1295,7 +1295,7 @@
- }
-
- if (option < argc - 1 &&
-- argv[option + 1] &&
-+ !wxString(argv[option + 1]).IsEmpty() && // *argv is of type wxChar* in wx28 and wxString in wx30
- !wxString(wxT("-blocksize")).CmpNoCase(argv[option])) {
- long theBlockSize;
- if (wxString(argv[option + 1]).ToLong(&theBlockSize)) {
---- a/src/AudacityLogger.cpp
-+++ b/src/AudacityLogger.cpp
-@@ -170,9 +170,9 @@
- // loads either the XPM or the windows resource, depending on the platform
- #if !defined(__WXMAC__) && !defined(__WXX11__)
- #if defined(__WXMSW__)
-- wxIcon ic(wxICON(AudacityLogo));
-+ wxIcon ic = wxICON(AudacityLogo);
- #elif defined(__WXGTK__)
-- wxIcon ic(wxICON(AudacityLogoAlpha));
-+ wxIcon ic = wxICON(AudacityLogoAlpha);
- #else
- wxIcon ic;
- ic.CopyFromBitmap(theTheme.Bitmap(bmpAudacityLogo48x48));
---- a/src/Benchmark.cpp
-+++ b/src/Benchmark.cpp
-@@ -394,8 +394,8 @@
- t->GetEndTime();
-
- if (t->GetClipByIndex(0)->GetSequence()->GetNumSamples() != (sampleCount)nChunks * chunkSize) {
-- Printf(wxT("Expected len %d, track len %d.\n"), nChunks * chunkSize,
-- t->GetClipByIndex(0)->GetSequence()->GetNumSamples());
-+ Printf(wxT("Expected len %d, track len %lld.\n"), nChunks * chunkSize,
-+ (long long) t->GetClipByIndex(0)->GetSequence()->GetNumSamples());
- goto fail;
- }
-
-@@ -415,8 +415,8 @@
- Printf(wxT("Trial %d\n"), z);
- Printf(wxT("Cut (%d, %d) failed.\n"), (x0 * chunkSize),
- (x0 + xlen) * chunkSize);
-- Printf(wxT("Expected len %d, track len %d.\n"), nChunks * chunkSize,
-- t->GetClipByIndex(0)->GetSequence()->GetNumSamples());
-+ Printf(wxT("Expected len %d, track len %lld.\n"), nChunks * chunkSize,
-+ (long long) t->GetClipByIndex(0)->GetSequence()->GetNumSamples());
- goto fail;
- }
-
-@@ -432,8 +432,8 @@
-
- if (t->GetClipByIndex(0)->GetSequence()->GetNumSamples() != (sampleCount) nChunks * chunkSize) {
- Printf(wxT("Trial %d\n"), z);
-- Printf(wxT("Expected len %d, track len %d.\n"), nChunks * chunkSize,
-- t->GetClipByIndex(0)->GetSequence()->GetNumSamples());
-+ Printf(wxT("Expected len %d, track len %lld.\n"), nChunks * chunkSize,
-+ (long long) t->GetClipByIndex(0)->GetSequence()->GetNumSamples());
- goto fail;
- }
- // Copy
---- a/src/CaptureEvents.cpp
-+++ b/src/CaptureEvents.cpp
-@@ -17,7 +17,7 @@
- #include "Audacity.h"
- #include "CaptureEvents.h"
-
--#if defined(__WXGTK__) && defined(HAVE_GTK)
-+#if defined(__WXGTK__) && defined(HAVE_GTK) && wxMAJOR_VERSION < 3
- // As of wxGTK 2.8.9, there is a problem in the wxClipboard class that
- // allows recursive event processing. This problem has been corrected
- // by wxWidgets 2.9+. However, this han't made it into a release yet,
---- a/src/CaptureEvents.h
-+++ b/src/CaptureEvents.h
-@@ -17,7 +17,7 @@
- #ifndef _AUDACITY_CAPTURE_EVENTS_
- #define _AUDACITY_CAPTURE_EVENTS_
-
--#if defined(__WXGTK__) && defined(HAVE_GTK)
-+#if defined(__WXGTK__) && defined(HAVE_GTK) && wxMAJOR_VERSION < 3
- // As of wxGTK 2.8.9, there is a problem in the wxClipboard class that
- // allows recursive event processing. This problem has been corrected
- // by wxWidgets 2.9+. However, this han't made it into a release yet,
---- a/src/DirManager.cpp
-+++ b/src/DirManager.cpp
-@@ -1417,7 +1417,7 @@
- {
- wxString msgA =
- _("Project check of \"%s\" folder \
--\ndetected %d missing external audio file(s) \
-+\ndetected %lld missing external audio file(s) \
- \n('aliased files'). There is no way for Audacity \
- \nto recover these files automatically. \
- \n\nIf you choose the first or second option below, \
-@@ -1429,7 +1429,7 @@
- \nproject in its current state, unless you \"Close \
- \nproject immediately\" on further error alerts.");
- wxString msg;
-- msg.Printf(msgA, this->projName.c_str(), missingAliasedFilePathHash.size());
-+ msg.Printf(msgA, this->projName.c_str(), (long long) missingAliasedFilePathHash.size());
- const wxChar *buttons[] =
- {_("Close project immediately with no changes"),
- _("Treat missing audio as silence (this session only)"),
-@@ -1487,11 +1487,11 @@
- {
- wxString msgA =
- _("Project check of \"%s\" folder \
--\ndetected %d missing alias (.auf) blockfile(s). \
-+\ndetected %lld missing alias (.auf) blockfile(s). \
- \nAudacity can fully regenerate these files \
- \nfrom the current audio in the project.");
- wxString msg;
-- msg.Printf(msgA, this->projName.c_str(), missingAUFHash.size());
-+ msg.Printf(msgA, this->projName.c_str(), (long long) missingAUFHash.size());
- const wxChar *buttons[] = {_("Regenerate alias summary files (safe and recommended)"),
- _("Fill in silence for missing display data (this session only)"),
- _("Close project immediately with no further changes"),
-@@ -1538,7 +1538,7 @@
- {
- wxString msgA =
- _("Project check of \"%s\" folder \
--\ndetected %d missing audio data (.au) blockfile(s), \
-+\ndetected %lld missing audio data (.au) blockfile(s), \
- \nprobably due to a bug, system crash, or accidental \
- \ndeletion. There is no way for Audacity to recover \
- \nthese missing files automatically. \
-@@ -1548,7 +1548,7 @@
- \n\nNote that for the second option, the waveform \
- \nmay not show silence.");
- wxString msg;
-- msg.Printf(msgA, this->projName.c_str(), missingAUHash.size());
-+ msg.Printf(msgA, this->projName.c_str(), (long long) missingAUHash.size());
- const wxChar *buttons[] =
- {_("Close project immediately with no further changes"),
- _("Treat missing audio as silence (this session only)"),
---- a/src/LabelTrack.cpp
-+++ b/src/LabelTrack.cpp
-@@ -957,7 +957,7 @@
-
- // copy data onto clipboard
- if (wxTheClipboard->Open()) {
--#if defined(__WXGTK__) && defined(HAVE_GTK)
-+#if defined(__WXGTK__) && defined(HAVE_GTK) && wxMAJOR_VERSION < 3
- CaptureEvents capture;
- #endif
- wxTheClipboard->SetData(new wxTextDataObject(data));
-@@ -992,7 +992,7 @@
-
- // copy the data on clipboard
- if (wxTheClipboard->Open()) {
--#if defined(__WXGTK__) && defined(HAVE_GTK)
-+#if defined(__WXGTK__) && defined(HAVE_GTK) && wxMAJOR_VERSION < 3
- CaptureEvents capture;
- #endif
- wxTheClipboard->SetData(new wxTextDataObject(data));
-@@ -1017,7 +1017,7 @@
- // if text data is available
- if (IsTextClipSupported()) {
- if (wxTheClipboard->Open()) {
--#if defined(__WXGTK__) && HAVE_GTK
-+#if defined(__WXGTK__) && HAVE_GTK && wxMAJOR_VERSION < 3
- CaptureEvents capture;
- #endif
- wxTextDataObject data;
-@@ -1074,7 +1074,7 @@
- /// @return true if the text data is available in the clipboard, false otherwise
- bool LabelTrack::IsTextClipSupported()
- {
--#if defined(__WXGTK__) && defined(HAVE_GTK)
-+#if defined(__WXGTK__) && defined(HAVE_GTK) && wxMAJOR_VERSION < 3
- CaptureEvents capture;
- #endif
-
---- a/src/LyricsWindow.cpp
-+++ b/src/LyricsWindow.cpp
-@@ -68,9 +68,9 @@
- // loads either the XPM or the windows resource, depending on the platform
- #if !defined(__WXMAC__) && !defined(__WXX11__)
- #ifdef __WXMSW__
-- wxIcon ic(wxICON(AudacityLogo));
-+ wxIcon ic = wxICON(AudacityLogo);
- #else
-- wxIcon ic(wxICON(AudacityLogo48x48));
-+ wxIcon ic = wxICON(AudacityLogo48x48);
- #endif
- SetIcon(ic);
- #endif
---- 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()
-@@ -5871,7 +5871,7 @@
- wxArrayString rates;
- wxComboBox *cb;
-
-- rate.Printf(wxT("%d"), lrint(mRate));
-+ rate.Printf(wxT("%ld"), lrint(mRate));
-
- rates.Add(wxT("8000"));
- rates.Add(wxT("11025"));
---- a/src/MixerBoard.cpp
-+++ b/src/MixerBoard.cpp
-@@ -1723,9 +1723,9 @@
- // loads either the XPM or the windows resource, depending on the platform
- #if !defined(__WXMAC__) && !defined(__WXX11__)
- #ifdef __WXMSW__
-- wxIcon ic(wxICON(AudacityLogo));
-+ wxIcon ic = wxICON(AudacityLogo);
- #else
-- wxIcon ic(wxICON(AudacityLogo48x48));
-+ wxIcon ic = wxICON(AudacityLogo48x48);
- #endif
- SetIcon(ic);
- #endif
---- a/src/PitchName.cpp
-+++ b/src/PitchName.cpp
-@@ -20,6 +20,10 @@
- #include <math.h>
- #include <stdio.h>
-
-+#ifndef WX_PRECOMP
-+# include "wx/wx.h"
-+#endif
-+
- #include "PitchName.h"
-
-
---- a/src/PlatformCompatibility.cpp
-+++ b/src/PlatformCompatibility.cpp
-@@ -20,6 +20,7 @@
- #include <wx/filename.h>
- #include <wx/stdpaths.h>
- #include <wx/app.h>
-+#include <wx/version.h>
-
- #include "AudacityApp.h"
- #include "PlatformCompatibility.h"
-@@ -37,7 +38,11 @@
- static wxString path;
-
- if (!found) {
-+#if wxMAJOR_VERSION < 3
- wxStandardPaths std;
-+#else
-+ wxStandardPaths std(wxStandardPaths::Get());
-+#endif
-
- path = std.GetExecutablePath();
-
-@@ -65,4 +70,4 @@
- #else
- return filePath;
- #endif
--}
-\ No newline at end of file
-+}
---- a/src/Profiler.cpp
-+++ b/src/Profiler.cpp
-@@ -22,6 +22,9 @@
-
- #include "Profiler.h"
-
-+#include <cstdio>
-+#include <cstring>
-+
- ///write to a profile at the end of the test.
- Profiler::~Profiler()
- {
---- a/src/Project.cpp
-+++ b/src/Project.cpp
-@@ -79,7 +79,6 @@
- #include <wx/string.h>
- #include <wx/textfile.h>
- #include <wx/timer.h>
--#include <wx/generic/filedlgg.h>
- #include <wx/display.h>
-
- #include <wx/arrimpl.cpp> // this allows for creation of wxObjArray
-@@ -704,6 +703,7 @@
- EVT_MOUSE_EVENTS(AudacityProject::OnMouseEvent)
- EVT_CLOSE(AudacityProject::OnCloseWindow)
- EVT_SIZE(AudacityProject::OnSize)
-+ EVT_SHOW(AudacityProject::OnShow)
- EVT_MOVE(AudacityProject::OnMove)
- EVT_ACTIVATE(AudacityProject::OnActivate)
- EVT_COMMAND_SCROLL_LINEUP(HSBarID, AudacityProject::OnScrollLeftButton)
-@@ -763,7 +763,8 @@
- mLastEffect(NULL),
- mLastEffectType(0),
- mTimerRecordCanceled(false),
-- mMenuClose(false)
-+ mMenuClose(false),
-+ mShownOnce(false)
- {
- int widths[] = {-2, -1};
- mStatusBar = CreateStatusBar(2);
-@@ -985,9 +986,9 @@
- // loads either the XPM or the windows resource, depending on the platform
- #if !defined(__WXMAC__) && !defined(__WXX11__)
- #if defined(__WXMSW__)
-- wxIcon ic(wxICON(AudacityLogo));
-+ wxIcon ic = wxICON(AudacityLogo);
- #elif defined(__WXGTK__)
-- wxIcon ic(wxICON(AudacityLogoAlpha));
-+ wxIcon ic = wxICON(AudacityLogoAlpha);
- #else
- wxIcon ic;
- ic.CopyFromBitmap(theTheme.Bitmap(bmpAudacityLogo48x48));
-@@ -1392,6 +1393,12 @@
-
- int panelWidth, panelHeight;
- mTrackPanel->GetTracksUsableArea(&panelWidth, &panelHeight);
-+ if (panelWidth < 0) {
-+ panelWidth = 0;
-+ }
-+ if (panelHeight < 0) {
-+ panelHeight = 0;
-+ }
-
- // Add 1/4 of a screen of blank space to the end of the longest track
- mViewInfo.screen = ((double) panelWidth) / mViewInfo.zoom;
-@@ -1603,9 +1610,26 @@
-
- void AudacityProject::OnSize(wxSizeEvent & event)
- {
-- HandleResize();
-- if (!this->IsMaximized() && !this->IsIconized())
-- SetNormalizedWindowState(this->GetRect());
-+ if (mShownOnce) {
-+ HandleResize();
-+ if (!this->IsMaximized() && !this->IsIconized())
-+ SetNormalizedWindowState(this->GetRect());
-+ }
-+ event.Skip();
-+}
-+
-+void AudacityProject::OnShow(wxShowEvent & event)
-+{
-+ // Remember that the window has been shown at least once
-+ mShownOnce = true;
-+
-+ // Call "OnSize" again (the previous calls to "OnSize" might not
-+ // have succeeded because some methods are not available before
-+ // the actual creation/showing of the window)
-+ wxSizeEvent sizeEvent(GetSize());
-+ OnSize(sizeEvent);
-+
-+ // Further processing by default handlers
- event.Skip();
- }
-
-@@ -1717,7 +1741,7 @@
- wxCommandEvent e(EVT_CAPTURE_KEY);
- e.SetEventObject(&event);
-
-- if (w->ProcessEvent(e)) {
-+ if (w->GetEventHandler()->ProcessEvent(e)) {
- return false;
- }
- }
---- a/src/Project.h
-+++ b/src/Project.h
-@@ -254,6 +254,7 @@
- void OnMouseEvent(wxMouseEvent & event);
- void OnIconize(wxIconizeEvent &event);
- void OnSize(wxSizeEvent & event);
-+ void OnShow(wxShowEvent & event);
- void OnMove(wxMoveEvent & event);
- void OnScroll(wxScrollEvent & event);
- void OnCloseWindow(wxCloseEvent & event);
-@@ -499,6 +500,8 @@
- // dialog for missing alias warnings
- wxDialog *mAliasMissingWarningDialog;
-
-+ bool mShownOnce;
-+
- public:
- ToolManager *mToolManager;
- bool mShowSplashScreen;
---- a/src/Sequence.cpp
-+++ b/src/Sequence.cpp
-@@ -1048,7 +1048,7 @@
- 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);
-+ wxLogWarning(sMsg);
- bb->f->SetLength(mMaxSamples);
- }
-
-@@ -1843,10 +1843,10 @@
- for (i = 0; i < mBlock->GetCount(); i++) {
- SeqBlock* pSeqBlock = mBlock->Item(i);
- *dest += wxString::Format
-- (wxT(" Block %3d: start %8d, len %8d, refs %d, "),
-+ (wxT(" Block %3u: start %8lld, len %8lld, refs %d, "),
- i,
-- pSeqBlock->start,
-- pSeqBlock->f ? pSeqBlock->f->GetLength() : 0,
-+ (long long) pSeqBlock->start,
-+ pSeqBlock->f ? (long long) pSeqBlock->f->GetLength() : 0,
- pSeqBlock->f ? mDirManager->GetRefCount(pSeqBlock->f) : 0);
-
- if (pSeqBlock->f)
-@@ -1864,7 +1864,7 @@
- }
- if (pos != mNumSamples)
- *dest += wxString::Format
-- (wxT("ERROR mNumSamples = %d\n"), mNumSamples);
-+ (wxT("ERROR mNumSamples = %lld\n"), (long long) mNumSamples);
- }
-
- // static
---- a/src/Shuttle.cpp
-+++ b/src/Shuttle.cpp
-@@ -189,7 +189,7 @@
- else
- {
- /// \todo Fix for long long values.
-- mValueString = wxString::Format(wxT("%d"),iValue);
-+ mValueString = wxString::Format(wxT("%lld"), (long long) iValue);
- return ExchangeWithMaster( Name );
- }
- return true;
---- 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;
-@@ -7583,7 +7583,7 @@
- Track *partner = mTracks->GetLink(pTrack);
- if (partner)
- ((WaveTrack *) partner)->SetRate(rate);
-- MakeParentPushState(wxString::Format(_("Changed '%s' to %d Hz"),
-+ MakeParentPushState(wxString::Format(_("Changed '%s' to %f Hz"),
- pTrack->GetName().c_str(), rate),
- _("Rate Change"));
- }
-@@ -7723,7 +7723,7 @@
- wxArrayString rates;
- wxComboBox *cb;
-
-- rate.Printf(wxT("%d"), lrint(((WaveTrack *) mPopupMenuTarget)->GetRate()));
-+ rate.Printf(wxT("%ld"), lrint(((WaveTrack *) mPopupMenuTarget)->GetRate()));
-
- rates.Add(wxT("8000"));
- rates.Add(wxT("11025"));
-@@ -7810,7 +7810,7 @@
- if( lower >= 10 && upper <= 1000 && lower < upper ) {
- t->SetRangeLower((double)lower / 100.0);
- t->SetRangeUpper((double)upper / 100.0);
-- MakeParentPushState(wxString::Format(_("Set range to '%d' - '%d'"),
-+ MakeParentPushState(wxString::Format(_("Set range to '%ld' - '%ld'"),
- lower,
- upper),
- /* i18n-hint: (verb)*/
-@@ -8065,7 +8065,7 @@
- /* i18n-hint: (noun) The size of the typeface*/
- S.AddPrompt(_("Face size"));
- sc = new wxSpinCtrl(&dlg, wxID_ANY,
-- wxString::Format(wxT("%d"), fontsize),
-+ wxString::Format(wxT("%ld"), fontsize),
- wxDefaultPosition,
- wxDefaultSize,
- wxSP_ARROW_KEYS,
-@@ -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/blockfile/SimpleBlockFile.cpp
-+++ b/src/blockfile/SimpleBlockFile.cpp
-@@ -207,7 +207,7 @@
- size_t nBytesWritten = file.Write(&header, nBytesToWrite);
- if (nBytesWritten != nBytesToWrite)
- {
-- wxLogDebug(wxT("Wrote %d bytes, expected %d."), nBytesWritten, nBytesToWrite);
-+ wxLogDebug(wxT("Wrote %lld bytes, expected %lld."), (long long) nBytesWritten, (long long) nBytesToWrite);
- return false;
- }
-
-@@ -215,7 +215,7 @@
- nBytesWritten = file.Write(summaryData, nBytesToWrite);
- if (nBytesWritten != nBytesToWrite)
- {
-- wxLogDebug(wxT("Wrote %d bytes, expected %d."), nBytesWritten, nBytesToWrite);
-+ wxLogDebug(wxT("Wrote %lld bytes, expected %lld."), (long long) nBytesWritten, (long long) nBytesToWrite);
- return false;
- }
-
-@@ -237,7 +237,7 @@
- #endif
- if (nBytesWritten != nBytesToWrite)
- {
-- wxLogDebug(wxT("Wrote %d bytes, expected %d."), nBytesWritten, nBytesToWrite);
-+ wxLogDebug(wxT("Wrote %lld bytes, expected %lld."), (long long) nBytesWritten, (long long) nBytesToWrite);
- return false;
- }
- }
-@@ -250,7 +250,7 @@
- nBytesWritten = file.Write(sampleData, nBytesToWrite);
- if (nBytesWritten != nBytesToWrite)
- {
-- wxLogDebug(wxT("Wrote %d bytes, expected %d."), nBytesWritten, nBytesToWrite);
-+ wxLogDebug(wxT("Wrote %lld bytes, expected %lld."), (long long) nBytesWritten, (long long) nBytesToWrite);
- return false;
- }
- }
---- a/src/commands/CompareAudioCommand.cpp
-+++ b/src/commands/CompareAudioCommand.cpp
-@@ -135,8 +135,8 @@
-
- // Output the results
- double errorSeconds = mTrack0->LongSamplesToTime(errorCount);
-- Status(wxString::Format(wxT("%i"), errorCount));
-+ Status(wxString::Format(wxT("%li"), errorCount));
- Status(wxString::Format(wxT("%.4f"), errorSeconds));
-- Status(wxString::Format(wxT("Finished comparison: %i samples (%.3f seconds) exceeded the error threshold of %f."), errorCount, errorSeconds, errorThreshold));
-+ Status(wxString::Format(wxT("Finished comparison: %li samples (%.3f seconds) exceeded the error threshold of %f."), errorCount, errorSeconds, errorThreshold));
- return true;
- }
---- 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/commands/Validators.h
-+++ b/src/commands/Validators.h
-@@ -201,7 +201,7 @@
- }
- virtual wxString GetDescription() const
- {
-- return wxString::Format(wxT("between %d and %d"), mLower, mUpper);
-+ return wxString::Format(wxT("between %f and %f"), mLower, mUpper);
- }
- virtual Validator *GetClone() const
- {
---- 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.cpp
-+++ b/src/effects/Compressor.cpp
-@@ -38,6 +38,7 @@
- #include <wx/textdlg.h>
- #include <wx/brush.h>
- #include <wx/image.h>
-+#include <wx/dcclient.h>
- #include <wx/dcmemory.h>
-
- #include "Compressor.h"
---- a/src/effects/FindClipping.cpp
-+++ b/src/effects/FindClipping.cpp
-@@ -183,7 +183,7 @@
- if (stoprun >= mStop) {
- l->AddLabel(startTime,
- t->LongSamplesToTime(start + s - mStop),
-- wxString::Format(wxT("%lld of %lld"), startrun, samps - mStop));
-+ wxString::Format(wxT("%lld of %lld"), (long long) startrun, (long long) (samps - mStop)));
- startrun = 0;
- stoprun = 0;
- samps = 0;
---- a/src/effects/ladspa/LadspaEffect.cpp
-+++ b/src/effects/ladspa/LadspaEffect.cpp
-@@ -518,16 +518,14 @@
- this->mData = data;
- this->inputControls = inputControls;
- this->sampleRate = sampleRate;
-- #ifdef __WXMSW__
-- // On Windows, for some reason, wxWidgets calls OnTextCtrl during creation
-- // of the text control, and LadspaEffectDialog::OnTextCtrl calls HandleText,
-- // which assumes all the fields have been initialized.
-- // This can give us a bad pointer crash, so manipulate inSlider to
-- // no-op HandleText during creation.
-- inSlider = true;
-- #else
-- inSlider = false;
-- #endif
-+
-+ // wxWidgets calls OnTextCtrl during creation
-+ // of the text control, and LadspaEffectDialog::OnTextCtrl calls HandleText,
-+ // which assumes all the fields have been initialized.
-+ // This can give us a bad pointer crash, so manipulate inSlider to
-+ // no-op HandleText during creation.
-+ inSlider = true;
-+
- inText = false;
-
- toggles = new wxCheckBox*[mData->PortCount];
---- a/src/effects/ladspa/LoadLadspa.cpp
-+++ b/src/effects/ladspa/LoadLadspa.cpp
-@@ -147,7 +147,7 @@
- data = mainFn(index);
- while(data) {
-
-- wxString uniqid = wxString::Format(wxT("%08x-%s"), data->UniqueID, LAT1CTOWX(data->Label).c_str());
-+ wxString uniqid = wxString::Format(wxT("%08x-%s"), (unsigned int) data->UniqueID, LAT1CTOWX(data->Label).c_str());
- if (uniq.Index(uniqid) == wxNOT_FOUND) {
- uniq.Add(uniqid);
- std::set<wxString> categories;
---- 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);
-@@ -1242,13 +1242,7 @@
- wxFloatingPointValidator<double> vld(12, &ctrl->val);
- vld.SetRange(-FLT_MAX, FLT_MAX);
- // Set number of decimal places
-- if (ctrl->high - ctrl->low < 10) {
-- vld.SetStyle(wxNUM_VAL_THREE_TRAILING_ZEROES);
-- } else if (ctrl->high - ctrl->low < 100) {
-- vld.SetStyle(wxNUM_VAL_TWO_TRAILING_ZEROES);
-- } else {
-- vld.SetStyle(wxNUM_VAL_ONE_TRAILING_ZERO);
-- }
-+ vld.SetStyle(wxNUM_VAL_NO_TRAILING_ZEROES);
- item->SetValidator(vld);
- }
- else {
---- a/src/export/ExportFFmpeg.cpp
-+++ b/src/export/ExportFFmpeg.cpp
-@@ -452,7 +452,7 @@
- if (codec == NULL)
- {
- wxLogError(wxT("FFmpeg : ERROR - Can't find audio codec 0x%x."),mEncAudioCodecCtx->codec_id);
-- wxMessageBox(wxString::Format(_("FFmpeg cannot find audio codec 0x%x.\nSupport for this codec is probably not compiled in."),mEncAudioCodecCtx->codec_id));
-+ wxMessageBox(wxString::Format(_("FFmpeg cannot find audio codec 0x%x.\nSupport for this codec is probably not compiled in."), (unsigned int) mEncAudioCodecCtx->codec_id));
- return false;
- }
-
---- a/src/export/ExportFFmpegDialogs.cpp
-+++ b/src/export/ExportFFmpegDialogs.cpp
-@@ -1846,7 +1846,7 @@
- mCodecName->SetLabel(wxString(_("Failed to find the codec")));
- return;
- }
-- mCodecName->SetLabel(wxString::Format(wxT("[%d] %s"),cdc->id,selcdclong->c_str()));
-+ mCodecName->SetLabel(wxString::Format(wxT("[%d] %s"), (int) cdc->id,selcdclong->c_str()));
-
- if (selfmt != NULL)
- {
---- a/src/export/ExportMP2.cpp
-+++ b/src/export/ExportMP2.cpp
-@@ -276,8 +276,8 @@
-
- ProgressDialog *progress = new ProgressDialog(wxFileName(fName).GetName(),
- selectionOnly ?
-- wxString::Format(_("Exporting selected audio at %d kbps"), bitrate) :
-- wxString::Format(_("Exporting entire file at %d kbps"), bitrate));
-+ wxString::Format(_("Exporting selected audio at %ld kbps"), bitrate) :
-+ wxString::Format(_("Exporting entire file at %ld kbps"), bitrate));
-
- int updateResult = eProgressSuccess;
- while(updateResult == eProgressSuccess) {
---- a/src/export/ExportMP3.cpp
-+++ b/src/export/ExportMP3.cpp
-@@ -1799,7 +1799,7 @@
-
- if (bytes < 0) {
- wxString msg;
-- msg.Printf(_("Error %d returned from MP3 encoder"), bytes);
-+ msg.Printf(_("Error %ld returned from MP3 encoder"), bytes);
- wxMessageBox(msg);
- break;
- }
---- a/src/export/ExportMultiple.cpp
-+++ b/src/export/ExportMultiple.cpp
-@@ -535,14 +535,14 @@
- {
- wxString msg;
- msg.Printf(
-- ok == eProgressSuccess ? _("Successfully exported the following %ld file(s).")
-- : (ok == eProgressFailed ? _("Something went wrong after exporting the following %ld file(s).")
-- : (ok == eProgressCancelled ? _("Export canceled after exporting the following %ld file(s).")
-- : (ok == eProgressStopped ? _("Export stopped after exporting the following %ld file(s).")
-- : _("Something went really wrong after exporting the following %ld file(s).")
-+ ok == eProgressSuccess ? _("Successfully exported the following %lld file(s).")
-+ : (ok == eProgressFailed ? _("Something went wrong after exporting the following %lld file(s).")
-+ : (ok == eProgressCancelled ? _("Export canceled after exporting the following %lld file(s).")
-+ : (ok == eProgressStopped ? _("Export stopped after exporting the following %lld file(s).")
-+ : _("Something went really wrong after exporting the following %lld file(s).")
- )
- )
-- ), mExported.GetCount());
-+ ), (long long) mExported.GetCount());
-
- wxString FileList;
- for (size_t i = 0; i < mExported.GetCount(); i++) {
---- a/src/import/Import.cpp
-+++ b/src/import/Import.cpp
-@@ -279,7 +279,7 @@
- val.Append (wxT(":"));
- }
- }
-- name.Printf (wxT("/ExtImportItems/Item%d"), i);
-+ name.Printf (wxT("/ExtImportItems/Item%lld"), (long long) i);
- gPrefs->Write (name, val);
- gPrefs->Flush();
- }
-@@ -288,7 +288,7 @@
- more to delete.*/
- i = this->mExtImportItems->Count();
- do {
-- name.Printf (wxT("/ExtImportItems/Item%d"), i);
-+ name.Printf (wxT("/ExtImportItems/Item%lld"), (long long) i);
- // No item to delete? Then it's time to finish.
- if (!gPrefs->Read(name, &val))
- break;
---- a/src/import/ImportFFmpeg.cpp
-+++ b/src/import/ImportFFmpeg.cpp
-@@ -440,7 +440,7 @@
- {
- lang.FromUTF8(tag->value);
- }
-- strinfo.Printf(_("Index[%02x] Codec[%S], Language[%S], Bitrate[%S], Channels[%d], Duration[%d]"),sc->m_stream->id,codec->name,lang.c_str(),bitrate.c_str(),sc->m_stream->codec->channels, duration);
-+ strinfo.Printf(_("Index[%02x] Codec[%s], Language[%s], Bitrate[%s], Channels[%d], Duration[%d]"),sc->m_stream->id,codec->name,lang.c_str(),bitrate.c_str(),sc->m_stream->codec->channels, duration);
- mStreamInfo->Add(strinfo);
- mScs[mNumStreams++] = sc;
- }
-@@ -541,7 +541,7 @@
- if (mScs[s]->m_stream->start_time != int64_t(AV_NOPTS_VALUE) && mScs[s]->m_stream->start_time > 0)
- {
- stream_delay = mScs[s]->m_stream->start_time;
-- wxLogDebug(wxT("Stream %d start_time = %d, that would be %f milliseconds."), s, mScs[s]->m_stream->start_time, double(mScs[s]->m_stream->start_time)/AV_TIME_BASE*1000);
-+ wxLogDebug(wxT("Stream %d start_time = %lld, that would be %f milliseconds."), s, (long long) mScs[s]->m_stream->start_time, double(mScs[s]->m_stream->start_time)/AV_TIME_BASE*1000);
- }
- if (stream_delay != 0)
- {
---- a/src/import/ImportGStreamer.cpp
-+++ b/src/import/ImportGStreamer.cpp
-@@ -983,9 +983,9 @@
- // Create stream info string
- wxString strinfo;
- strinfo.Printf(wxT("Index[%02d], Type[%s], Channels[%d], Rate[%d]"),
-- i,
-+ (unsigned int) i,
- wxString::FromUTF8(c->mType).c_str(),
-- c->mNumChannels,
-+ (int) c->mNumChannels,
- (int) c->mSampleRate);
- mStreamInfo.Add(strinfo);
- }
-@@ -1371,7 +1371,7 @@
- }
- else if (G_VALUE_HOLDS_UINT(val))
- {
-- string.Printf(wxT("%u"), g_value_get_uint(val));
-+ string.Printf(wxT("%u"), (unsigned int) g_value_get_uint(val));
- }
- else if (G_VALUE_HOLDS_DOUBLE(val))
- {
---- a/src/import/ImportOGG.cpp
-+++ b/src/import/ImportOGG.cpp
-@@ -109,7 +109,7 @@
- for (int i = 0; i < vorbisFile->links; i++)
- {
- wxString strinfo;
-- strinfo.Printf(wxT("Index[%02x] Version[%d], Channels[%d], Rate[%d]"),i,vorbisFile->vi[i].version,vorbisFile->vi[i].channels,vorbisFile->vi[i].rate);
-+ strinfo.Printf(wxT("Index[%02x] Version[%d], Channels[%d], Rate[%ld]"), (unsigned int) i,vorbisFile->vi[i].version,vorbisFile->vi[i].channels,vorbisFile->vi[i].rate);
- mStreamInfo->Add(strinfo);
- mStreamUsage[i] = 0;
- }
---- 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;
- }
-@@ -996,7 +996,7 @@
- nevent.SetDirection(!e.ShiftDown());
- nevent.SetEventObject(t);
- nevent.SetCurrentFocus(t);
-- t->GetParent()->ProcessEvent(nevent);
-+ t->GetParent()->GetEventHandler()->ProcessEvent(nevent);
-
- return;
- }
---- a/src/prefs/PrefsDialog.cpp
-+++ b/src/prefs/PrefsDialog.cpp
-@@ -185,8 +185,6 @@
- Fit();
- wxSize sz = GetSize();
-
-- wxASSERT_MSG(sz.x <= 800 && sz.y <= 600, wxT("Preferences dialog exceeds max size"));
--
- if (sz.x > 800) {
- sz.x = 800;
- }
---- a/src/prefs/QualityPrefs.cpp
-+++ b/src/prefs/QualityPrefs.cpp
-@@ -162,13 +162,13 @@
- {
- S.StartMultiColumn(2, wxEXPAND);
- {
-- S.SetStretchyCol(2);
-+ S.SetStretchyCol(1); // 2nd column (= index 1) is stretchy
-
- S.TieChoice(_("Sample Rate Con&verter:"),
- Resample::GetFastMethodKey(),
- Resample::GetFastMethodDefault(),
- mConverterNames,
-- mConverterLabels),
-+ mConverterLabels);
- S.SetSizeHints(mConverterNames);
-
- S.TieChoice(_("&Dither:"),
---- a/src/toolbars/DeviceToolBar.cpp
-+++ b/src/toolbars/DeviceToolBar.cpp
-@@ -71,9 +71,7 @@
- {
- ToolBar::Create(parent);
-
-- // Simulate a size event to set initial meter placement/size
-- wxSizeEvent dummy;
-- OnSize(dummy);
-+ Layout();
- }
-
- void DeviceToolBar::RecreateTipWindows()
-@@ -618,7 +616,7 @@
- name = _("2 (Stereo) Recording Channels");
- }
- else {
-- name = wxString::Format(wxT("%d"), j + 1);
-+ name = wxString::Format(wxT("%lld"), (long long) (j + 1));
- }
- mInputChannels->Append(name);
- }
---- a/src/toolbars/ToolsToolBar.cpp
-+++ b/src/toolbars/ToolsToolBar.cpp
-@@ -59,7 +59,7 @@
-
- // 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] = {
-+static const wxString 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"),
---- 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/dcclient.h>
- #include <wx/dcmemory.h>
- #include <wx/log.h>
- #include <wx/dragimag.h>
---- a/src/widgets/FileHistory.cpp
-+++ b/src/widgets/FileHistory.cpp
-@@ -142,7 +142,7 @@
- // Stored in reverse order
- int n = mHistory.GetCount() - 1;
- for (size_t i = 1; i <= mHistory.GetCount(); i++) {
-- config.Write(wxString::Format(wxT("file%02d"), i), mHistory[n--]);
-+ config.Write(wxString::Format(wxT("file%02d"), (int) i), mHistory[n--]);
- }
-
- config.SetPath(wxT(".."));
---- 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
-@@ -71,7 +71,8 @@
- {
- wxGridTableBase *table = grid->GetTable();
-
-- table->GetValue(row, col).ToDouble(&mOld);
-+ mOldString = table->GetValue(row, col);
-+ mOldString.ToDouble(&mOld);
-
- GetTimeCtrl()->SetTimeValue(mOld);
- GetTimeCtrl()->EnableMenu();
-@@ -81,16 +82,32 @@
-
- bool TimeEditor::EndEdit(int row, int col, wxGrid *grid)
- {
-+ wxString newvalue;
-+ bool changed = EndEdit(row, col, grid, mOldString, &newvalue);
-+ if (changed) {
-+ ApplyEdit(row, col, grid);
-+ }
-+ return changed;
-+}
-+
-+bool TimeEditor::EndEdit(int row, int col, const wxGrid *grid, const wxString &oldval, wxString *newval)
-+{
- double newtime = GetTimeCtrl()->GetTimeValue();
- bool changed = newtime != mOld;
-
- if (changed) {
-- grid->GetTable()->SetValue(row, col, wxString::Format(wxT("%g"), newtime));
-+ mValueAsString = wxString::Format(wxT("%g"), newtime);
-+ *newval = mValueAsString;
- }
-
- return changed;
- }
-
-+void TimeEditor::ApplyEdit(int row, int col, wxGrid *grid)
-+{
-+ grid->GetTable()->SetValue(row, col, mValueAsString);
-+}
-+
- void TimeEditor::Reset()
- {
- GetTimeCtrl()->SetTimeValue(mOld);
-@@ -295,8 +312,19 @@
- Choice()->SetFocus();
- }
-
-+bool ChoiceEditor::EndEdit(int row, int col, wxGrid *grid)
-+{
-+ wxString newvalue;
-+ bool changed = EndEdit(row, col, grid, mOld, &newvalue);
-+ if (changed) {
-+ ApplyEdit(row, col, grid);
-+ }
-+ return changed;
-+}
-+
- bool ChoiceEditor::EndEdit(int row, int col,
-- wxGrid* grid)
-+ const wxGrid* grid,
-+ const wxString &oldval, wxString *newval)
- {
- int sel = Choice()->GetSelection();
-
-@@ -307,12 +335,20 @@
- }
-
- wxString val = mChoices[sel];
-- if (val == mOld)
-- return false;
-+ bool changed = val != mOld;
-+
-+ if (changed)
-+ {
-+ mValueAsString = val;
-+ *newval = val;
-+ }
-
-- grid->GetTable()->SetValue(row, col, val);
-+ return changed;
-+}
-
-- return true;
-+void ChoiceEditor::ApplyEdit(int row, int col, wxGrid *grid)
-+{
-+ grid->GetTable()->SetValue(row, col, mValueAsString);
- }
-
- void ChoiceEditor::Reset()
-@@ -491,7 +527,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,8 +52,13 @@
- void SetSize(const wxRect &rect);
-
- void BeginEdit(int row, int col, wxGrid *grid);
-+
- bool EndEdit(int row, int col, wxGrid *grid);
-
-+ bool EndEdit(int row, int col, const wxGrid *grid, const wxString &oldval, wxString *newval);
-+
-+ void ApplyEdit(int row, int col, wxGrid *grid);
-+
- void Reset();
-
- wxString GetFormat();
-@@ -71,6 +76,8 @@
- wxString mFormat;
- double mRate;
- double mOld;
-+ wxString mOldString;
-+ wxString mValueAsString;
- };
-
- // ----------------------------------------------------------------------------
-@@ -124,8 +131,13 @@
- void SetSize(const wxRect &rect);
-
- void BeginEdit(int row, int col, wxGrid *grid);
-+
- bool EndEdit(int row, int col, wxGrid *grid);
-
-+ bool EndEdit(int row, int col, const wxGrid *grid, const wxString &oldval, wxString *newval);
-+
-+ void ApplyEdit(int row, int col, wxGrid *grid);
-+
- void Reset();
-
- wxGridCellEditor *Clone() const;
-@@ -159,6 +171,7 @@
-
- wxArrayString mChoices;
- wxString mOld;
-+ wxString mValueAsString;
- };
-
- // ----------------------------------------------------------------------------
---- a/src/widgets/ImageRoll.cpp
-+++ b/src/widgets/ImageRoll.cpp
-@@ -299,7 +299,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);
-@@ -311,7 +311,7 @@
- }
- }
-
--void ImageRoll::Draw(wxDC &dc, wxRect rect, int WXUNUSED(logicalFunc))
-+void ImageRoll::Draw(wxDC &dc, wxRect rect, wxRasterOperationMode WXUNUSED(logicalFunc))
- {
- int width = rect.width;
- int height = rect.height;
-@@ -434,7 +434,7 @@
- mImageRoll.GetMaxSize());
- }
-
--void ImageRollPanel::SetLogicalFunction(int func)
-+void ImageRollPanel::SetLogicalFunction(wxRasterOperationMode func)
- {
- mLogicalFunction = func;
- }
---- a/src/widgets/ImageRoll.h
-+++ b/src/widgets/ImageRoll.h
-@@ -12,9 +12,18 @@
- #ifndef __AUDACITY_IMAGE_ROLL__
- #define __AUDACITY_IMAGE_ROLL__
-
-+#include <wx/dc.h>
-+#include <wx/dcclient.h>
- #include <wx/defs.h>
- #include <wx/dynarray.h>
- #include <wx/panel.h>
-+#include <wx/version.h>
-+
-+
-+#if wxMAJOR_VERSION < 3
-+# define wxRasterOperationMode int
-+#endif
-+
-
- WX_DECLARE_OBJARRAY(wxBitmap, BitmapArray);
- WX_DECLARE_OBJARRAY(wxImage, ImageArray);
-@@ -40,7 +49,7 @@
- wxSize GetMaxSize() const { return mMaxSize; }
-
- void Draw(wxDC &dc, wxRect rect,
-- int logicalFunc = wxCOPY);
-+ wxRasterOperationMode logicalFunc = wxCOPY);
-
- static ImageArray SplitH(const wxImage &src, wxColour magicColor);
- static ImageArray SplitV(const wxImage &src, wxColour magicColor);
-@@ -48,7 +57,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);
-
-@@ -72,7 +81,7 @@
- const wxSize& size = wxDefaultSize,
- long style = wxTAB_TRAVERSAL);
-
-- void SetLogicalFunction(int func);
-+ void SetLogicalFunction(wxRasterOperationMode func);
-
- void OnPaint(wxPaintEvent &evt);
- void OnSize(wxSizeEvent &evt);
-@@ -80,7 +89,7 @@
- protected:
- ImageRoll mImageRoll;
-
-- int mLogicalFunction;
-+ wxRasterOperationMode mLogicalFunction;
-
- DECLARE_EVENT_TABLE();
-
---- a/src/widgets/KeyView.cpp
-+++ b/src/widgets/KeyView.cpp
-@@ -1576,7 +1576,7 @@
- else
- {
- // A "menu" node, so prepend the line number
-- k1.Printf(wxT("%08x%s"), t1->line, t1->label.c_str());
-+ k1.Printf(wxT("%08x%s"), (unsigned int) t1->line, t1->label.c_str());
- }
-
- // See above for explanation
-@@ -1588,7 +1588,7 @@
- else
- {
- // A "menu" node, so prepend the line number
-- k2.Printf(wxT("%08x%s"), t2->line, t2->label.c_str());
-+ k2.Printf(wxT("%08x%s"), (unsigned int) t2->line, t2->label.c_str());
- }
-
- // See wxWidgets documentation for explanation of comparison results.
---- a/src/widgets/TimeTextCtrl.cpp
-+++ b/src/widgets/TimeTextCtrl.cpp
-@@ -168,6 +168,7 @@
-
- #include <math.h>
-
-+#include <wx/dcclient.h>
- #include <wx/dcmemory.h>
- #include <wx/font.h>
- #include <wx/intl.h>
-@@ -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
-@@ -11,6 +11,11 @@
- // Licence: wxWindows licence
- /////////////////////////////////////////////////////////////////////////////
-
-+#include "wx/version.h"
-+
-+// on wx >= 3.0 we should use the real numformatter (instead of a backported copy)
-+#if !wxCHECK_VERSION(3,0,0)
-+
- // ----------------------------------------------------------------------------
- // headers
- // ----------------------------------------------------------------------------
-@@ -367,3 +372,6 @@
- RemoveThousandsSeparators(s);
- return s.ToDouble(val);
- }
-+
-+#endif // !wxCHECK_VERSION(3,0,0)
-+
---- a/src/widgets/numformatter.h
-+++ b/src/widgets/numformatter.h
-@@ -11,8 +11,15 @@
- // Licence: wxWindows licence
- /////////////////////////////////////////////////////////////////////////////
-
--#ifndef _WX_NUMFORMATTER_H_
--#define _WX_NUMFORMATTER_H_
-+#ifndef _NUMFORMATTER_H_
-+#define _NUMFORMATTER_H_
-+
-+#include "wx/version.h"
-+
-+// on wx >= 3.0 we should use the real numformatter (instead of a backported copy)
-+#if wxCHECK_VERSION(3,0,0)
-+# include "wx/numformatter.h"
-+#else // wxCHECK_VERSION(3,0,0)
-
- #include "wx/string.h"
-
-@@ -84,4 +91,6 @@
- static void RemoveThousandsSeparators(wxString& s);
- };
-
--#endif // _WX_NUMFORMATTER_H_
-+#endif // wxCHECK_VERSION(3,0,0)
-+
-+#endif // _NUMFORMATTER_H_
---- a/src/widgets/valnum.cpp
-+++ b/src/widgets/valnum.cpp
-@@ -11,6 +11,11 @@
- // Licence: wxWindows licence
- /////////////////////////////////////////////////////////////////////////////
-
-+#include "wx/version.h"
-+
-+// on wx >= 3.0 we should use the real valnum (instead of a backported copy)
-+#if !wxCHECK_VERSION(3,0,0)
-+
- // ============================================================================
- // Declarations
- // ============================================================================
-@@ -310,3 +315,6 @@
- }
-
- #endif // wxUSE_VALIDATORS && wxUSE_TEXTCTRL
-+
-+#endif // !wxCHECK_VERSION(3,0,0)
-+
---- a/src/widgets/valnum.h
-+++ b/src/widgets/valnum.h
-@@ -8,8 +8,15 @@
- // Licence: wxWindows licence
- /////////////////////////////////////////////////////////////////////////////
-
--#ifndef _WX_VALNUM_H_
--#define _WX_VALNUM_H_
-+#ifndef _VALNUM_H_
-+#define _VALNUM_H_
-+
-+#include "wx/version.h"
-+
-+// on wx >= 3.0 we should use the real valnum (instead of a backported copy)
-+#if wxCHECK_VERSION(3,0,0)
-+# include "wx/valnum.h"
-+#else // wxCHECK_VERSION(3,0,0)
-
- #include "wx/defs.h"
-
-@@ -471,4 +478,6 @@
-
- #endif // wxUSE_VALIDATORS
-
--#endif // _WX_VALNUM_H_
-+#endif // wxCHECK_VERSION(3,0,0)
-+
-+#endif // _VALNUM_H_
---- a/src/xml/XMLWriter.cpp
-+++ b/src/xml/XMLWriter.cpp
-@@ -189,9 +189,9 @@
-
- void XMLWriter::WriteAttr(const wxString &name, size_t value)
- {
-- Write(wxString::Format(wxT(" %s=\"%ld\""),
-+ Write(wxString::Format(wxT(" %s=\"%lld\""),
- name.c_str(),
-- value));
-+ (long long) value));
- }
-
- void XMLWriter::WriteAttr(const wxChar *name, size_t value)
-@@ -247,7 +247,7 @@
- mHasKids[0] = true;
- }
-
-- Write(value.c_str());
-+ Write(value);
- }
-
- void XMLWriter::WriteSubTree(const wxChar *value)
diff --git a/debian/patches/wxwidgets-clipboard-reentry-workaround.patch b/debian/patches/wxwidgets-clipboard-reentry-workaround.patch
deleted file mode 100644
index 6e05206..0000000
--- a/debian/patches/wxwidgets-clipboard-reentry-workaround.patch
+++ /dev/null
@@ -1,85 +0,0 @@
-Description: Workaround for wxWidgets bug: Reentry in clipboard
- The wxWidgets bug http://trac.wxwidgets.org/ticket/16636 prevents
- us from doing clipboard operations in wxShowEvent and wxTimerEvent
- processing because those event could possibly be processed during
- the (not sufficiently protected) Yield() of a first clipboard
- operation, causing reentry. Audacity had a workaround in place
- for this problem (the class "CaptureEvents"), which however isn't
- applicable with wxWidgets 3.0 because it's based on changing the
- gdk event handler, a change that would be overridden by wxWidgets's
- own gdk event handler change.
- Instead, as a new workaround, specifically protect those processings
- of wxShowEvent and wxTimerEvent that try to do clipboard operations
- from being executed within Yield(). This is done by delaying their
- execution by posting pure wxWidgets events - which are never executed
- during Yield().
-Author: Martin Steghöfer <martin at steghoefer.eu>
-Bug-Debian: https://bugs.debian.org/765341
-
---- a/src/Project.cpp
-+++ b/src/Project.cpp
-@@ -1625,9 +1625,13 @@
-
- // Call "OnSize" again (the previous calls to "OnSize" might not
- // have succeeded because some methods are not available before
-- // the actual creation/showing of the window)
-- wxSizeEvent sizeEvent(GetSize());
-- OnSize(sizeEvent);
-+ // the actual creation/showing of the window).
-+ // Post the event instead of calling OnSize(..) directly. This ensures that
-+ // this is a pure wxWidgets event (no GDK event behind it) and that it
-+ // therefore isn't processed within the YieldFor(..) of the clipboard
-+ // operations (workaround for Debian bug #765341).
-+ wxSizeEvent *sizeEvent = new wxSizeEvent(GetSize());
-+ GetEventHandler()->QueueEvent(sizeEvent);
-
- // Further processing by default handlers
- event.Skip();
---- a/src/TrackPanel.cpp
-+++ b/src/TrackPanel.cpp
-@@ -360,6 +360,8 @@
- EVT_MENU(OnTimeTrackLinID, TrackPanel::OnTimeTrackLin)
- EVT_MENU(OnTimeTrackLogID, TrackPanel::OnTimeTrackLog)
- EVT_MENU(OnTimeTrackLogIntID, TrackPanel::OnTimeTrackLogInt)
-+
-+ EVT_TIMER(wxID_ANY, TrackPanel::OnTimer)
- END_EVENT_TABLE()
-
- /// Makes a cursor from an XPM, uses CursorId as a fallback.
-@@ -927,7 +929,7 @@
- }
-
- /// AS: This gets called on our wx timer events.
--void TrackPanel::OnTimer()
-+void TrackPanel::OnTimer(wxTimerEvent& event)
- {
- mTimeCount++;
- // AS: If the user is dragging the mouse and there is a track that
---- a/src/TrackPanel.h
-+++ b/src/TrackPanel.h
-@@ -207,7 +207,7 @@
-
- virtual double GetMostRecentXPos();
-
-- virtual void OnTimer();
-+ virtual void OnTimer(wxTimerEvent& event);
-
- virtual int GetLeftOffset() const { return GetLabelWidth() + 1;}
-
-@@ -541,7 +541,15 @@
-
- class AUDACITY_DLL_API AudacityTimer:public wxTimer {
- public:
-- virtual void Notify() { parent->OnTimer(); }
-+ virtual void Notify() {
-+ // Don't call parent->OnTimer(..) directly here, but instead post
-+ // an event. This ensures that this is a pure wxWidgets event
-+ // (no GDK event behind it) and that it therefore isn't processed
-+ // within the YieldFor(..) of the clipboard operations (workaround
-+ // for Debian bug #765341).
-+ wxTimerEvent *event = new wxTimerEvent(*this);
-+ parent->GetEventHandler()->QueueEvent(event);
-+ }
- TrackPanel *parent;
- } mTimer;
-
diff --git a/debian/patches/wxwidgets-effect-dialogs-segfault.patch b/debian/patches/wxwidgets-effect-dialogs-segfault.patch
deleted file mode 100644
index 26eb581..0000000
--- a/debian/patches/wxwidgets-effect-dialogs-segfault.patch
+++ /dev/null
@@ -1,34 +0,0 @@
-Description: Fix effect dialog segfault due to events before initialization
- Both the LV2EffectDialog and the VampEffectDialog receive EVT_TEXT events
- before they are properly initialized. To prevent this, a workaround was
- already in place, but was only active on Windows. Activated the workaround
- for wxGTK with wxWidgets >= 3.0, too.
-Author: Martin Steghöfer <martin at steghoefer.eu>
-Bug-Debian: http://bugs.debian.org/765341
-
---- audacity-2.0.6.orig/src/effects/lv2/LV2Effect.cpp
-+++ audacity-2.0.6/src/effects/lv2/LV2Effect.cpp
-@@ -913,8 +913,8 @@ LV2EffectDialog::LV2EffectDialog(LV2Effe
- mLength(length)
- {
-
--#if defined(__WXMSW__)
-- // On Windows, for some reason, wxWindows calls OnTextCtrl during creation
-+#if defined(__WXMSW__) || (defined(__WXGTK__) && wxCHECK_VERSION(3, 0, 0))
-+ // On Windows and GTK (with wx3.0), wxWidgets calls OnTextCtrl during creation
- // of the text control, and LV2EffectDialog::OnTextCtrl calls HandleText,
- // which assumes all the mFields have been initialized.
- // This can give us a bad pointer crash, so manipulate inSlider to
---- audacity-2.0.6.orig/src/effects/vamp/VampEffect.cpp
-+++ audacity-2.0.6/src/effects/vamp/VampEffect.cpp
-@@ -333,8 +333,8 @@ VampEffectDialog::VampEffectDialog(VampE
-
- mParameters = plugin->getParameterDescriptors();
-
--#ifdef __WXMSW__
-- // On Windows, for some reason, wxWidgets calls OnTextCtrl during creation
-+#if defined(__WXMSW__) || (defined(__WXGTK__) && wxCHECK_VERSION(3, 0, 0))
-+ // On Windows and GTK (with wx3.0), wxWidgets calls OnTextCtrl during creation
- // of the text control, and VampEffectDialog::OnTextCtrl calls HandleText,
- // which assumes all the fields have been initialized.
- // This can give us a bad pointer crash, so manipulate inSlider to
--
Audacity debian packaging
More information about the pkg-multimedia-commits
mailing list