Robin Gareus
8c81e40028
Amend 45b940d (v2 session bus convert)
2026-01-01 23:19:11 +01:00
Robin Gareus
c50bf3d113
Force message dialog on top when no parent is set
2026-01-01 23:05:41 +01:00
Robin Gareus
45b940d648
Convert v2 and v3 busses to modern Ardour #10089
2026-01-01 22:28:52 +01:00
Robin Gareus
5677d30d3e
Fix loading 2.x sessions (forced set_active toggle)
2026-01-01 22:17:21 +01:00
Robin Gareus
1423f13f49
Ardour is now as old as Kurt Cobain, Jimi Hendrix, Janis Joplin, Jim Morrison, Amy Winehouse,...
2026-01-01 13:51:50 +01:00
Ayan Shafqat
730e4425dc
aarch64: apply absolute value to peak computation
2025-12-30 10:51:29 -05:00
Ayan Shafqat
98eab68044
aarch64: fix unaligned count and peak computation
...
Clamp misaligned prefix loops to the remaining frame count to avoid
nframes underflow and potential out-of-bounds access for small buffers.
Apply vabsq_f32() to all SIMD loads before peak reduction to ensure
correct absolute peak calculation in unrolled NEON paths.
2025-12-29 20:12:43 -05:00
Aleksandr Prokudin
b673989763
Update Russian translation for 9.0, part 1
2025-12-29 23:59:18 +01:00
Paul Davis
bb973f18dc
remove debug output
2025-12-29 15:56:56 -07:00
Paul Davis
c8a4260f5c
rename some variables in Session::import_files to make their purpose more clear
2025-12-29 15:51:04 -07:00
Paul Davis
1ee76f4178
Fix for importing SMF Type 1 files with one track containing only meta-data ( #10076 )
...
This fails when done via direct import into a cue slot which assumes that all sources created
must be associated with the region, and that each source must have a model.
This change drops the metadata-only track/source from being returned by Session::import_files()
Note that in order to avoid refcnt'ing from prolonging the life of the source we want to drop,
we do not announce the sources when they are created, but defer that until we know they are
going to be used post-import
2025-12-29 15:48:38 -07:00
Paul Davis
30de221be5
libardour: add FileSource::mark_removable()
...
This might not actually be necessary, but the symmetry is nice
2025-12-29 15:40:01 -07:00
Paul Davis
4c5ed82045
NO-OP: remove some newlines
2025-12-29 15:39:11 -07:00
Paul Davis
6078712314
Point::sample() rename, but for the GUI
2025-12-29 09:14:02 -07:00
Paul Davis
8f815e21ea
temporal: rename Point::sample() to Point::sample_is_dangerous()
...
It is risky to take the sample value returned by this method and then convert it back
to either superclocks or beats, mostly because tempo & meter times are generally in
music time, and converting from superclocks to samples loses precision.
This rename is there to serve as a reminder to developers to be careful when using
this method
2025-12-29 09:14:02 -07:00
Robin Gareus
22eee12f55
Fix crash when changing aux-panner state #10077
...
MixerStrip::show_send() may unset _panner if the send
has no panner. When then triggering an action that emits
`Pannable::automation_state_changed` (like un/link send panners)
of the main panner, Ardour crashed.
Note that PannerUI::set_panner already handed that case.
2025-12-29 09:56:42 +01:00
Robin Gareus
41c90a2063
Fix MIDI import edge-case when doubling allocation is insufficient
...
MIDI file from #10079 - see also 65332e603b
2025-12-29 09:23:56 +01:00
Krzysztof Gajdemski
8b2ede4d1a
Update Polish translation
2025-12-29 09:03:01 +01:00
Paul Davis
369fc2c15c
temporal: fix a major thinko when removing/replacing map points
...
Despite comments already in the code, the logic used to remove a
{Tempo,Meter,BarTime} point from the _points list was incorrect. While it is
true that we can use a duple of (type,time) to find a given point,
::remove_point() was not doing that and instead assumed just the time value
could be used.
This meant that if you placed a tempo and meter at the same point in time, then
changed one of them, ::remove_point() could remove the wrong point from the
_points list.
In #10063 this manifests as the wrong grid being drawn after a tempo point
edit.
This commit alters the ::core_remove_xxx() methods to return a pointer to the
actual Point object that was removed from {_tempos,_meters,_bartimes} and then
we pass that to ::remove_point() for lookup and removal by address.
It also "fixes" a couple of instances of ::core_remove_xxx() without any
removal from the _points list (since ::core_remove_tempo() and
::core_remove_meter() do not do this; ::core_remove_bartime() does,
however). It is not immediately obvious what bad behavior would arise from the
existing code in these cases, but it seems clearly incorrect that the _points
list would contain points no longer present in _tempos or _meters.
2025-12-27 12:14:49 -07:00
Paul Davis
f1b80cdbe1
temporal: add & use a couple of TempMap methods for unit testing
2025-12-27 12:14:49 -07:00
Paul Davis
f742ef661b
temporal: slightly improve addRemoveTest
2025-12-27 12:14:49 -07:00
Paul Davis
fee0af27cf
temporal: new addRemoveTest unit test
2025-12-27 12:14:49 -07:00
Paul Davis
bd5b8b82a6
remove debug output
2025-12-27 12:14:49 -07:00
jujudusud
a64c8a83b9
Update the translation into French
2025-12-24 16:21:44 +01:00
Franke Burgarino
52e493b49b
Fix typo
2025-12-22 13:25:59 -06:00
Paul Davis
adf0d52872
fix editing of meter & tempo points
...
when these points have times set in beat time (which they nearly always do), converting
their superclock time to samples and back loses accuracy. this caused the TempoMap to
find the wrong earlier points in the map.
It is still up for consideration that the editing code ought to identify explicitly
that we're working on an existing point, or adding a new one, and avoid lookup
by time for the existing points
2025-12-21 21:49:19 -07:00
Edgar Aichinger
cf40d5d5d0
add translated string again after typo fix by Alexandr
2025-12-20 16:59:08 +01:00
Edgar Aichinger
ea940a3a53
update german translation
2025-12-20 16:58:43 +01:00
Aleksandr Prokudin
04aa1f6476
Fix a typo spotted by @edogawa
2025-12-20 15:32:59 +01:00
John Emmas
8a3b7f3701
A minor comment change
2025-12-20 12:27:09 +00:00
John Emmas
841ec1c838
Revert some code that got removed accidentally
...
...but keep the new code that's needed for Stephen's build
2025-12-20 12:14:53 +00:00
Robin Gareus
46a03a9328
Who needs unistd.h, now that we have glibmm?
2025-12-18 16:09:13 +01:00
Robin Gareus
d23bcd1685
Fix crash when repeatedly showing group menu
...
route_group_menu needs to be detached before
TimeAxisView::build_display_menu () deletes and recreates
the parent menu.
2025-12-18 03:43:45 +01:00
Robin Gareus
fbc4bc4437
Fix some more dangling references to RouteGroups
...
* do not bind a shared_ptr for Edit Group.
* copy by capture, fixes radio group to not retain a reference
2025-12-17 21:34:50 +01:00
Robin Gareus
635916bf7a
Fix crash when group becomes empty but has a subgroup
...
Session::route_removed_from_route_group() did not delete
the group when it had a subgroup associated with it.
This way it was possible to have an empty track-group that
resulted in various edge-case crashes/assert().
2025-12-17 18:35:45 +01:00
Robin Gareus
370c596322
Backport Mixbus reset-mixer script
2025-12-17 15:15:28 +01:00
Robin Gareus
e9c5c38beb
Fix crash when using group treeview w/o selection
2025-12-17 14:46:07 +01:00
Robin Gareus
13dc1b1058
Don't allow to deactivate master/monitor/surround busses
2025-12-17 14:40:21 +01:00
Paul Davis
a90edc3e1b
when the last route is removed from a RouteGroup-with-VCA, drop weak ref to VCA
2025-12-16 22:30:17 -07:00
Paul Davis
927e2d14dd
fix copy-n-paste coding that hid route groups in mixer UI
2025-12-16 21:45:34 -07:00
Paul Davis
e1f0a6b731
avoid crash during shutdown, caused by accessing a null session during pointer leave event handling
2025-12-16 20:21:23 -07:00
Paul Davis
8b1b1e2362
GroupTabs: use weak_ptr to manage RouteGroups
...
GroupTabs only get updated during ::render() (don't ask, don't tell),
and since there is no ::render() call during Session deletion, owning
a shared_ptr<RouteGroup> makes the RouteGroup outlive the session itself.
2025-12-16 20:20:28 -07:00
Robin Gareus
4ad6ffec3d
Fix crash at exit when route-groups are deleted by route drop ref
...
==1914112==ERROR: AddressSanitizer: heap-use-after-free on address 0x619000483688 at pc 0x7f5b10be03c5 bp 0x7fff55e36670 sp 0x7fff55e36668
READ of size 8 at 0x619000483688 thread T0
#0 0x7f5b10be03c4 in std::__shared_count<(__gnu_cxx::_Lock_policy)2>::__shared_count(std::__weak_count<(__gnu_cxx::_Lock_policy)2> const&, std::nothrow_t) /usr/include/c++/10/bits/shared_ptr_base.h:911
#1 0x7f5b1190ecee in std::__shared_ptr<ARDOUR::VCA, (__gnu_cxx::_Lock_policy)2>::__shared_ptr(std::__weak_ptr<ARDOUR::VCA, (__gnu_cxx::_Lock_policy)2> const&, std::nothrow_t) /usr/include/c++/10/bits/shared_ptr_base.h:1382
#2 0x7f5b1190cc3e in std::shared_ptr<ARDOUR::VCA>::shared_ptr(std::weak_ptr<ARDOUR::VCA> const&, std::nothrow_t) /usr/include/c++/10/bits/shared_ptr.h:417
#3 0x7f5b1190aaae in std::weak_ptr<ARDOUR::VCA>::lock() const /usr/include/c++/10/bits/shared_ptr.h:749
#4 0x7f5b118fea7e in ARDOUR::RouteGroup::remove(std::shared_ptr<ARDOUR::Route>) ../libs/ardour/route_group.cc:267
#5 0x7f5b118fde6e in ARDOUR::RouteGroup::remove_when_going_away(std::weak_ptr<ARDOUR::Route>) ../libs/ardour/route_group.cc:223
#6 0x7f5b11912d3d in void std::__invoke_impl<void, void (ARDOUR::RouteGroup::*&)(std::weak_ptr<ARDOUR::Route>), ARDOUR::RouteGroup*&, std::weak_ptr<ARDOUR::Route>&>(std::__invoke_memfun_deref, void (ARDOUR::RouteGroup::*&)(std::weak_ptr<ARDOUR::Route>), ARDOUR::RouteGroup*&, std::weak_ptr<ARDOUR::Route>&) /usr/include/c++/10/bits/invoke.h:73
#7 0x7f5b119128c8 in std::__invoke_result<void (ARDOUR::RouteGroup::*&)(std::weak_ptr<ARDOUR::Route>), ARDOUR::RouteGroup*&, std::weak_ptr<ARDOUR::Route>&>::type std::__invoke<void (ARDOUR::RouteGroup::*&)(std::weak_ptr<ARDOUR::Route>), ARDOUR::RouteGroup*&, std::weak_ptr<ARDOUR::Route>&>(void (ARDOUR::RouteGroup::*&)(std::weak_ptr<ARDOUR::Route>), ARDOUR::RouteGroup*&, std::weak_ptr<ARDOUR::Route>&) /usr/include/c++/10/bits/invoke.h:95
#8 0x7f5b119125bc in void std::_Bind<void (ARDOUR::RouteGroup::*(ARDOUR::RouteGroup*, std::weak_ptr<ARDOUR::Route>))(std::weak_ptr<ARDOUR::Route>)>::__call<void, , 0ul, 1ul>(std::tuple<>&&, std::_Index_tuple<0ul, 1ul>) /usr/include/c++/10/functional:416
#9 0x7f5b11911fdc in void std::_Bind<void (ARDOUR::RouteGroup::*(ARDOUR::RouteGroup*, std::weak_ptr<ARDOUR::Route>))(std::weak_ptr<ARDOUR::Route>)>::operator()<, void>() /usr/include/c++/10/functional:499
#10 0x7f5b11910e79 in void std::__invoke_impl<void, std::_Bind<void (ARDOUR::RouteGroup::*(ARDOUR::RouteGroup*, std::weak_ptr<ARDOUR::Route>))(std::weak_ptr<ARDOUR::Route>)>&>(std::__invoke_other, std::_Bind<void (ARDOUR::RouteGroup::*(ARDOUR::RouteGroup*, std::weak_ptr<ARDOUR::Route>))(std::weak_ptr<ARDOUR::Route>)>&) /usr/include/c++/10/bits/invoke.h:60
#11 0x7f5b1190f187 in std::enable_if<is_invocable_r_v<void, std::_Bind<void (ARDOUR::RouteGroup::*(ARDOUR::RouteGroup*, std::weak_ptr<ARDOUR::Route>))(std::weak_ptr<ARDOUR::Route>)>&>, void>::type std::__invoke_r<void, std::_Bind<void (ARDOUR::RouteGroup::*(ARDOUR::RouteGroup*, std::weak_ptr<ARDOUR::Route>))(std::weak_ptr<ARDOUR::Route>)>&>(std::_Bind<void (ARDOUR::RouteGroup::*(ARDOUR::RouteGroup*, std::weak_ptr<ARDOUR::Route>))(std::weak_ptr<ARDOUR::Route>)>&) /usr/include/c++/10/bits/invoke.h:110
#12 0x7f5b1190d26a in std::_Function_handler<void (), std::_Bind<void (ARDOUR::RouteGroup::*(ARDOUR::RouteGroup*, std::weak_ptr<ARDOUR::Route>))(std::weak_ptr<ARDOUR::Route>)> >::_M_invoke(std::_Any_data const&) /usr/include/c++/10/bits/std_function.h:291
#13 0x558120310619 in std::function<void ()>::operator()() const /usr/include/c++/10/bits/std_function.h:622
#14 0x7f5b10bcb0d6 in PBD::SignalWithCombiner<PBD::OptionalLastValue<void>, void ()>::operator()() ../libs/pbd/pbd/signals.h:508
#15 0x7f5b10bc779b in PBD::Destructible::drop_references() ../libs/pbd/pbd/destructible.h:33
#16 0x7f5b1196700f in ARDOUR::Session::destroy() ../libs/ardour/session.cc:822
#17 0x7f5b11962f93 in ARDOUR::Session::~Session() ../libs/ardour/session.cc:581
#18 0x7f5b119639a9 in ARDOUR::Session::~Session() ../libs/ardour/session.cc:582
#19 0x558120305a92 in close_session ../luasession/luasession.cc:366
#20 0x55812031911c in luabridge::FuncTraits<void (*)(), void (*)()>::call(void (*)(), luabridge::TypeListValues<void>) ../libs/lua/LuaBridge/detail/FuncTraits.h:73
#21 0x5581203151eb in luabridge::CFunc::Call<void (*)(), void>::f(lua_State*) ../libs/lua/LuaBridge/detail/CFunctions.h:244
#22 0x55812035701f in luaD_precall ../libs/lua/lua-5.3.5/ldo.c:434
#23 0x55812038f1bd in luaV_execute ../libs/lua/lua-5.3.5/lvm.c:1136
#24 0x5581203579a8 in luaD_call ../libs/lua/lua-5.3.5/ldo.c:499
#25 0x558120357a80 in luaD_callnoyield ../libs/lua/lua-5.3.5/ldo.c:509
#26 0x558120346f82 in f_call ../libs/lua/lua-5.3.5/lapi.c:943
#27 0x558120354e59 in luaD_rawrunprotected ../libs/lua/lua-5.3.5/ldo.c:142
#28 0x55812035924f in luaD_pcall ../libs/lua/lua-5.3.5/ldo.c:729
#29 0x558120347226 in lua_pcallk ../libs/lua/lua-5.3.5/lapi.c:969
#30 0x558120393ae9 in LuaState::do_command(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >) ../libs/lua/luastate.cc:64
#31 0x558120306da8 in interactive_interpreter ../luasession/luasession.cc:514
#32 0x558120307b36 in main ../luasession/luasession.cc:641
#33 0x7f5b0e40dd79 in __libc_start_main ../csu/libc-start.c:308
#34 0x558120303179 in _start (/home/rgareus/src/ardour/build/luasession/luasession+0x7a179)
0x619000483688 is located 264 bytes inside of 952-byte region [0x619000483580,0x619000483938)
freed by thread T0 here:
#0 0x7f5b12cac467 in operator delete(void*, unsigned long) ../../../../src/libsanitizer/asan/asan_new_delete.cpp:172
#1 0x7f5b118fc486 in ARDOUR::RouteGroup::~RouteGroup() ../libs/ardour/route_group.cc:168
#2 0x7f5b11c1c34b in std::_Sp_counted_ptr<ARDOUR::RouteGroup*, (__gnu_cxx::_Lock_policy)2>::_M_dispose() /usr/include/c++/10/bits/shared_ptr_base.h:380
#3 0x55812031249a in std::_Sp_counted_base<(__gnu_cxx::_Lock_policy)2>::_M_release() /usr/include/c++/10/bits/shared_ptr_base.h:158
#4 0x7f5b10bf9ac4 in std::__shared_count<(__gnu_cxx::_Lock_policy)2>::operator=(std::__shared_count<(__gnu_cxx::_Lock_policy)2> const&) /usr/include/c++/10/bits/shared_ptr_base.h:752
#5 0x7f5b11915cac in std::__shared_ptr<ARDOUR::RouteGroup, (__gnu_cxx::_Lock_policy)2>::operator=(std::__shared_ptr<ARDOUR::RouteGroup, (__gnu_cxx::_Lock_policy)2> const&) /usr/include/c++/10/bits/shared_ptr_base.h:1182
#6 0x7f5b11915cd6 in std::shared_ptr<ARDOUR::RouteGroup>::operator=(std::shared_ptr<ARDOUR::RouteGroup> const&) /usr/include/c++/10/bits/shared_ptr.h:358
#7 0x7f5b11915b75 in ARDOUR::RouteGroupMember::set_route_group(std::shared_ptr<ARDOUR::RouteGroup>) ../libs/ardour/route_group_member.cc:36
#8 0x7f5b118fe9fe in ARDOUR::RouteGroup::remove(std::shared_ptr<ARDOUR::Route>) ../libs/ardour/route_group.cc:265
#9 0x7f5b118fde6e in ARDOUR::RouteGroup::remove_when_going_away(std::weak_ptr<ARDOUR::Route>) ../libs/ardour/route_group.cc:223
#10 0x7f5b11912d3d in void std::__invoke_impl<void, void (ARDOUR::RouteGroup::*&)(std::weak_ptr<ARDOUR::Route>), ARDOUR::RouteGroup*&, std::weak_ptr<ARDOUR::Route>&>(std::__invoke_memfun_deref, void (ARDOUR::RouteGroup::*&)(std::weak_ptr<ARDOUR::Route>), ARDOUR::RouteGroup*&, std::weak_ptr<ARDOUR::Route>&) /usr/include/c++/10/bits/invoke.h:73
#11 0x7f5b119128c8 in std::__invoke_result<void (ARDOUR::RouteGroup::*&)(std::weak_ptr<ARDOUR::Route>), ARDOUR::RouteGroup*&, std::weak_ptr<ARDOUR::Route>&>::type std::__invoke<void (ARDOUR::RouteGroup::*&)(std::weak_ptr<ARDOUR::Route>), ARDOUR::RouteGroup*&, std::weak_ptr<ARDOUR::Route>&>(void (ARDOUR::RouteGroup::*&)(std::weak_ptr<ARDOUR::Route>), ARDOUR::RouteGroup*&, std::weak_ptr<ARDOUR::Route>&) /usr/include/c++/10/bits/invoke.h:95
#12 0x7f5b119125bc in void std::_Bind<void (ARDOUR::RouteGroup::*(ARDOUR::RouteGroup*, std::weak_ptr<ARDOUR::Route>))(std::weak_ptr<ARDOUR::Route>)>::__call<void, , 0ul, 1ul>(std::tuple<>&&, std::_Index_tuple<0ul, 1ul>) /usr/include/c++/10/functional:416
#13 0x7f5b11911fdc in void std::_Bind<void (ARDOUR::RouteGroup::*(ARDOUR::RouteGroup*, std::weak_ptr<ARDOUR::Route>))(std::weak_ptr<ARDOUR::Route>)>::operator()<, void>() /usr/include/c++/10/functional:499
#14 0x7f5b11910e79 in void std::__invoke_impl<void, std::_Bind<void (ARDOUR::RouteGroup::*(ARDOUR::RouteGroup*, std::weak_ptr<ARDOUR::Route>))(std::weak_ptr<ARDOUR::Route>)>&>(std::__invoke_other, std::_Bind<void (ARDOUR::RouteGroup::*(ARDOUR::RouteGroup*, std::weak_ptr<ARDOUR::Route>))(std::weak_ptr<ARDOUR::Route>)>&) /usr/include/c++/10/bits/invoke.h:60
#15 0x7f5b1190f187 in std::enable_if<is_invocable_r_v<void, std::_Bind<void (ARDOUR::RouteGroup::*(ARDOUR::RouteGroup*, std::weak_ptr<ARDOUR::Route>))(std::weak_ptr<ARDOUR::Route>)>&>, void>::type std::__invoke_r<void, std::_Bind<void (ARDOUR::RouteGroup::*(ARDOUR::RouteGroup*, std::weak_ptr<ARDOUR::Route>))(std::weak_ptr<ARDOUR::Route>)>&>(std::_Bind<void (ARDOUR::RouteGroup::*(ARDOUR::RouteGroup*, std::weak_ptr<ARDOUR::Route>))(std::weak_ptr<ARDOUR::Route>)>&) /usr/include/c++/10/bits/invoke.h:110
#16 0x7f5b1190d26a in std::_Function_handler<void (), std::_Bind<void (ARDOUR::RouteGroup::*(ARDOUR::RouteGroup*, std::weak_ptr<ARDOUR::Route>))(std::weak_ptr<ARDOUR::Route>)> >::_M_invoke(std::_Any_data const&) /usr/include/c++/10/bits/std_function.h:291
#17 0x558120310619 in std::function<void ()>::operator()() const /usr/include/c++/10/bits/std_function.h:622
#18 0x7f5b10bcb0d6 in PBD::SignalWithCombiner<PBD::OptionalLastValue<void>, void ()>::operator()() ../libs/pbd/pbd/signals.h:508
#19 0x7f5b10bc779b in PBD::Destructible::drop_references() ../libs/pbd/pbd/destructible.h:33
#20 0x7f5b1196700f in ARDOUR::Session::destroy() ../libs/ardour/session.cc:822
#21 0x7f5b11962f93 in ARDOUR::Session::~Session() ../libs/ardour/session.cc:581
#22 0x7f5b119639a9 in ARDOUR::Session::~Session() ../libs/ardour/session.cc:582
#23 0x558120305a92 in close_session ../luasession/luasession.cc:366
#24 0x55812031911c in luabridge::FuncTraits<void (*)(), void (*)()>::call(void (*)(), luabridge::TypeListValues<void>) ../libs/lua/LuaBridge/detail/FuncTraits.h:73
#25 0x5581203151eb in luabridge::CFunc::Call<void (*)(), void>::f(lua_State*) ../libs/lua/LuaBridge/detail/CFunctions.h:244
#26 0x55812035701f in luaD_precall ../libs/lua/lua-5.3.5/ldo.c:434
#27 0x55812038f1bd in luaV_execute ../libs/lua/lua-5.3.5/lvm.c:1136
#28 0x5581203579a8 in luaD_call ../libs/lua/lua-5.3.5/ldo.c:499
#29 0x558120357a80 in luaD_callnoyield ../libs/lua/lua-5.3.5/ldo.c:509
#30 0x558120346f82 in f_call ../libs/lua/lua-5.3.5/lapi.c:943
#31 0x558120354e59 in luaD_rawrunprotected ../libs/lua/lua-5.3.5/ldo.c:142
#32 0x55812035924f in luaD_pcall ../libs/lua/lua-5.3.5/ldo.c:729
#33 0x558120347226 in lua_pcallk ../libs/lua/lua-5.3.5/lapi.c:969
#34 0x558120393ae9 in LuaState::do_command(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >) ../libs/lua/luastate.cc:64
#35 0x558120306da8 in interactive_interpreter ../luasession/luasession.cc:514
#36 0x558120307b36 in main ../luasession/luasession.cc:641
#37 0x7f5b0e40dd79 in __libc_start_main ../csu/libc-start.c:308
2025-12-17 03:14:22 +01:00
Robin Gareus
167359b300
Fix crashes caused by retaining references in 557058f362
2025-12-17 01:45:19 +01:00
Paul Davis
1721681c7d
fix display of MIDI regions in cue editors even when they do not start at the source start
...
This also shows signs of mild improvements in the initial zoom setting for cue editors,
though more work is needed there
2025-12-16 15:30:06 -07:00
Paul Davis
c05877c801
fix crash when editing MIDI notes in a cue editor (there's no playlist)
2025-12-16 15:30:06 -07:00
Robin Gareus
ef9fc93ffc
Fix another static signal that depends on the session
...
see also 557058f362 and compare to
Mixer_UI::sync_presentation_info_from_treeview
2025-12-16 23:28:06 +01:00
Robin Gareus
557058f362
Fix crash when an early callback changes selection during session load
...
This can happen e.g. from a VST3 plugin's state restore.
2025-12-16 23:22:43 +01:00
Paul Davis
4273652488
RouteGroupMenu must not bind std::shared_ptr<RouteGroup> to menu items
2025-12-16 13:21:49 -07:00
Paul Davis
37c80a0f27
fix a leftover use of shared_from_this()
...
This was left from the experimental phase of shared route groups,
when the GUI was still using raw pointers.
2025-12-16 12:08:24 -07:00