Compare commits

...

2 Commits

Author SHA1 Message Date
Robin Gareus 08e394f681
(YDK) possible fix for Catalina event loop crashes
```
Thread 0 Crashed:: Dispatch queue: com.apple.main-thread
0 libydk.dylib 0x0000000110d8942d -[GdkQuartzView setNeedsDisplay:] + 93
1 com.apple.AppKit 0x00007fff34af6848 -[NSView(NSViewContentStyle) _recursivelyInvalidateCachedContentStyle] + 120
2 com.apple.AppKit 0x00007fff34af60fb -[NSView _setSuperview:] + 521
3 com.apple.AppKit 0x00007fff34b200a6 -[NSView removeFromSuperview] + 140
4 com.apple.AppKit 0x00007fff34ba882f -[NSView removeFromSuperviewWithoutNeedingDisplay] + 36
5 com.apple.AppKit 0x00007fff34b27168 -[NSView _finalize] + 977
6 com.apple.AppKit 0x00007fff34b26c0c -[NSView dealloc] + 121
7 com.apple.AppKit 0x00007fff34e30db4 -[NSFrameView dealloc] + 119
8 com.apple.AppKit 0x00007fff34e30d36 -[NSTitledFrame dealloc] + 62
9 com.apple.AppKit 0x00007fff34e30ce9 -[NSThemeFrame dealloc] + 603
10 com.apple.Foundation 0x00007fff39ed5992 NSKVODeallocate + 172
11 com.apple.AppKit 0x00007fff34d85884 -[NSWindow dealloc] + 1083
12 com.apple.AppKit 0x00007fff34d85442 -[NSWindow _dealloc] + 76
13 libobjc.A.dylib 0x00007fff6f6f3054 AutoreleasePoolPage::releaseUntil(objc_object**) + 134
14 libobjc.A.dylib 0x00007fff6f6d7dba objc_autoreleasePoolPop + 175
15 com.apple.CoreFoundation 0x00007fff377c9cb5 _CFAutoreleasePoolPop + 22
16 com.apple.Foundation 0x00007fff39e7d04e -[NSAutoreleasePool drain] + 126
17 libydk.dylib 0x0000000110d8ef29 gdk_event_prepare + 73
18 libglib-2.0.0.dylib 0x00000001110ded45 g_main_context_prepare + 533
19 libglib-2.0.0.dylib 0x00000001110df800 g_main_context_iterate + 128
20 libglib-2.0.0.dylib 0x00000001110dfcc2 g_main_loop_run + 210
21 libytk.dylib 0x0000000110a4f11f gtk_main + 191
22 libgtkmm2ext.dylib 0x00000001104cef1e Gtkmm2ext::UI::run(Receiver&) + 318
23 com.harrisonconsoles.Mixbus10 0x000000010dc6fb9c main + 2652
```
2024-04-19 15:38:12 +02:00
Robin Gareus 136b7f42d5
Skip tags for plugins that are not installed
This prevents empty sub-menus in the "By Tag" Plugin menu.
2024-04-18 17:07:12 +02:00
3 changed files with 48 additions and 16 deletions

View File

@ -302,6 +302,8 @@ private:
void reset_scan_cancel_state (bool single = false);
void get_all_plugins (PluginInfoList&) const;
bool no_timeout () const { return _cancel_scan_timeout_one || _cancel_scan_timeout_all; }
void detect_name_ambiguities (ARDOUR::PluginInfoList*);

View File

@ -610,18 +610,8 @@ PluginManager::refresh (bool cache_only)
}
void
PluginManager::detect_ambiguities ()
PluginManager::get_all_plugins (PluginInfoList& all_plugs) const
{
detect_name_ambiguities (_windows_vst_plugin_info);
detect_name_ambiguities (_lxvst_plugin_info);
detect_name_ambiguities (_mac_vst_plugin_info);
detect_name_ambiguities (_au_plugin_info);
detect_name_ambiguities (_ladspa_plugin_info);
detect_name_ambiguities (_lv2_plugin_info);
detect_name_ambiguities (_lua_plugin_info);
detect_name_ambiguities (_vst3_plugin_info);
PluginInfoList all_plugs;
if (_windows_vst_plugin_info) {
all_plugs.insert(all_plugs.end(), _windows_vst_plugin_info->begin(), _windows_vst_plugin_info->end());
}
@ -646,6 +636,22 @@ PluginManager::detect_ambiguities ()
if (_lua_plugin_info) {
all_plugs.insert(all_plugs.end(), _lua_plugin_info->begin(), _lua_plugin_info->end());
}
}
void
PluginManager::detect_ambiguities ()
{
detect_name_ambiguities (_windows_vst_plugin_info);
detect_name_ambiguities (_lxvst_plugin_info);
detect_name_ambiguities (_mac_vst_plugin_info);
detect_name_ambiguities (_au_plugin_info);
detect_name_ambiguities (_ladspa_plugin_info);
detect_name_ambiguities (_lv2_plugin_info);
detect_name_ambiguities (_lua_plugin_info);
detect_name_ambiguities (_vst3_plugin_info);
PluginInfoList all_plugs;
get_all_plugins (all_plugs);
detect_type_ambiguities (all_plugs);
save_scanlog ();
@ -2898,12 +2904,25 @@ PluginManager::get_all_tags (TagFilter tag_filter) const
{
std::vector<std::string> ret;
PluginInfoList all_plugs;
get_all_plugins (all_plugs);
std::map<PluginType, std::set<std::string>> nfos;
for (auto const& nfo : all_plugs) {
nfos[to_generic_vst (nfo->type)].insert (nfo->unique_id);
}
PluginTagList::const_iterator pt;
for (pt = ptags.begin(); pt != ptags.end(); ++pt) {
if ((*pt).tags.empty ()) {
continue;
}
if (nfos[(*pt).type].find ((*pt).unique_id) == nfos[(*pt).type].end ()) {
/* Plugin is not installed */
continue;
}
/* if favorites_only then we need to check the info ptr and maybe skip */
if (tag_filter == OnlyFavorites) {
PluginStatus stat ((*pt).type, (*pt).unique_id);

View File

@ -604,14 +604,21 @@
- (void) setNeedsDisplay:(BOOL)yn
{
GdkWindowObject *private;
GdkWindowImplQuartz *impl;
if (GDK_WINDOW_DESTROYED (gdk_window)) {
return;
}
GdkWindowObject* private = GDK_WINDOW_OBJECT (gdk_window);
GdkWindowImplQuartz* impl = GDK_WINDOW_IMPL_QUARTZ (private->impl);
if (!impl) {
[super setNeedsDisplay:yn];
return;
}
NSRect nsrect = [self bounds];
GdkRectangle r = { nsrect.origin.x, nsrect.origin.y, nsrect.size.width, nsrect.size.height };
private = GDK_WINDOW_OBJECT (gdk_window);
impl = GDK_WINDOW_IMPL_QUARTZ (private->impl);
GDK_NOTE (EVENTS, g_print ("setNeedsDisplay, current NDR %p\n", impl->needs_display_region));
if (!impl->needs_display_region)
@ -650,6 +657,10 @@
private = GDK_WINDOW_OBJECT (gdk_window);
impl = GDK_WINDOW_IMPL_QUARTZ (private->impl);
if (!impl) {
return;
}
GDK_NOTE (EVENTS, g_print ("setNeedsDisplayInRect, current NDR %p\n", impl->needs_display_region));
if (!impl->needs_display_region)