mirror of
https://github.com/cookiengineer/audacity
synced 2025-06-16 16:10:06 +02:00
Merge branch 'master' of https://github.com/tenacityteam/tenacity
This commit is contained in:
commit
d90999edce
@ -257,18 +257,17 @@ if( CMAKE_GENERATOR MATCHES "Visual Studio" )
|
|||||||
include( InstallRequiredSystemLibraries )
|
include( InstallRequiredSystemLibraries )
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
# Where the final product is stored
|
|
||||||
set( CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin )
|
|
||||||
|
|
||||||
set ( _SHARED_PROXY_BASE "shared" )
|
set ( _SHARED_PROXY_BASE "shared" )
|
||||||
set ( _SHARED_PROXY_BASE_PATH "${CMAKE_BINARY_DIR}/${_SHARED_PROXY_BASE}")
|
set ( _SHARED_PROXY_BASE_PATH "${CMAKE_BINARY_DIR}/${_SHARED_PROXY_BASE}")
|
||||||
|
|
||||||
# Define the non-install and executable paths
|
# Define the non-install and executable paths and where the final product is stored
|
||||||
if( CMAKE_CONFIGURATION_TYPES )
|
if( CMAKE_CONFIGURATION_TYPES )
|
||||||
|
set( CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin )
|
||||||
set( _DESTDIR "${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/${CMAKE_CFG_INTDIR}" )
|
set( _DESTDIR "${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/${CMAKE_CFG_INTDIR}" )
|
||||||
set( _SHARED_PROXY_PATH "${_SHARED_PROXY_BASE_PATH}/${CMAKE_CFG_INTDIR}")
|
set( _SHARED_PROXY_PATH "${_SHARED_PROXY_BASE_PATH}/${CMAKE_CFG_INTDIR}")
|
||||||
else()
|
else()
|
||||||
set( _DESTDIR "${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/${CMAKE_BUILD_TYPE}" )
|
set( CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin/${CMAKE_BUILD_TYPE} )
|
||||||
|
set( _DESTDIR "${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/" )
|
||||||
set( _SHARED_PROXY_PATH "${_SHARED_PROXY_BASE_PATH}/${CMAKE_BUILD_TYPE}")
|
set( _SHARED_PROXY_PATH "${_SHARED_PROXY_BASE_PATH}/${CMAKE_BUILD_TYPE}")
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
|
@ -5,6 +5,7 @@
|
|||||||
[](https://github.com/tenacityteam/tenacity/issues)
|
[](https://github.com/tenacityteam/tenacity/issues)
|
||||||
[](https://github.com/tenacityteam/tenacity/actions?query=branch%3Amaster)
|
[](https://github.com/tenacityteam/tenacity/actions?query=branch%3Amaster)
|
||||||
[](https://builds.sr.ht/~tenacity/tenacity/?)
|
[](https://builds.sr.ht/~tenacity/tenacity/?)
|
||||||
|
[](https://hosted.weblate.org/engage/tenacity/)
|
||||||
|
|
||||||
Tenacity is an easy-to-use, cross-platform multi-track audio editor/recorder for Windows, MacOS, GNU/Linux and other operating systems and is developed by a group of volunteers as open source software.
|
Tenacity is an easy-to-use, cross-platform multi-track audio editor/recorder for Windows, MacOS, GNU/Linux and other operating systems and is developed by a group of volunteers as open source software.
|
||||||
|
|
||||||
@ -38,4 +39,4 @@ Build instructions for Tenacity are available in the [BUILDING.md file](BUILDING
|
|||||||
|
|
||||||
### Translation
|
### Translation
|
||||||
|
|
||||||
Thank you to Weblate for providing translation SaaS hosting at [weblate.org](https://hosted.weblate.org/projects/tenacity/tenacity/).
|
Thank you to Weblate for providing translation SaaS hosting at [weblate.org](https://hosted.weblate.org/projects/tenacity/tenacity/).
|
||||||
|
@ -246,7 +246,7 @@ macro( resolve_conan_dependencies )
|
|||||||
OPTIONS ${CONAN_PACKAGE_OPTIONS}
|
OPTIONS ${CONAN_PACKAGE_OPTIONS}
|
||||||
")
|
")
|
||||||
|
|
||||||
if(MSVC OR XCODE)
|
if(MSVC OR XCODE AND NOT DEFINED CMAKE_BUILD_TYPE)
|
||||||
foreach(TYPE ${CMAKE_CONFIGURATION_TYPES})
|
foreach(TYPE ${CMAKE_CONFIGURATION_TYPES})
|
||||||
_conan_install(${TYPE})
|
_conan_install(${TYPE})
|
||||||
endforeach()
|
endforeach()
|
||||||
|
@ -14,8 +14,6 @@
|
|||||||
UTILITY_API void lib_utility_dummy_symbol()
|
UTILITY_API void lib_utility_dummy_symbol()
|
||||||
{}
|
{}
|
||||||
|
|
||||||
#ifdef __APPLE__
|
|
||||||
|
|
||||||
constexpr auto sizeof_align_val = sizeof(std::align_val_t);
|
constexpr auto sizeof_align_val = sizeof(std::align_val_t);
|
||||||
|
|
||||||
void *NonInterferingBase::operator new(std::size_t count, std::align_val_t al)
|
void *NonInterferingBase::operator new(std::size_t count, std::align_val_t al)
|
||||||
@ -54,5 +52,3 @@ void NonInterferingBase::operator delete(void *ptr, std::align_val_t al)
|
|||||||
// Call through to default operator
|
// Call through to default operator
|
||||||
::operator delete(p);
|
::operator delete(p);
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif
|
|
||||||
|
@ -594,10 +594,21 @@ struct UTILITY_API alignas(
|
|||||||
64 /* ? */
|
64 /* ? */
|
||||||
#endif
|
#endif
|
||||||
)
|
)
|
||||||
|
|
||||||
NonInterferingBase {
|
NonInterferingBase {
|
||||||
#ifdef __APPLE__
|
|
||||||
static void *operator new(std::size_t count, std::align_val_t al);
|
static void *operator new(std::size_t count, std::align_val_t al);
|
||||||
static void operator delete(void *ptr, std::align_val_t al);
|
static void operator delete(void *ptr, std::align_val_t al);
|
||||||
|
|
||||||
|
#if defined (_MSC_VER) && defined(_DEBUG)
|
||||||
|
// Versions that work in the presence of the DEBUG_NEW macro.
|
||||||
|
// Ignore the arguments supplied by the macro and forward to the
|
||||||
|
// other overloads.
|
||||||
|
static void *operator new(
|
||||||
|
std::size_t count, std::align_val_t al, int, const char *, int)
|
||||||
|
{ return operator new(count, al); }
|
||||||
|
static void operator delete(
|
||||||
|
void *ptr, std::align_val_t al, int, const char *, int)
|
||||||
|
{ return operator delete(ptr, al); }
|
||||||
#endif
|
#endif
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -1137,13 +1137,16 @@ if( CMAKE_SYSTEM_NAME MATCHES "Windows" )
|
|||||||
)
|
)
|
||||||
|
|
||||||
# Copy the VC runtime libraries as well
|
# Copy the VC runtime libraries as well
|
||||||
add_custom_command(
|
if(NOT "_X${CMAKE_INSTALL_SYSTEM_RUNTIME_LIBS}" STREQUAL "_X")
|
||||||
TARGET
|
add_custom_command(
|
||||||
${TARGET}
|
TARGET
|
||||||
COMMAND
|
${TARGET}
|
||||||
${CMAKE_COMMAND} -E copy ${CMAKE_INSTALL_SYSTEM_RUNTIME_LIBS} ${_DEST}
|
COMMAND
|
||||||
POST_BUILD
|
${CMAKE_COMMAND} -E copy ${CMAKE_INSTALL_SYSTEM_RUNTIME_LIBS} ${_DEST}
|
||||||
)
|
POST_BUILD
|
||||||
|
)
|
||||||
|
endif()
|
||||||
|
|
||||||
elseif( CMAKE_SYSTEM_NAME MATCHES "Darwin" )
|
elseif( CMAKE_SYSTEM_NAME MATCHES "Darwin" )
|
||||||
# Bug 2400 workaround
|
# Bug 2400 workaround
|
||||||
#
|
#
|
||||||
|
@ -716,6 +716,22 @@ char *FileNames::VerifyFilename(const wxString &s, bool input)
|
|||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
bool FileNames::WritableLocationCheck(const FilePath& path)
|
||||||
|
{
|
||||||
|
bool status = wxFileName::IsDirWritable(path);
|
||||||
|
|
||||||
|
if (!status)
|
||||||
|
{
|
||||||
|
AudacityMessageBox(
|
||||||
|
XO("Directory %s does not have write permissions")
|
||||||
|
.Format(path),
|
||||||
|
XO("Error"),
|
||||||
|
wxOK | wxICON_ERROR);
|
||||||
|
}
|
||||||
|
|
||||||
|
return status;
|
||||||
|
}
|
||||||
|
|
||||||
// Using this with wxStringArray::Sort will give you a list that
|
// Using this with wxStringArray::Sort will give you a list that
|
||||||
// is alphabetical, without depending on case. If you use the
|
// is alphabetical, without depending on case. If you use the
|
||||||
// default sort, you will get strings with 'R' before 'a', because it is in caps.
|
// default sort, you will get strings with 'R' before 'a', because it is in caps.
|
||||||
|
@ -221,6 +221,9 @@ namespace FileNames
|
|||||||
AUDACITY_DLL_API char *VerifyFilename(const wxString &s, bool input = true);
|
AUDACITY_DLL_API char *VerifyFilename(const wxString &s, bool input = true);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
//! Check location on writable access and return true if checked successfully.
|
||||||
|
AUDACITY_DLL_API bool WritableLocationCheck(const FilePath& path);
|
||||||
|
|
||||||
// wxString compare function for sorting case, which is needed to load correctly.
|
// wxString compare function for sorting case, which is needed to load correctly.
|
||||||
AUDACITY_DLL_API int CompareNoCase(const wxString& first, const wxString& second);
|
AUDACITY_DLL_API int CompareNoCase(const wxString& first, const wxString& second);
|
||||||
|
|
||||||
|
@ -171,8 +171,8 @@ private:
|
|||||||
field(sel0, double);
|
field(sel0, double);
|
||||||
field(sel1, double);
|
field(sel1, double);
|
||||||
#ifdef EXPERIMENTAL_SPECTRAL_EDITING
|
#ifdef EXPERIMENTAL_SPECTRAL_EDITING
|
||||||
field(selLow, double);
|
field(selLow, double) = SelectedRegion::UndefinedFrequency;
|
||||||
field(selHigh, double);
|
field(selHigh, double) = SelectedRegion::UndefinedFrequency;
|
||||||
#endif
|
#endif
|
||||||
field(rate, double);
|
field(rate, double);
|
||||||
field(snapto, bool);
|
field(snapto, bool);
|
||||||
|
@ -63,6 +63,11 @@ void DoExport(AudacityProject &project, const FileExtension &format)
|
|||||||
// We either use a configured output path,
|
// We either use a configured output path,
|
||||||
// or we use the default documents folder - just as for exports.
|
// or we use the default documents folder - just as for exports.
|
||||||
FilePath pathName = FileNames::FindDefaultPath(FileNames::Operation::MacrosOut);
|
FilePath pathName = FileNames::FindDefaultPath(FileNames::Operation::MacrosOut);
|
||||||
|
|
||||||
|
if (!FileNames::WritableLocationCheck(pathName))
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
/*
|
/*
|
||||||
// If we've gotten to this point, we are in batch mode, have a file format,
|
// If we've gotten to this point, we are in batch mode, have a file format,
|
||||||
// and the project has either been saved or a file has been imported. So, we
|
// and the project has either been saved or a file has been imported. So, we
|
||||||
|
@ -38,6 +38,7 @@
|
|||||||
#include "../widgets/AudacityMessageBox.h"
|
#include "../widgets/AudacityMessageBox.h"
|
||||||
#include "../widgets/ReadOnlyText.h"
|
#include "../widgets/ReadOnlyText.h"
|
||||||
#include "../widgets/wxTextCtrlWrapper.h"
|
#include "../widgets/wxTextCtrlWrapper.h"
|
||||||
|
#include "../FileNames.h"
|
||||||
|
|
||||||
using namespace FileNames;
|
using namespace FileNames;
|
||||||
using namespace TempDirectory;
|
using namespace TempDirectory;
|
||||||
@ -267,22 +268,6 @@ void DirectoriesPrefs::PopulateOrExchange(ShuttleGui &S)
|
|||||||
S.EndScroller();
|
S.EndScroller();
|
||||||
}
|
}
|
||||||
|
|
||||||
bool WritableLocationCheck(const FilePath &path)
|
|
||||||
{
|
|
||||||
bool Status = wxFileName ::IsDirWritable(path);
|
|
||||||
if (!Status)
|
|
||||||
{
|
|
||||||
AudacityMessageBox(
|
|
||||||
XO("Directory %s does not have write permissions")
|
|
||||||
.Format(path),
|
|
||||||
XO("Error"),
|
|
||||||
wxOK | wxICON_ERROR);
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
void DirectoriesPrefs::OnTempBrowse(wxCommandEvent &evt)
|
void DirectoriesPrefs::OnTempBrowse(wxCommandEvent &evt)
|
||||||
{
|
{
|
||||||
wxString oldTemp = gPrefs->Read(PreferenceKey(Operation::Open, PathType::_None),
|
wxString oldTemp = gPrefs->Read(PreferenceKey(Operation::Open, PathType::_None),
|
||||||
@ -311,7 +296,7 @@ void DirectoriesPrefs::OnTempBrowse(wxCommandEvent &evt)
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (WritableLocationCheck(dlog.GetPath()))
|
if (!FileNames::WritableLocationCheck(dlog.GetPath()))
|
||||||
{
|
{
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@ -392,7 +377,7 @@ void DirectoriesPrefs::OnBrowse(wxCommandEvent &evt)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (WritableLocationCheck(dlog.GetPath()))
|
if (!FileNames::WritableLocationCheck(dlog.GetPath()))
|
||||||
{
|
{
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user