avm1: Correct AsBroadcaster removeListener
This commit is contained in:
parent
8742f288cb
commit
7948d872dc
|
@ -88,29 +88,11 @@ pub fn remove_listener<'gc>(
|
||||||
|
|
||||||
if let Value::Object(listeners) = listeners {
|
if let Value::Object(listeners) = listeners {
|
||||||
let length = listeners.length(activation)?;
|
let length = listeners.length(activation)?;
|
||||||
|
if let Some(index) =
|
||||||
let mut position = None;
|
(0..length).find(|&i| listeners.get_element(activation, i) == old_listener)
|
||||||
for i in 0..length {
|
{
|
||||||
let other_listener = listeners.get_element(activation, i);
|
listeners.call_method("splice", &[index.into(), 1.into()], activation)?;
|
||||||
if old_listener == other_listener {
|
return Ok(true.into());
|
||||||
position = Some(i);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if let Some(position) = position {
|
|
||||||
if length > 0 {
|
|
||||||
let new_length = length - 1;
|
|
||||||
for i in position..new_length {
|
|
||||||
let element = listeners.get_element(activation, i + 1);
|
|
||||||
listeners.set_element(activation, i, element)?;
|
|
||||||
}
|
|
||||||
|
|
||||||
listeners.delete_element(activation, new_length);
|
|
||||||
listeners.set_length(activation, new_length)?;
|
|
||||||
|
|
||||||
return Ok(true.into());
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue