Commit Graph

18308 Commits

Author SHA1 Message Date
nick_m
c9864b71a0 ResizeNoteDrag selection click behaves as NoteDrag's does. 2015-10-24 01:19:00 +11:00
nick_m
96524d863b Clear point selection when uniquely selecting a note.
- Also fix selection undo when creating notes w/control
	  in MouseContent mode.
2015-10-24 00:07:03 +11:00
96c6da0804 Make mackie control view mode save bank for all modes.
Also moved duplicated code to one function.
2015-10-22 15:30:34 -07:00
f4100dc529 mime-type definition is version independent.
File glob "*.ardour" -> application/x-ardour is defined in ardour.xml
2015-10-22 21:05:20 +02:00
nick_m
4f5ca7ecb5 Use lwrcase_dirname for desktop file names and substitutions. 2015-10-23 04:03:16 +11:00
a02ffb9eed set executable and icon name in desktop-file
Also opt for version-agnostic mime-type (file-format version
is independent of program-version and of file-extension)
2015-10-22 18:09:16 +02:00
b074ff0dd5 Remove GhostRegion::CatchDeletion signal to reduce session close times
Currently when a GhostRegion is deleted by its "parent" RegionView it emits the
static GhostRegion::CatchDeletion signal which is connected to the
RegionView::remove_ghost method of every RegionView instance.

With a static GhostRegion::CatchDeletion signal a particular test session
causes 31 Million calls of RegionView::remove_ghost on Session deletion and the
session takes 70 seconds to close with a debug build.

The lifetime of a ghost region is tied to both the TimeAxisView(TAV) and
RegionView(RV) in that when a RegionView is deleted all GhostRegion instances
associated with the RegionView should be deleted or when a TimeAxisView is
deleted all ghost regions that are contained in the view should be deleted.

This means that there needs to be notification between GhostRegion and both
classes. Instead of using a signal for this as we know there are only two
listeners and GhostRegion already holds a reference to the TimeAxisView, also
take a reference to the parent RegionView in the GhostRegion constructor and
use it to notify the RegionView when GhostRegion destructor is called so it can
drop any references it holds.

Using a direct function call in the GhostRegion destructor to notify the
TimeAxisView and RegionView "parents" brings the unload/close time down for the
test session from 70 seconds to 4.5 seconds.

The GhostRegion also references canvas items that are added to the TimeAxisView
canvas group or at least a canvas group that it manages. So when the
TimeAxisView is destroyed and the canvas group that is the parent of those
items is destroyed, the GhostRegion's canvas items will also be
deleted/destroyed by the parent canvas item/group. This means the GhostRegions
must be destroyed when the TimeAxisView they are contained in is destroyed or
there will be dangling references to canvas items that have already been
deleted and trying to delete them again will be bad.
2015-10-22 11:51:03 -04:00
55e8f6ac30 Enable i18n for info/error messages in MidiPatchManager 2015-10-22 11:51:03 -04:00
e93ba53309 Only parse additional Session midnam files on Session load
When loading a Session add the Session patchfiles directory to the
MidiPatchManager search path and only process/parse the files for that
directory rather than refreshing/reparsing all the files. Similarly for unload,
just unload the devices that are from the Session specific midnam files instead
of removing the path and refreshing/reparsing all the files.

This will not remove the "system" midnam files as they are always added first
and duplicates from the session patchfiles directory are ignored.
2015-10-22 11:51:03 -04:00
efc26a0490 Store the file path when constructing MidiNameDocument
This is so we can compare and see if we have already parsed the file
2015-10-22 11:51:03 -04:00
689862cafb Decouple Session from MidiPatchManager and reduce parsing of midnam xml files
The MidiPatchManager only requires a reference to the session to get the path
to the Session midnam directory so change it so that the path is passed to
MidiPatchManager::add_search_path on Session construction and removed on
Session Destruction. This will also make it easier to test and reduce compile
times etc.

For the common case where the Session doesn't have a Session specific midnam
patch files directory(for instance a new session) it won't cause a refresh and
reparsing of all the midnam files. This saves about 2 seconds to load a Session
on my machine(fast machine with SSD), or about half the time spent in the
Session constructor for a new session.

There is still going to be that initial cost of parsing the midnam files when
the first session is created after starting Ardour. Options to remove that
would be to parse the files asynchronously and or use a faster xml
parser(eventually), neither of which seem worth doing at this stage.

This change will cause a performance regression for the uncommon case where a
Session with Session specific midnam files is unloaded and then another Session
with Session specific midnam files is loaded as it will cause the common midnam
files in midi_patch_path to be parsed twice(unload and load).
2015-10-22 11:51:03 -04:00
3bd928591b Add PBD::Searchpath::contains method to check if a Searchpath contains a path 2015-10-22 11:51:03 -04:00
c07ea1bc73 Expose protected PBD::Searchpath API
I prefer to use these as they are more explicit than using the overloaded
operators.
2015-10-22 11:51:03 -04:00
76d43487da Don't parse midnam patch files contained in Session twice
MidiPatchManager::refresh already adds the patch files contained in the session
folder
2015-10-22 11:51:03 -04:00
ee9f369e38 Refactor common code in MidiPatchManager class into new method 2015-10-22 11:51:02 -04:00
9fd75e33fe Don't call MidiPatchManager::refresh when creating MidiPatchManager instance
Currently when loading a session for the first time MidiPatchManager::instance
creates the MidiPatchManager singleton which calls MPM::refresh and all the
midnam files are parsed etc. MPM::set_session is then immediately called and
all the MPM state that has just been set when parsing all the midnam files is
cleared and the parsing of all the files is performed again but this time with
any session specific midnam patch files.

MPM::instance and MPM::set_session consume about 55% of the time spent in the
Session ctor according to kcachegrind and removing the double call to refresh
brings Session construction time for a particular test session down from 7.5s
to 5.5s
2015-10-22 11:51:02 -04:00
3c4f899a4f Fix a small buffer issue which could sometimes prevent sessions from being able to load
In the function 'LV2Plugin::add_state()' the snprintf() call can easily print 19 or even 20 bytes - so a 16-byte buffer wasn't large enough.
2015-10-22 16:37:00 +01:00
nick_m
0956708aa9 Build freedesktop files if requested. 2015-10-23 02:21:01 +11:00
nick_m
72556cdd7a Amend last commit. 2015-10-23 02:14:03 +11:00
nick_m
410d4316b9 Center some windows known to be presented by ardour. 2015-10-23 01:10:56 +11:00
d04c16e927 fix edge-case: (move playhead w/o session) 2015-10-22 14:14:27 +02:00
5bdc869e49 remove invalid assertion - #6634
There is a highly unlikely case where the render thread can have zero
requests in the queue, but it is not supposed to be terminated.

 1) WaveView::queue_get_image(); 
wake up thread, *but* the thread does not start yet
 2) WaveView::cancel_my_render_request(); 
and now the thread starts.

1,2 are initiated by user actions from the GUI thread and are normally
orders of magnitude slower than scheduler-thread wakeup.
2015-10-22 12:20:42 +02:00
d31ac095e0 Add some newly introduced sources to our MSVC project (libardour) 2015-10-22 09:19:02 +01:00
807e239dcb Merge branch 'chaot4-fix_overwrite_file' 2015-10-21 23:28:58 -04:00
André Nusser
2c4e79d0a0 Also use overwrite_file_dialog at all the other places. 2015-10-21 23:28:44 -04:00
André Nusser
5d50abed75 Confirmation on overwrite for track and session templates. -fixes #6587 2015-10-21 23:28:44 -04:00
André Nusser
67f557b1f4 Add overwrite option to save_template. (default = false)
Before it could not overwrite.
2015-10-21 23:28:44 -04:00
e4570242f3 fix automation update at transport stop when in automation Play mode 2015-10-21 23:06:40 -04:00
d4227faaee fix mute automation in Play automation state 2015-10-21 23:06:05 -04:00
8d3a8ca913 Add AutomationControl::set_value_unchecked() and AutomationControl::writable() and use them.
Classes derived from AutomationControl now check ::writable() in their ::set_value() methods to ensure that they
do not attempt to overwrite data sent to them while automation playback is underway.
2015-10-21 22:31:35 -04:00
6ca3a1593e add commentary and clean up blank lines 2015-10-21 22:31:35 -04:00
nick_m
217b2c7753 More desktop file renaming. 2015-10-22 03:51:15 +11:00
nick_m
cadeb3d009 Remove old ardour3 desktop files. 2015-10-22 02:54:53 +11:00
nick_m
203931e846 Add ardour4 desktop and mime type files.
- looks like the install target for these has been removed, but
	  the existence of these may be of help to packagers.
2015-10-22 02:46:18 +11:00
nick_m
54e613746c User interaction preferences tooltips clarify button names. 2015-10-22 01:23:36 +11:00
0880a166c4 variable name change: make purpose of formerly named "_values" in LV2 plugin UI code more clear
And if this is wrong, then rename it again with the right one
2015-10-21 08:10:25 -04:00
ea95bef27b variable name change: percent is 0..100, 0..1.0 is a fraction 2015-10-21 08:09:40 -04:00
6e7ca06f63 ensure that mutator function for CONFIG_VARIABLE_SPECIAL is used when assigning initial value during construction 2015-10-21 07:53:26 -04:00
7a453d2329 Make sure Mackie Control view modes start with route 1 except Mixer mode goes to last position. 2015-10-20 19:31:04 -07:00
81f6ad0d0c Added "Selected" view mode to Mackie Control. 2015-10-20 18:54:56 -07:00
f84798ff75 Fix crash in new CoreaudioSource code (on invalid file) 2015-10-21 03:12:45 +02:00
270ec425f8 confirm LV2 GUI changes
If a parameter change is initiated by the UI, the host sends a
notifications to confirm (echo) or invalidates (replaces) the value.
(automation: touch, playback,...).

Stateless LV2 GUIs without internal data-model depend on this.
2015-10-21 01:57:16 +02:00
4953d09893 hack to keep UI responsive with heavy AU views. 2015-10-20 19:14:14 +02:00
c22a899c6d OSX copy/constraint mod tweak (amend 0675fe1) 2015-10-20 17:57:00 +02:00
47bbffc5d8 do not update LV2 output port displays unless the value has changed 2015-10-20 11:39:56 -04:00
1d4494961b add commentary 2015-10-20 11:31:18 -04:00
8533b8244f also update LV2 output port displays as part of periodic updates 2015-10-20 11:28:53 -04:00
6ec32a70c1 fix AudioUnit parameter listening to work with new ParameterChangedExternally semantics 2015-10-20 10:25:36 -04:00
ac008dac02 Clean up generic and LV2 plugin GUI to deal with ParameterChanged(Externally) alteration 2015-10-20 10:23:49 -04:00
f806f059b3 rename Plugin::ParameterChanged to ParameterChangedExternally to reflect its intent, and clean up the libardour side of result.
The signal exists to notify listeners that something outside of the host's control (e.g. a plugin's own GUI for AU or VST)
has modified a plugin parameter. Previous code had strange feedback loops and ambiguous semantics.
2015-10-20 10:23:49 -04:00