| 
				
				
					
				
				
				 | 
			
			 | 
			@@ -694,7 +694,9 @@ public: | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			          fCVSourcePorts(fUseClient), | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			#endif | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			          fPreRenameMutex(), | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			          fPreRenameConnections() | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			          fPreRenameConnections(), | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			          fPreRenamePluginId(), | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			          fPreRenamePluginIcon() | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    { | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        carla_debug("CarlaEngineJackClient::CarlaEngineJackClient(%p)", jackClient); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
  | 
		
		
	
	
		
			
				| 
				
					
				
				
					
				
				
				 | 
			
			 | 
			@@ -929,7 +931,8 @@ public: | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
  | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        return _renamePorts(fAudioPorts, clientNamePrefix) && | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			               _renamePorts(fCVPorts,    clientNamePrefix) && | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			               _renamePorts(fEventPorts, clientNamePrefix); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			               _renamePorts(fEventPorts, clientNamePrefix) && | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			               _restoreProperties(); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    } | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
  | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    void closeForRename(jack_client_t* const newClient, const CarlaString& newClientName) noexcept | 
		
		
	
	
		
			
				| 
				
				
				
					
				
				 | 
			
			 | 
			@@ -945,10 +948,13 @@ public: | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			                    const CarlaMutexLocker cml(fPreRenameMutex); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
  | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			                    fPreRenameConnections.clear(); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			                    fPreRenamePluginId.clear(); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			                    fPreRenamePluginIcon.clear(); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
  | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			                    _savePortsConnections(fAudioPorts, clientNamePrefix); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			                    _savePortsConnections(fCVPorts,    clientNamePrefix); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			                    _savePortsConnections(fEventPorts, clientNamePrefix); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			                    _saveProperties(); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			                } | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
  | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			                try { | 
		
		
	
	
		
			
				| 
				
					
				
				
					
				
				
				 | 
			
			 | 
			@@ -985,6 +991,8 @@ private: | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
  | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    CarlaMutex      fPreRenameMutex; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    CarlaStringList fPreRenameConnections; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    CarlaString     fPreRenamePluginId; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    CarlaString     fPreRenamePluginIcon; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
  | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    template<typename T> | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    bool _renamePorts(const LinkedList<T*>& t, const CarlaString& clientNamePrefix) | 
		
		
	
	
		
			
				| 
				
					
				
				
					
				
				
				 | 
			
			 | 
			@@ -1047,6 +1055,63 @@ private: | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        } | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    } | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
  | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    bool _restoreProperties() | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    { | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        if (fPreRenamePluginId.isEmpty()) | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			            return true; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
  | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        if (const char* const uuidchar = jackbridge_client_get_uuid(fJackClient)) | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        { | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			            jack_uuid_t uuid; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
  | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			            if (jackbridge_uuid_parse(uuidchar, &uuid)) | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			            { | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			                jackbridge_set_property(fJackClient, uuid, | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			                                        "https://kx.studio/ns/carla/plugin-id", | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			                                        fPreRenamePluginId, | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			                                        "http://www.w3.org/2001/XMLSchema#integer"); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
  | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			                if (fPreRenamePluginIcon.isNotEmpty()) | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			                    jackbridge_set_property(fJackClient, uuid, | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			                                            "https://kx.studio/ns/carla/plugin-icon", | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			                                            fPreRenamePluginIcon, | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			                                            "text/plain"); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			            } | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        } | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
  | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        return true; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    } | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
  | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    void _saveProperties() | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    { | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        if (const char* const uuidchar = jackbridge_client_get_uuid(fJackClient)) | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        { | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			            jack_uuid_t uuid; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
  | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			            if (jackbridge_uuid_parse(uuidchar, &uuid)) | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			            { | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			                char* value; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			                char* type; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
  | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			                CARLA_SAFE_ASSERT_RETURN(jackbridge_get_property(uuid, | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			                                                                 "https://kx.studio/ns/carla/plugin-id", | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			                                                                 &value, | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			                                                                 &type),); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			                CARLA_SAFE_ASSERT_RETURN(type != nullptr,); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			                CARLA_SAFE_ASSERT_RETURN(std::strcmp(type, "http://www.w3.org/2001/XMLSchema#integer") == 0,); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			                fPreRenamePluginId = value; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
  | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			                CARLA_SAFE_ASSERT_RETURN(jackbridge_get_property(uuid, | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			                                                                 "https://kx.studio/ns/carla/plugin-icon", | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			                                                                 &value, | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			                                                                 &type),); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			                CARLA_SAFE_ASSERT_RETURN(type != nullptr,); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			                CARLA_SAFE_ASSERT_RETURN(std::strcmp(type, "text/plain") == 0,); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			                fPreRenamePluginIcon = value; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			            } | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        } | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    } | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
  | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    CARLA_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR(CarlaEngineJackClient) | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			}; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
  | 
		
		
	
	
		
			
				| 
				
					
				
				
				
				 | 
			
			 | 
			
  |