... This affects those keys (and NUMPAD arrows), also (shift-)ctrl-f6,
ctrl-home, ctrl-end (which are command-left and right on mac)
Those should be tested to ensure correct restoration of the yellow rectangle,
appropriately in the tracks or the ruler.
This should also be tested with and without the Tracks preference for cyclic
movement of the focus.
... So it does not depend on the focused window, and can work when selection
toolbar has focus. But TrackPanel's escape handling may still take precedence
over it.
... for functions in final classes.
override is like const -- it's not necessary, but it helps the compiler to
catch mistakes.
There may be some overriding functions not explicitly declared virtual and I did
not identify such cases, in which I might also add override.
... Should have no effect on generated code, except perhaps some slight faster
virtual function calls. Mostly useful as documentation of design intent.
Tried to mark every one of our classes that inherits from another, or is a
base for others, or has abstract virtual functions, and a few others besides.
The residual issue here was that an old cfg could go on using the unsafe path. So we check for the unsafe path at init and silently substitute the good path. If the user attempts to re-instate the unsafe path we tell them no, with an informative message. This change was made more complex by windows allowing different strings for the same path, specifically C:\Users\JAMESC~1\AppData\Local\Temp\audacity_temp contains the shortening '~' so in the function that tests 'IsTempDirectoryNameOK' we use GetLongPath() to always compare the expanded names.
I also changed directory prefs to add SessionData rather than audacity_temp on the new directory name, on windows when choosing a new temp directory.
Several other issues were also fixed (hopefully ;-)).
This is a major change to accelerator handling and keyboard
capturing. Menu shortcuts, non-menu commands, label editing,
navigation, and basically anything else were you might use
the keyboard should be thoroughly tested.
It had been causing problems in Unity for a while now and they
were missing on OSX as well in wx3. So, the old menu Open/Close
method of hiding has been removed and replaced with an event
filter/monitor which looks for wxEVT_CHAR_HOOK events to pass
key events to the handler that has the keyboard captured.
This captures crashes on Windows along with the stack backtrace.
On Linux (fedora 21 at least), the necessary function to enable
capture is not included in the system wx libs. But, a self built
version works fine and capture the backtrace, so I'm assuming
other distros will probably work as well.
On OSX, the crashes are caught, but it does not include the
backtrace.
But, really, the backtraces aren't all that useful in a release
build since we don't ship with debug symbols and optimization
plays havoc with proper backtraces anyway.
The real benefit will be for the support folks as they can now
get consistent info from user by asking the to generate a report
from the "Help->Generate Support Data" menu item.
This puts the single instance checker back to pre-13868
behavior, so we're back to being able to open multiple
instance if the temp directory is different in portable
settings.
The access violation has apparently been happening for
quite a while, just hidden because it happened when
additional Audacity instances were executed and the DDE
command was sent to the first instance. After sending
the command, the connection was disconnected, but the
object had already been deleted by the command execution
so a first-chance exception was triggered.
Command line parsing has been revised and used
for the primary Audacity command line as well as
any secondary Audacity executions.
This way if multiple filenames are included on
the secondary executions, then we now pass ALL
of the filenames instead of just the first one.
Seem there's either a critter in the wx2812 socket IPC code (the
socket processing was rewritten for the wx3 series) that could
cause Audacity to hang during startup if more than 1 file was
opened at the same time. It was hit or miss, but more hit than
miss and was likely to occur when opening multiple files in a
file manager.
This fix was to stop using the wx2 IPC code and craft our own
basic startup messaging.
The problem was that different temp directories can
be specified when using Portable Settings. This caused
the single instance checker to look for it's lock file
in different locations so it was unable to detect that
another instance was running.
This changes the directory for the lock file to be the
user's home directory (which is the default for the checker
anyway). This allow the user to still specify different
temp directories in the Portable Settings and ensure's
that only one instance (per user) ever runs.
It now checks the single instance before initializing
preferences since preferences are modified during initialization
which could interere with an already running instance.
In addition, the Mac now uses the DDE IPC startup to
ensure all files are opened by the single Audacity instance.
Normally this is not needed since we also support the OSX
mechanism for opening by an existing process. But, that
only works if the exact same Audacity.app is used. There
are instances when this is not always the case.
I also ran across a problem with language initialization.
Since preferences were initialized before the locale was set,
dialogs would be shown in English. I've made a change that sets
the language to the system language until the preferences are
loaded and then resets it to the user selected language.
Solves the problem of what the "Settings" button should say
by converting it to a bitmap button.
Adds the missing "bypass effect" button.
The Ok/Cancel buttons are now Apply/Close buttons and the
dialog stays open after the apply is done.
Record is no longer disabled when an RTP effect is open as
the RTP effect now monitors when recording starts and disables
its buttons as needed.
Added "Play", "Skip forward", and "Skip backward" buttons.
While the other stuff is required, this last one is in to
get a feel for its usefulness. We'll need to get feedback
on it pretty quickly so we can rip it out if need be.
Warning...this required a small hack that allowed updating the
menus even if the toplevel frame is not the project window. This
is because with the active frame actually becomes the effect dialog
and UpdateMenus() bailed if it wasn't the project frame.
This should be removed when we get multiple effect support.
I've made it where you can enable and disable via experimentals:
EXPERIMENTAL_REALTIME_EFFECTS
EXPERIMENTAL_EFFECTS_RACK
You will notice that, as of now, the only effects currently set up for
realtime are VSTs. Now that this is in, I will start converting the
rest.
As I start to convert the effects, the astute of you may notice that
they no longer directly access tracks or any "internal" Audacity
objects. This isolates the effects from changes in Audacity and makes
it much easier to add new ones.
Anyway, all 3 platforms can now display VST effects in graphical mode.
Yes, that means Linux too. There are quite a few VSTs for Linux if
you search for them.
The so-called "rack" definitely needs some discussion, work, and attention
from someone much better at graphics than me. I'm not really sure it should
stay in as-is. I'd originally planned for it to be simply a utility window
where you can store your (preconfigured) favorite effects. It should probably
revert back to that idea.
You may notice that this DOES include the API work I did. The realtime effects
were too tied to it and I didn't want to redo the whole thing. As I mentioned
elsewhere, the API stuff may or may not be very future proof.
So, let the critter complaints commence. I absolute KNOW there will be some.
(I know I'll be hearing from the Linux peeps pretty darn quickly. ;-))
This is after reading a note in the release notes for wxWidgets 3.0.0. We need an event loop running to show a dialog in 3.0.0 (even though the splash screen works without).
This is an older one...originally from 2011. Bug says it all, but basically it allows logging
to begin immediately upon startup for all platforms. And it has multithreading protection, so
it should now be safe to log from the non-GUI threads.
I refactored the code into AudacityApp with a new timer. This is provisional pending discussion - if it is decided that it should go somewhere else I will move it.