Merge gihub patch
						commit
						31db9558af
					
				
							
								
								
									
										20
									
								
								src/core.rs
								
								
								
								
							
							
						
						
									
										20
									
								
								src/core.rs
								
								
								
								
							| 
						 | 
					@ -324,21 +324,35 @@ pub struct EventManager<'a> {
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
impl<'a> EventManager<'a> {
 | 
					impl<'a> EventManager<'a> {
 | 
				
			||||||
    pub fn attach<F>(&self, event_type: EventType, callback: F) -> Result<(), ()>
 | 
					
 | 
				
			||||||
 | 
					    pub fn detach(&self, event_type: EventType, registered_callback: *mut c_void) -> Result<(),()> {
 | 
				
			||||||
 | 
					        let result =  unsafe {
 | 
				
			||||||
 | 
					            sys::libvlc_event_detach(self.ptr, event_type as i32, event_manager_callback, registered_callback)
 | 
				
			||||||
 | 
					        };
 | 
				
			||||||
 | 
					        if result == 0 {
 | 
				
			||||||
 | 
					            Ok(())
 | 
				
			||||||
 | 
					        } else {
 | 
				
			||||||
 | 
					            Err(())
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    pub fn attach<F>(&self, event_type: EventType, callback: F) -> Result<*mut c_void, ()>
 | 
				
			||||||
        where F: Fn(Event, VLCObject) + Send + 'static
 | 
					        where F: Fn(Event, VLCObject) + Send + 'static
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
        // Explicit type annotation is needed
 | 
					        // Explicit type annotation is needed
 | 
				
			||||||
        let callback: Box<Box<dyn Fn(Event, VLCObject) + Send + 'static>> =
 | 
					        let callback: Box<Box<dyn Fn(Event, VLCObject) + Send + 'static>> =
 | 
				
			||||||
            Box::new(Box::new(callback));
 | 
					            Box::new(Box::new(callback));
 | 
				
			||||||
        
 | 
					        
 | 
				
			||||||
 | 
					        let raw = Box::into_raw(callback) as *mut c_void;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        let result = unsafe{
 | 
					        let result = unsafe{
 | 
				
			||||||
            sys::libvlc_event_attach(
 | 
					            sys::libvlc_event_attach(
 | 
				
			||||||
                self.ptr, event_type as i32, Some(event_manager_callback),
 | 
					                self.ptr, event_type as i32, Some(event_manager_callback),
 | 
				
			||||||
                Box::into_raw(callback) as *mut c_void)
 | 
					                raw)
 | 
				
			||||||
        };
 | 
					        };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        if result == 0 {
 | 
					        if result == 0 {
 | 
				
			||||||
            Ok(())
 | 
					            Ok(raw)
 | 
				
			||||||
        }else{
 | 
					        }else{
 | 
				
			||||||
            Err(())
 | 
					            Err(())
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
		Reference in New Issue