1223c8d1cd
move termination of auto connect thread till after control protocols are destroyed.
...
Otherwise, control protocol ports don't actually get deleted
2016-12-18 00:07:59 +00:00
f80fb029e2
Prepare configurable mini-timeline time-span
2016-12-18 00:06:39 +01:00
7688d22456
remove channel filter status and button from MIDI track header, access via context menu
2016-12-17 17:59:08 +00:00
8405f642e7
fix gcc4 compilation (local type used in template)
2016-12-17 13:00:33 +01:00
705a7262a3
Refine transport tool bar layout
2016-12-17 02:43:42 +01:00
4a83bd80a5
Prepare mini-timeline widget for toolbar
2016-12-17 02:43:42 +01:00
fab1ef05bc
remove cruft
2016-12-17 02:43:42 +01:00
9dad10f691
Add UI to set global track layered mode
2016-12-17 02:43:42 +01:00
8ba7e8f4ef
Hide/remove per-track record-mode in favor of global setting.
2016-12-17 02:43:42 +01:00
85e4b1d98f
Move selection/punch clocks to editor Sidebar
2016-12-17 02:43:42 +01:00
1a25b906b3
Commence transport tool bar re-layout
2016-12-17 02:43:42 +01:00
a631706059
Rework shuttle control display
2016-12-17 02:43:42 +01:00
e1826f8b1c
Add API to query editor's playhead cursor position
2016-12-17 02:43:42 +01:00
cd64f17a9c
initial attempt at importing SMF tempo maps during MIDI import.
...
Still with debug output
2016-12-16 16:49:52 +00:00
73f8ffce63
add copy constructor, operator= and a clean ::dump() method for TempoMap
2016-12-16 16:49:27 +00:00
ebc7eabea2
add arguments (unusued) to control whether or not SMF tempo map is used during import
2016-12-16 14:57:14 +00:00
e487014e56
add arguments (unusued) to control whether or not SMF tempo map is used during import
2016-12-16 14:57:10 +00:00
8436f392b6
tweak presentation of SMF tempo option
2016-12-16 14:14:08 +00:00
7bf10eda75
show tempo information for MIDI files in preview pane; start to offer choice about using tempo map when importing
2016-12-16 13:46:13 +00:00
6a0ea65885
"toll free bridging" between smf_tempo_t and Evoral::SMF::Tempo
2016-12-16 13:45:43 +00:00
c0aa738395
expose SMF tempo information in Evoral::SMF
2016-12-16 10:43:52 +00:00
2378e7b60c
add function to get number of tempos found in SMF tempo map
2016-12-16 10:43:41 +00:00
fe0761d404
unused but slightly tricky code to add track name/instrument to an SMF file when saved
2016-12-16 09:36:52 +00:00
76dca432f0
add comments about limitations for Evoral::SMF and tracks
2016-12-16 09:36:52 +00:00
462c3eeb84
MIDI tracer actually changes the event-loop
2016-12-16 01:56:15 +01:00
c2f4399b3d
fix generic plugins for toggle with 2 scalepoints (enum)
...
Signed-off-by: Robin Gareus <robin@gareus.org>
2016-12-16 01:55:28 +01:00
6c88f339ca
some further invalidation details:
...
Prevent double unref during when the EventLoop terminates:
deleting the ringbuffer deletes all requests, some of which may
contain stale invalidation
remove the buffer_map_lock, now that signals ref-count the IR.
2016-12-15 18:19:38 +01:00
529b91828d
store InvalidationRecord in a Connection object and ref/unref it as appropriate
2016-12-15 16:36:50 +00:00
342c112ae3
add ::use_count() method to InvalidationRecord
2016-12-15 16:36:50 +00:00
nick_m
9a2450cafc
be a bit less flickery when redrawing tempo/meter markers.
2016-12-16 02:56:58 +11:00
nick_m
d118a60090
fix unused Outside filled framed curve for constant points outside the draw area.
2016-12-16 02:54:10 +11:00
nick_m
49c6d13386
revert c3ab67dd
now that this misbehaviour is understood.
2016-12-16 02:52:39 +11:00
nick_m
d3ad6dc001
fix issue with disappearing tempo curve at constant tempi.
2016-12-16 02:50:07 +11:00
nick_m
9add5ed480
tempo before the initial section is always constant.
2016-12-16 02:15:56 +11:00
nick_m
9afe719827
amend incomplete change in previous commit.
2016-12-16 02:01:50 +11:00
nick_m
a99331a4e9
more work on patch change redisplay.
...
- fixes just-introduced undo crash.
2016-12-16 01:58:58 +11:00
nick_m
2a79bcd6b2
fix thinko in TempoMap::framepos_plus_qn.
...
- affects region relative time conversion when
initial meter is non-zero.
2016-12-16 01:04:22 +11:00
c9444e048e
correct return syntax
2016-12-15 11:57:31 +00:00
cf4668a11e
std::list::erase() needs a non-const iterator.;
...
at least for some versions of gcc.
2016-12-15 11:40:22 +00:00
nick_m
cfbcadc7ef
speed up patch change redisplay when using scroomer / adjusting height.
...
- zoom is still a bit slow.
2016-12-15 22:35:23 +11:00
714da0f68e
and now with erase
2016-12-15 10:57:40 +01:00
71bfe79e2c
C++98 compatible iterator erase
2016-12-15 10:40:45 +01:00
a95be76741
rework request invalidation
...
This kills 2 birds with 1 stone: Removes the necessity of locks
and makes call_slot() realtime safe (req->invalidation->requests list
push_back). On object destruction, the invalidation-record (IR) itself is
invalidated.
Invalidated IRs are pushed onto a trash-pool and deleted in the event-loop
of the invalidated object (GUI thread) once all requests that reference it
have been processed.
One last detail remains: PBD::signal connect should reference the IR
and disconnect unreference it. This will guarantee that signal emission
will not reference the IR while the pool trash is dropped.
2016-12-15 06:11:30 +01:00
62b06fa427
Add a trash pool for invalidation requests.
...
While EventLoop::invalidate_request() does invalidate request in the
request-list. It does *not* invalidate requests in the
per-thread-request-ringbuffer(s).
The invalidation record cannot be deleted in EventLoop::invalidate_request
see 6b5891a78f
.
2016-12-14 22:39:25 +01:00
07bcdc7f0a
NO-OP: re-indent
2016-12-14 22:39:22 +01:00
77845f6019
Atomically to invalidate request
...
Yet another slightly overkill approach, but it /may/ explain crashes.
2016-12-14 22:39:18 +01:00
7dbdf6cc6d
Add some more invalidation debug messages.
2016-12-14 19:43:12 +01:00
6b5891a78f
The threading anecdotes - Episode 7
...
When do_request() destroys the receiver object, the receiver will
free the invalidation record. So the IR needs to be removed from the list
before executing the request.
Invalid read of size 8
at: AbstractUI<Gtkmm2ext::UIRequest>::handle_ui_requests() (abstract_ui.cc:242)
by: BaseUI::request_handler(Glib::IOCondition) (base_ui.cc:141)
by: sigc::bound_mem_functor1<bool, BaseUI, Glib::IOCondition>::operator()(Glib::IOCondition const&) const (mem_fun.h:2066)
by: sigc::adaptor_functor<sigc::bound_mem_functor1<bool, BaseUI, Glib::IOCondition> >::deduce_result_type<Glib::IOCondition const&, void, void, void, void, void, void>::type sigc::adaptor_functor<sigc::bound_mem_functor1<bool, BaseUI, Glib::IOCondition> >::operator()<Glib::IOCondition const&>(Glib::IOCondition const&) const (adaptor_trait.h:89)
by: sigc::internal::slot_call1<sigc::bound_mem_functor1<bool, BaseUI, Glib::IOCondition>, bool, Glib::IOCondition>::call_it(sigc::internal::slot_rep*, Glib::IOCondition const&) (slot.h:148)
by: sigc::slot1<bool, Glib::IOCondition>::operator()(Glib::IOCondition const&) const (slot.h:643)
by: cross_thread_channel_call_receive_slot(_GIOChannel*, GIOCondition, void*) (crossthread.cc:49)
by: g_main_context_dispatch (in /lib/x86_64-linux-gnu/libglib-2.0.so.0.5000.2)
by: ??? (in /lib/x86_64-linux-gnu/libglib-2.0.so.0.5000.2)
by: g_main_loop_run (in /lib/x86_64-linux-gnu/libglib-2.0.so.0.5000.2)
by: gtk_main (in /usr/lib/x86_64-linux-gnu/libgtk-x11-2.0.so.0.2400.31)
by: Gtkmm2ext::UI::run(Receiver&) (gtk_ui.cc:286)
by main (main.cc:408)
Addrd1b8 is 24 bytes inside a block of size 48 free'd
at: operator delete(void*) (vg_replace_malloc.c:576)
by: PBD::EventLoop::invalidate_request(void*) (event_loop.cc:98)
by: sigc::internal::trackable_callback_list::~trackable_callback_list() (in /usr/lib/x86_64-linux-gnu/libsigc-2.0.so.0.0.0)
by: sigc::trackable::notify_callbacks() (in /usr/lib/x86_64-linux-gnu/libsigc-2.0.so.0.0.0)
by: ProcessorEntry::LuaPluginDisplay::~LuaPluginDisplay() (processor_box.cc:1757)
by: ProcessorEntry::LuaPluginDisplay::~LuaPluginDisplay() (processor_box.cc:1760)
by: ProcessorEntry::~ProcessorEntry() (processor_box.cc:251)
2016-12-14 18:46:01 +01:00
518c31eeb7
skip dead threads (if the event remains, it'll be cleaned up below)
2016-12-14 17:48:44 +01:00
036390f4c2
fix potential invalid lock
2016-12-14 17:31:31 +01:00