]> git.pld-linux.org Git - packages/audacity.git/commitdiff
- new URLs, updated to 2.1.1 auto/th/audacity-2.1.1-1
authorJakub Bogusz <qboosh@pld-linux.org>
Sun, 18 Oct 2015 09:29:01 +0000 (11:29 +0200)
committerJakub Bogusz <qboosh@pld-linux.org>
Sun, 18 Oct 2015 09:29:01 +0000 (11:29 +0200)
- removed obsolete system-libs,wx-fd-constants,wx30 patches
- added cast patch (add cast to fix build with current g++/wx)

audacity-cast.patch [new file with mode: 0644]
audacity-system-libs.patch [deleted file]
audacity.spec
wx-fd-constants.patch [deleted file]
wx30.patch [deleted file]

diff --git a/audacity-cast.patch b/audacity-cast.patch
new file mode 100644 (file)
index 0000000..608b690
--- /dev/null
@@ -0,0 +1,11 @@
+--- audacity-minsrc-2.1.1/src/prefs/TracksPrefs.cpp.orig       2015-07-10 19:35:40.000000000 +0200
++++ audacity-minsrc-2.1.1/src/prefs/TracksPrefs.cpp    2015-10-17 20:48:00.933667048 +0200
+@@ -36,7 +36,7 @@
+    // Bugs 1043, 1044
+    // First rewrite legacy preferences
+    gPrefs->Write(wxT("/GUI/DefaultViewModeNew"),
+-      WaveTrack::FindDefaultViewMode());
++      static_cast<int>(WaveTrack::FindDefaultViewMode()));
+    Populate();
+ }
diff --git a/audacity-system-libs.patch b/audacity-system-libs.patch
deleted file mode 100644 (file)
index a2969fa..0000000
+++ /dev/null
@@ -1,26 +0,0 @@
---- audacity-src-1.3.2-beta/m4/audacity_checklib_libresample.m4.orig   2006-12-29 17:01:36.794372000 +0100
-+++ audacity-src-1.3.2-beta/m4/audacity_checklib_libresample.m4        2006-12-29 17:23:30.465234287 +0100
-@@ -133,7 +151,22 @@
-    dnl ... but libresample isn't generally installed as a system library...
--   LIBRESAMPLE_SYSTEM_AVAILABLE="no"
-+   AC_CHECK_LIB(resample, resample_open,
-+                libresample_found="yes",
-+                libresample_found="no")
-+
-+   AC_CHECK_HEADER(libresample.h,
-+                   libresample_h_found="yes",
-+                   libresample_h_found="no")
-+
-+   if test "x$libresample_found" = "xyes" && test "x$libresample_h_found" = "xyes" ; then
-+      LIBRESAMPLE_SYSTEM_AVAILABLE="yes"
-+      LIBRESAMPLE_SYSTEM_LIBS=-lresample
-+      AC_MSG_NOTICE([Libresample libraries are available as system libraries])
-+   else
-+      LIBRESAMPLE_SYSTEM_AVAILABLE="no"
-+      AC_MSG_NOTICE([Libresample libraries are NOT available as system libraries])
-+   fi
-    dnl see if libresample is available locally
index 51571cefcee1ff12ca3fd35b980ced5fa2b6641b..afa8f4f38b2702b13e29d14630fa1242de9908f2 100644 (file)
@@ -2,79 +2,75 @@
 # - internal portaudio crashes when only OSS is available on startup
 # - use system portaudio (>= 19, but relies on local changes)
 # - use system portSMF?
 # - internal portaudio crashes when only OSS is available on startup
 # - use system portaudio (>= 19, but relies on local changes)
 # - use system portSMF?
-# - use system ffmpeg (libavcodec >= 51.53, libavformat >= 52.12), libavutil
+# - use system ffmpeg (libavcodec >= 51.53, libavformat >= 52.12, libavutil)
 # - use system sbsms (>= 1.6.0, but relies on local changes)
 # - use system libnyquist (if ever; currently it's a part of audacity project)
 #
 # Conditional build:
 # - use system sbsms (>= 1.6.0, but relies on local changes)
 # - use system libnyquist (if ever; currently it's a part of audacity project)
 #
 # Conditional build:
-%bcond_with    libresample     # using libresample for resampling (default is soxr)
-%bcond_with    libsamplerate   # using libsamplerate for resampling (default is soxr)
 %bcond_with    ffmpeg          # build with ffmpeg support (currently audacity does not support ffmpeg 1.0)
 %bcond_with    ffmpeg          # build with ffmpeg support (currently audacity does not support ffmpeg 1.0)
+%bcond_with    gtk3            # GTK+ 3.x instead of 2.x
 #
 #
-%if %{without libresample} && %{without libsamplerate}
-%define        with_soxr       1
-%endif
 Summary:       Audacity - manipulate digital audio waveforms
 Summary(pl.UTF-8):     Audacity - narzędzie do obróbki plików dźwiękowych
 Summary(ru.UTF-8):     Кроссплатформенный звуковой редактор
 Name:          audacity
 Summary:       Audacity - manipulate digital audio waveforms
 Summary(pl.UTF-8):     Audacity - narzędzie do obróbki plików dźwiękowych
 Summary(ru.UTF-8):     Кроссплатформенный звуковой редактор
 Name:          audacity
-Version:       2.0.5
-Release:       4
+Version:       2.1.1
+Release:       1
 License:       GPL v2+
 Group:         X11/Applications/Sound
 License:       GPL v2+
 Group:         X11/Applications/Sound
-#Source0Download: http://code.google.com/p/audacity/downloads/list
-Source0:       http://audacity.googlecode.com/files/%{name}-minsrc-%{version}.tar.xz
-# Source0-md5: 657f71a5a214fe84731ed9842e09fa04
-# Link from http://manual.audacityteam.org/index.php?title=Main_Page
-Source1:       http://audacity.googlecode.com/files/%{name}-manual-%{version}.zip
-# Source1-md5: 9f0b9db3f37aa4b9455a4b4e2046e1e4
+#Source0Download: http://www.oldfoss.com/Audacity.html
+Source0:       http://app.oldfoss.com:81/download/Audacity/%{name}-minsrc-%{version}.tar.xz
+# Source0-md5: 9e37b1f5cde38d089a35febb904a9e39
+Source1:       http://app.oldfoss.com:81/download/Audacity/%{name}-manual-%{version}.zip
+# Source1-md5: a4116a20798b827cd1e06e50c8099aa6
 Source2:       %{name}.desktop
 Source3:       %{name}-icon.png
 Source2:       %{name}.desktop
 Source3:       %{name}-icon.png
-Patch0:                %{name}-system-libs.patch
+Patch0:                %{name}-cast.patch
 Patch1:                %{name}-opt.patch
 Patch2:                %{name}-no-macos.patch
 Patch1:                %{name}-opt.patch
 Patch2:                %{name}-no-macos.patch
-# https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=749659
-Patch3:                wx-fd-constants.patch
-Patch4:                wx30.patch
-URL:           http://audacity.sourceforge.net/
+URL:           http://audacityteam.org/
 BuildRequires: alsa-lib-devel
 BuildRequires: autoconf >= 2.59
 BuildRequires: alsa-lib-devel
 BuildRequires: autoconf >= 2.59
-BuildRequires: automake
+BuildRequires: automake >= 1:1.9
 BuildRequires: expat-devel >= 1.95
 BuildRequires: expat-devel >= 1.95
+# libavcodec >= 51.53 libavformat >= 52.12 libavutil
 %{?with_ffmpeg:BuildRequires:  ffmpeg-devel >= 0.8.0}
 %{?with_ffmpeg:BuildRequires:  ffmpeg-devel >= 0.8.0}
-BuildRequires: flac-c++-devel >= 1.2.0
-BuildRequires: gettext-tools
-BuildRequires: gtk+2-devel >= 2.0
+BuildRequires: flac-c++-devel >= 1.3.0
+BuildRequires: gettext-tools >= 0.18
+%{!?with_gtk3:BuildRequires:   gtk+2-devel >= 2.0}
+%{?with_gtk3:BuildRequires:    gtk+3-devel >= 3.0}
 BuildRequires: jack-audio-connection-kit-devel
 BuildRequires: hpklinux-devel >= 4.06
 BuildRequires: lame-libs-devel
 BuildRequires: libid3tag-devel >= 0.15.0b-2
 BuildRequires: libjpeg-devel
 BuildRequires: libmad-devel >= 0.14.2b-4
 BuildRequires: jack-audio-connection-kit-devel
 BuildRequires: hpklinux-devel >= 4.06
 BuildRequires: lame-libs-devel
 BuildRequires: libid3tag-devel >= 0.15.0b-2
 BuildRequires: libjpeg-devel
 BuildRequires: libmad-devel >= 0.14.2b-4
-%{?with_libresample:BuildRequires:     libresample-devel >= 0.1.3}
-%{?with_libsamplerate:BuildRequires:   libsamplerate-devel >= 0.1.2}
 #BuildRequires:        libsbsms-devel >= 1.6.0
 #BuildRequires:        libsbsms-devel >= 1.6.0
+#BuildRequires:        libsbsms2-devel >= 2.0.2
 BuildRequires: libsndfile-devel >= 1.0.0
 BuildRequires: libstdc++-devel
 BuildRequires: libsndfile-devel >= 1.0.0
 BuildRequires: libstdc++-devel
+BuildRequires: libtool >= 2:2
 BuildRequires: libvorbis-devel >= 1:1.0
 BuildRequires: libvorbis-devel >= 1:1.0
+BuildRequires: lilv-devel >= 0.16
+BuildRequires: lv2-devel
 #BuildRequires:        portaudio-devel >= 19
 BuildRequires: pkgconfig
 BuildRequires: soundtouch-devel >= 1.3.0
 #BuildRequires:        portaudio-devel >= 19
 BuildRequires: pkgconfig
 BuildRequires: soundtouch-devel >= 1.3.0
-%{?with_soxr:BuildRequires:    soxr-devel >= 0.0.5}
+BuildRequires: soxr-devel >= 0.0.5
 BuildRequires: speex-devel
 BuildRequires: speex-devel
+BuildRequires: suil-devel >= 0.8.2
 BuildRequires: twolame-devel >= 0.3.9
 BuildRequires: twolame-devel >= 0.3.9
+BuildRequires: udev-devel
 BuildRequires: unzip
 BuildRequires: vamp-devel >= 2.0
 BuildRequires: which
 BuildRequires: unzip
 BuildRequires: vamp-devel >= 2.0
 BuildRequires: which
-BuildRequires: wxGTK2-unicode-devel >= 2.8.0
-BuildRequires: wxX11-devel >= 2.8.0
+%{!?with_gtk3:BuildRequires:   wxGTK2-unicode-devel >= 2.8.0}
+%{?with_gtk3:BuildRequires:    wxGTK3-unicode-devel >= 2.8.0}
 Requires(post,postun): shared-mime-info
 Requires(post,postun): shared-mime-info
-Requires:      flac-c++ >= 1.2.0
+Requires:      flac-c++ >= 1.3.0
 Requires:      lame-libs
 Requires:      libid3tag >= 0.15.0b-2
 Requires:      libmad >= 0.14.2b-4
 Requires:      lame-libs
 Requires:      libid3tag >= 0.15.0b-2
 Requires:      libmad >= 0.14.2b-4
-%{?with_libresample:Requires:  libresample >= 0.1.3}
-%{?with_libsamplerate:Requires:        libsamplerate >= 0.1.2}
 Requires:      libsndfile >= 1.0.0
 Requires:      soundtouch >= 1.3.0
 %{?with_soxr:Requires: soxr >= 0.0.5}
 Requires:      libsndfile >= 1.0.0
 Requires:      soundtouch >= 1.3.0
 %{?with_soxr:Requires: soxr >= 0.0.5}
@@ -102,45 +98,68 @@ Audacity - это звуковой редактор, позволяющий ра
 микширование треков и применение эффектов, оформленных в виде
 плагинов, к любой части звукового файла.
 
 микширование треков и применение эффектов, оформленных в виде
 плагинов, к любой части звукового файла.
 
+%package devel
+Summary:       Header files for Audacity interfaces
+Summary(pl.UTF-8):     Pliki nagłówkowe interfejsów Audacity
+Group:         Development/Libraries
+Requires:      libstdc++-devel
+Requires:      wxWidgets-devel >= 2.8.0
+# doesn't require base
+
+%description devel
+Header files for Audacity interfaces.
+
+%description devel -l pl.UTF-8
+Pliki nagłówkowe interfejsów Audacity.
+
 %prep
 %prep
-%setup -q -n %{name}-src-%{version}
+%setup -q -n %{name}-minsrc-%{version}
 %patch0 -p1
 %patch1 -p1
 %patch2 -p1
 %patch0 -p1
 %patch1 -p1
 %patch2 -p1
-%patch3 -p2
-%patch4 -p1
+
+# OPTIONAL_SUBDIRS are not included in tarball; allow autotools to work
+%{__sed} -i '/SUBDIRS += \$(OPTIONAL_SUBDIRS)/d' lib-src/Makefile.am
 
 %{__sed} -i 's/libmp3lame.so/libmp3lame.so.0/g' locale/*.po
 
 %build
 cd lib-src/portmixer
 
 %{__sed} -i 's/libmp3lame.so/libmp3lame.so.0/g' locale/*.po
 
 %build
 cd lib-src/portmixer
+%{__libtoolize}
+%{__aclocal} -I m4
 %{__autoconf}
 %{__autoconf}
+%{__automake}
 cd ../lib-widget-extra
 cd ../lib-widget-extra
+%{__libtoolize}
 %{__aclocal} -I m4
 %{__autoconf}
 %{__aclocal} -I m4
 %{__autoconf}
+%{__automake}
 cd ../FileDialog
 cd ../FileDialog
-%{__aclocal}
+%{__libtoolize}
+%{__aclocal} -I m4
 %{__autoconf}
 %{__autoconf}
+%{__automake}
 cd ../portsmf
 %{__aclocal} -I autotools/m4
 %{__autoconf}
 %{__automake}
 cd ../..
 cd ../portsmf
 %{__aclocal} -I autotools/m4
 %{__autoconf}
 %{__automake}
 cd ../..
+%{__libtoolize}
 %{__aclocal} -I m4
 %{__autoconf}
 %{__aclocal} -I m4
 %{__autoconf}
+%{__automake}
 
 
-export WX_CONFIG=$(which wx-gtk2-unicode-config)
+export WX_CONFIG=$(which wx-gtk%{?with_gtk3:3}%{!?with_gtk3:2}-unicode-config)
 %configure \
 %configure \
+       %{?with_gtk3:--enable-gtk3} \
        --with-ffmpeg%{!?with_ffmpeg:=no} \
        --with-help \
        --with-id3tag=system \
        --with-libmad=system \
        --with-ffmpeg%{!?with_ffmpeg:=no} \
        --with-help \
        --with-id3tag=system \
        --with-libmad=system \
-       %{?with_libresample:--with-libresample=system} \
-       %{?with_libsamplerate:--with-libsamplerate=system} \
        --with-libsndfile=system \
        --with-libflac=system \
        --with-sbsms=local \
        --with-libsndfile=system \
        --with-libflac=system \
        --with-sbsms=local \
-       %{?with_soxr:--with-soxr=system} \
+       --with-soxr=system \
        --with-vorbis=system
 
 %{__make}
        --with-vorbis=system
 
 %{__make}
@@ -153,6 +172,11 @@ install -d $RPM_BUILD_ROOT{%{_desktopdir},%{_pixmapsdir}}
        DESTDIR=$RPM_BUILD_ROOT \
        INSTALL_PATH=$RPM_BUILD_ROOT
 
        DESTDIR=$RPM_BUILD_ROOT \
        INSTALL_PATH=$RPM_BUILD_ROOT
 
+# install headers in standard location
+install -d $RPM_BUILD_ROOT%{_includedir}
+%{__mv} $RPM_BUILD_ROOT%{_datadir}/audacity/include/audacity $RPM_BUILD_ROOT%{_includedir}
+rmdir $RPM_BUILD_ROOT%{_datadir}/audacity/include
+
 cp -a %{SOURCE2} $RPM_BUILD_ROOT%{_desktopdir}
 cp -a %{SOURCE3} $RPM_BUILD_ROOT%{_pixmapsdir}
 %{__unzip} -qq -a %{SOURCE1} -d $RPM_BUILD_ROOT%{_datadir}/%{name}/help
 cp -a %{SOURCE2} $RPM_BUILD_ROOT%{_desktopdir}
 cp -a %{SOURCE3} $RPM_BUILD_ROOT%{_pixmapsdir}
 %{__unzip} -qq -a %{SOURCE1} -d $RPM_BUILD_ROOT%{_datadir}/%{name}/help
@@ -160,7 +184,7 @@ cp -a %{SOURCE3} $RPM_BUILD_ROOT%{_pixmapsdir}
 # unsupported
 %{__rm} -r $RPM_BUILD_ROOT%{_datadir}/locale/sr_RS*
 
 # unsupported
 %{__rm} -r $RPM_BUILD_ROOT%{_datadir}/locale/sr_RS*
 
-mv -f $RPM_BUILD_ROOT%{_datadir}/locale/{zh,zh_CN}
+%{__mv} $RPM_BUILD_ROOT%{_datadir}/locale/{zh,zh_CN}
 
 %{__rm} $RPM_BUILD_ROOT%{_datadir}/pixmaps/audacity.xpm
 %{__rm} $RPM_BUILD_ROOT%{_datadir}/pixmaps/audacity16.xpm
 
 %{__rm} $RPM_BUILD_ROOT%{_datadir}/pixmaps/audacity.xpm
 %{__rm} $RPM_BUILD_ROOT%{_datadir}/pixmaps/audacity16.xpm
@@ -190,6 +214,11 @@ rm -rf $RPM_BUILD_ROOT
 %{_mandir}/man1/audacity.1*
 %{_desktopdir}/audacity.desktop
 %{_pixmapsdir}/audacity-icon.png
 %{_mandir}/man1/audacity.1*
 %{_desktopdir}/audacity.desktop
 %{_pixmapsdir}/audacity-icon.png
+%{_datadir}/appdata/audacity.appdata.xml
 %{_datadir}/mime/packages/audacity.xml
 %{_iconsdir}/hicolor/*/apps/audacity.png
 %{_iconsdir}/hicolor/*/apps/audacity.svg
 %{_datadir}/mime/packages/audacity.xml
 %{_iconsdir}/hicolor/*/apps/audacity.png
 %{_iconsdir}/hicolor/*/apps/audacity.svg
+
+%files devel
+%defattr(644,root,root,755)
+%{_includedir}/audacity
diff --git a/wx-fd-constants.patch b/wx-fd-constants.patch
deleted file mode 100644 (file)
index bb31e65..0000000
+++ /dev/null
@@ -1,73 +0,0 @@
---- a/audacity-2.0.5/lib-src/FileDialog/generic/FileDialogPrivate.cpp  2013-10-19 20:31:33.000000000 +1300
-+++ b/audacity-2.0.5/lib-src/FileDialog/generic/FileDialogPrivate.cpp  2014-06-01 20:38:47.890251794 +1200
-@@ -40,7 +40,7 @@
- #include "wx/settings.h"
- #include "wx/filefn.h"
- #include "wx/file.h"        // for wxS_IXXX constants only
--#include "wx/filedlg.h"     // wxOPEN, wxSAVE...
-+#include "wx/filedlg.h"     // wxFD_OPEN, wxFD_SAVE...
- #include "wx/generic/filedlgg.h"
- #include "wx/generic/dirctrlg.h" // for wxFileIconsTable
-@@ -991,9 +991,9 @@
-    }
-    
-    if (m_dialogStyle == 0)
--      m_dialogStyle = wxOPEN;
--   if ((m_dialogStyle & wxMULTIPLE ) && !(m_dialogStyle & wxOPEN))
--      m_dialogStyle |= wxOPEN;
-+      m_dialogStyle = wxFD_OPEN;
-+   if ((m_dialogStyle & wxMULTIPLE ) && !(m_dialogStyle & wxFD_OPEN))
-+      m_dialogStyle |= wxFD_OPEN;
-    
-    if ((m_dir.empty()) || (m_dir == wxT(".")))
-    {
-@@ -1368,7 +1368,7 @@
-    }
- #endif // __UNIX__
-    
--   if (!(m_dialogStyle & wxSAVE))
-+   if (!(m_dialogStyle & wxFD_SAVE))
-    {
-       if ((filename.Find(wxT('*')) != wxNOT_FOUND) ||
-           (filename.Find(wxT('?')) != wxNOT_FOUND))
-@@ -1413,14 +1413,14 @@
-    // VZ: the logic of testing for !wxFileExists() only for the open file
-    //     dialog is not entirely clear to me, why don't we allow saving to a
-    //     file without extension as well?
--   if ( !(m_dialogStyle & wxOPEN) || !wxFileExists(filename) )
-+   if ( !(m_dialogStyle & wxFD_OPEN) || !wxFileExists(filename) )
-    {
-       filename = AppendExtension(filename, m_filterExtension);
-    }
-    
-    // check that the file [doesn't] exist if necessary
--   if ( (m_dialogStyle & wxSAVE) &&
--       (m_dialogStyle & wxOVERWRITE_PROMPT) &&
-+   if ( (m_dialogStyle & wxFD_SAVE) &&
-+       (m_dialogStyle & wxFD_OVERWRITE_PROMPT) &&
-        wxFileExists( filename ) )
-    {
-       wxString msg;
-@@ -1429,8 +1429,8 @@
-       if (wxMessageBox(msg, _("Confirm"), wxYES_NO) != wxYES)
-          return;
-    }
--   else if ( (m_dialogStyle & wxOPEN) &&
--            (m_dialogStyle & wxFILE_MUST_EXIST) &&
-+   else if ( (m_dialogStyle & wxFD_OPEN) &&
-+            (m_dialogStyle & wxFD_FILE_MUST_EXIST) &&
-             !wxFileExists(filename) )
-    {
-       wxMessageBox(_("Please choose an existing file."), _("Error"),
---- a/audacity-2.0.5/lib-src/FileDialog/win/FileDialogPrivate.cpp      2013-10-19 20:31:33.000000000 +1300
-+++ b/audacity-2.0.5/lib-src/FileDialog/win/FileDialogPrivate.cpp      2014-06-01 20:36:58.222264699 +1200
-@@ -731,7 +731,7 @@
-    of.nMaxFile  = wxMAXPATH;
-    
-    // we must set the default extension because otherwise Windows would check
--   // for the existing of a wrong file with wxOVERWRITE_PROMPT (i.e. if the
-+   // for the existing of a wrong file with wxFD_OVERWRITE_PROMPT (i.e. if the
-    // user types "foo" and the default extension is ".bar" we should force it
-    // to check for "foo.bar" existence and not "foo")
-    wxString defextBuffer; // we need it to be alive until GetSaveFileName()!
diff --git a/wx30.patch b/wx30.patch
deleted file mode 100644 (file)
index b16bb89..0000000
+++ /dev/null
@@ -1,1329 +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). So the bugs (that were already present in
- audacity before) become visible in wx3.0 as error messages. I've
- fixed all the ones that popped up during my testing, but there might
- be more of them that I just didn't happen to hit. At some point, all
- the calls to wxString::Format and wxString::Printf have to be checked
- systematically.
-Author: Martin Steghöfer <martin@steghoefer.eu>
-Bug-Debian: https://bugs.debian.org/749659
-
---- a/configure.in
-+++ b/configure.in
-@@ -186,13 +186,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
-@@ -291,19 +289,21 @@
- wxconfigargs="$static_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/lib-widget-extra/configure.in
-+++ b/lib-src/lib-widget-extra/configure.in
-@@ -74,12 +74,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
-@@ -139,19 +138,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/lib-src/FileDialog/configure.ac
-+++ b/lib-src/FileDialog/configure.ac
-@@ -47,7 +47,7 @@
- AC_ARG_WITH(wx-version,
-             [AC_HELP_STRING([--with-wx-version],
--                            [override default wxWidgets version [2.6,2.8]])],
-+                            [override default wxWidgets version [2.8, 3.0]])],
-             wx_preference="--version=$withval",
-             wx_preference="")
-@@ -64,45 +64,66 @@
- fi
- dnl Gather wx arguments
-+wxconfigargs="$static_preference $unicode_preference $debug_preference $wx_preference"
--CPPFLAGS="$CPPFLAGS `$WX_CONFIG $static_preference $unicode_preference $debug_preference $wx_preference --cxxflags`"
-+dnl Get wx version
-+wx_version=`${WX_CONFIG} $wxconfigargs --version`
--dnl OS-specific configuration
-+dnl Get wx flags
-+CXXFLAGS="$CXXFLAGS `$WX_CONFIG $wxconfigargs --cxxflags`"
-+
-+dnl OS- and wx-version-specific configuration
- AC_CANONICAL_HOST
--case "${host_os}" in
--   darwin*)
--      dnl Mac OS X configuration
--      EXTRADEPS="mac/FileDialogPrivate.h"
--      EXTRAOBJS="mac/FileDialogPrivate.o"
--   ;;      
--
--   cygwin*)
--      dnl Windows/CygWin configuration
--      EXTRADEPS="win/FileDialogPrivate.h"
--      EXTRAOBJS="win/FileDialogPrivate.o"
--   ;;
--
--   *)
--      dnl Unix configuration
--      AM_PATH_GTK_2_0(2.4.0,
--            have_gtk="yes",
--            have_gtk="no")
--      if [[ "$have_gtk" = "yes" ]]
--      then
--         CPPFLAGS="$CPPFLAGS $GTK_CFLAGS"
--         EXTRADEPS="gtk/FileDialogPrivate.h gtk/private.h"
--         EXTRAOBJS="gtk/FileDialogPrivate.o"
--         HAVE_GTK=1
--      else
--         EXTRADEPS="generic/FileDialogPrivate.h"
--         EXTRAOBJS="generic/FileDialogPrivate.o"
--         HAVE_GTK=0
--      fi
--   ;;
-+case "${wx_version}" in
-+  2.8.*)
-+    case "${host_os}" in
-+       darwin*)
-+          dnl Mac OS X configuration
-+          EXTRADEPS="mac/FileDialogPrivate.h"
-+          EXTRAOBJS="mac/FileDialogPrivate.o"
-+       ;;
-+       cygwin*)
-+          dnl Windows/CygWin configuration
-+          EXTRADEPS="win/FileDialogPrivate.h"
-+          EXTRAOBJS="win/FileDialogPrivate.o"
-+       ;;
-+       *)
-+          dnl Unix configuration
-+          AM_PATH_GTK_2_0(2.4.0,
-+                have_gtk="yes",
-+                have_gtk="no")
-+          if [[ "$have_gtk" = "yes" ]]
-+          then
-+             CPPFLAGS="$CPPFLAGS $GTK_CFLAGS"
-+             EXTRADEPS="gtk/FileDialogPrivate.h gtk/private.h"
-+             EXTRAOBJS="gtk/FileDialogPrivate.o"
-+             HAVE_GTK=1
-+          else
-+             EXTRADEPS="generic/FileDialogPrivate.h"
-+             EXTRAOBJS="generic/FileDialogPrivate.o"
-+             HAVE_GTK=0
-+          fi
-+       ;;
-+    esac
-+    ;;
-+  3.0.*)
-+    dnl for wxWidgets >= 3.0 we can compile a generic implementation of our FileDialog
-+    EXTRADEPS="wx30/FileDialogPrivate.h"
-+    EXTRAOBJS="wx30/FileDialogPrivate.o"
-+    HAVE_GTK=0 dnl no need for extra GTK flags, we don't use it directly, we use wx interfaces
-+    ;;
-+  *)
-+  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
-+
- #
- # Write it all out
- #
---- a/lib-src/FileDialog/FileDialog.h
-+++ b/lib-src/FileDialog/FileDialog.h
-@@ -26,14 +26,18 @@
- typedef void (*fdCallback)(void *, int);
--#if defined(__WXMAC__)
--#include "mac/FileDialogPrivate.h"
--#elif defined(__WXMSW__)
--#include "win/FileDialogPrivate.h"
--#elif defined(__WXGTK__) && defined(HAVE_GTK)
--#include "gtk/FileDialogPrivate.h"
--#else
--#include "generic/FileDialogPrivate.h"
-+#if wxMAJOR_VERSION == 2 && wxMINOR_VERSION == 8 // wx2.8
-+#  if defined(__WXMAC__)
-+#    include "mac/FileDialogPrivate.h"
-+#  elif defined(__WXMSW__)
-+#    include "win/FileDialogPrivate.h"
-+#  elif defined(__WXGTK__) && defined(HAVE_GTK)
-+#    include "gtk/FileDialogPrivate.h"
-+#  else
-+#    include "generic/FileDialogPrivate.h"
-+#  endif
-+#else // wx3.0
-+#  include "wx30/FileDialogPrivate.h"
- #endif
- /////////////////////////////////////////////////////////////////////////////
-@@ -55,11 +59,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,
---- /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/src/AudacityApp.cpp
-+++ b/src/AudacityApp.cpp
-@@ -1324,7 +1324,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/AudioIO.cpp
-+++ b/src/AudioIO.cpp
-@@ -561,7 +561,7 @@
-       wxString errStr = _("Could not find any audio devices.\n");
-       errStr += _("You will not be able to play or record audio.\n\n");
-       wxString paErrStr = LAT1CTOWX(Pa_GetErrorText(err));
--      if (paErrStr)
-+      if (!paErrStr.IsEmpty())
-          errStr += _("Error: ")+paErrStr;
-       // XXX: we are in libaudacity, popping up dialogs not allowed!  A
-       // long-term solution will probably involve exceptions
---- 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/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
-@@ -2403,7 +2403,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()
---- 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()
- {
-@@ -165,4 +168,3 @@
-    else
-       return 0.0;
- }
--    
-\ No newline at end of file
---- 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
-@@ -702,6 +701,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)
-@@ -758,7 +758,8 @@
-      mLastEffect(NULL),
-      mLastEffectType(0),
-      mTimerRecordCanceled(false),
--     mMenuClose(false)
-+     mMenuClose(false),
-+     mShownOnce(false)
- {
-    int widths[] = {-2, -1};
-    mStatusBar = CreateStatusBar(2);
-@@ -981,9 +982,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));
-@@ -1350,6 +1351,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;
-@@ -1561,9 +1568,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();
- }
-@@ -1675,7 +1699,7 @@
-       wxCommandEvent e(EVT_CAPTURE_KEY);
-       e.SetEventObject(&event);
-    
--      if (w->ProcessEvent(e)) {
-+      if (w->GetEventHandler()->ProcessEvent(e)) {
-          return false;
-       }
-    }
---- a/src/Sequence.cpp
-+++ b/src/Sequence.cpp
-@@ -1035,7 +1035,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);
-       }
---- a/src/Tags.cpp
-+++ b/src/Tags.cpp
-@@ -482,7 +482,7 @@
-       while (*attrs) {
-          wxString attr = *attrs++;
--         if (!*attr)
-+         if (attr.IsEmpty())
-             break;
-          wxString value = *attrs++;
---- a/src/TrackPanel.cpp
-+++ b/src/TrackPanel.cpp
-@@ -5097,7 +5097,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...
-@@ -5534,7 +5534,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;
-@@ -8251,7 +8251,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/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/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/UploadDialog.cpp
-+++ b/src/UploadDialog.cpp
-@@ -113,12 +113,12 @@
-     icons->Add(*mp3Icon);
-     icons->Add(*upIcon);
-     
--    wxFlexGridSizer *topSizer = new wxFlexGridSizer(2, 1);  
-+    wxFlexGridSizer *topSizer = new wxFlexGridSizer(2, 1, 0);  
-     wxStaticBoxSizer *connectionBox = new wxStaticBoxSizer(new wxStaticBox(this, -1, wxT("FTP Connection"), wxDefaultPosition, wxDefaultSize, 0, wxT("")), wxVERTICAL);   
-     wxStaticBoxSizer *fileBox = new wxStaticBoxSizer(new wxStaticBox(this, -1, wxT("File Manager"), wxDefaultPosition, wxDefaultSize, 0, wxT("")), wxVERTICAL);
-     wxStaticBoxSizer *siteBox = new wxStaticBoxSizer(new wxStaticBox(this, -1, wxT("Site Manager"), wxDefaultPosition, wxDefaultSize, 0, wxT("")), wxVERTICAL);
--    wxFlexGridSizer *connectionSizer = new wxFlexGridSizer(2, 4);
-+    wxFlexGridSizer *connectionSizer = new wxFlexGridSizer(2, 4, 0);
-     wxBoxSizer *leftSizer = new wxBoxSizer(wxVERTICAL);
-     wxBoxSizer *rightSizer = new wxBoxSizer(wxVERTICAL);
-     wxBoxSizer *fileButtonSizer = new wxBoxSizer(wxHORIZONTAL);
---- 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.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/nyquist/Nyquist.cpp
-+++ b/src/effects/nyquist/Nyquist.cpp
-@@ -701,7 +701,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/import/ImportRaw.cpp
-+++ b/src/import/ImportRaw.cpp
-@@ -324,7 +324,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
-@@ -992,7 +992,7 @@
-       nevent.SetDirection(!e.ShiftDown());
-       nevent.SetEventObject(t);
-       nevent.SetCurrentFocus(t);
--      t->GetParent()->ProcessEvent(nevent);
-+      t->GetParent()->GetEventHandler()->ProcessEvent(nevent);
-       return;
-    }
---- 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) Input Channels");
-             }
-             else {
--               name = wxString::Format(wxT("%d"), j + 1);
-+               name = wxString::Format(wxT("%lld"), 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/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
-@@ -77,7 +77,8 @@
- {
-    wxGridTableBase *table = grid->GetTable();
--   table->GetValue(row, col).ToDouble(&mOld);
-+   mOldString = table->GetValue(row, col);
-+   mOldString.ToDouble(&mOld);
-    GetTimeCtrl()->SetTimeValue(mOld);
-    GetTimeCtrl()->EnableMenu();
-@@ -87,16 +88,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);
-@@ -303,8 +320,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();
-@@ -315,12 +343,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()
-@@ -499,7 +535,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();
-@@ -65,12 +70,14 @@
-    wxString GetValue() const;
-    TimeTextCtrl *GetTimeCtrl() const { return (TimeTextCtrl *)m_control; };
--
-+   
-  private:
-    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/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>
-@@ -1160,7 +1161,7 @@
-       nevent.SetDirection(!event.ShiftDown());
-       nevent.SetEventObject(parent);
-       nevent.SetCurrentFocus(parent);
--      GetParent()->ProcessEvent(nevent);
-+      GetParent()->GetEventHandler()->ProcessEvent(nevent);
-    } 
-    else if (keyCode == WXK_RETURN || keyCode == WXK_NUMPAD_ENTER) {
-@@ -1169,7 +1170,7 @@
-       if (def && def->IsEnabled()) {
-          wxCommandEvent cevent(wxEVT_COMMAND_BUTTON_CLICKED,
-                                def->GetId());
--         GetParent()->ProcessEvent(cevent);
-+         GetParent()->GetEventHandler()->ProcessEvent(cevent);
-       }
-    }
---- a/src/xml/XMLWriter.cpp
-+++ b/src/xml/XMLWriter.cpp
-@@ -246,7 +246,7 @@
-       mHasKids[0] = true;
-    }
--   Write(value.c_str());
-+   Write(value);
- }
- void XMLWriter::WriteSubTree(const wxChar *value)
---- 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%02lld"), i), mHistory[n--]);
-    }
-    config.SetPath(wxT(".."));
---- 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/import/Import.cpp
-+++ b/src/import/Import.cpp
-@@ -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"), i);
-      // No item to delete?  Then it's time to finish.
-      if (!gPrefs->Read(name, &val))
-         break;
---- 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/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/Project.h
-+++ b/src/Project.h
-@@ -253,6 +253,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);
-@@ -487,6 +488,8 @@
-    // dialog for missing alias warnings
-    wxDialog            *mAliasMissingWarningDialog;
-+   bool mShownOnce;
-+
-  public:
-    ToolManager *mToolManager;
-    bool mShowSplashScreen;
This page took 0.221238 seconds and 4 git commands to generate.