public boolean removeEventListener(String evtnm, EventListener<? extends Event> listener) {
if (evtnm == null || listener == null)
throw new IllegalArgumentException("null");
if (_auxinf != null && _auxinf.listeners != null) {
final boolean oldasap = Events.isListened(this, evtnm, true);
final List<EventListenerInfo> lis = _auxinf.listeners.get(evtnm);
if (lis != null) {
for (Iterator<EventListenerInfo> it = lis.iterator(); it.hasNext();) {
final EventListenerInfo li = it.next();
if (li.listener.equals(listener)) {
it.remove();
if (lis.isEmpty())
_auxinf.listeners.remove(evtnm);
final Desktop desktop = getDesktop();
if (desktop != null) {
onListenerChange(desktop, false);
if (getClientEvents().containsKey(evtnm)) {
if (lis.isEmpty() && !Events.isListened(this, evtnm, false))
smartUpdate("$" + evtnm, (Object) null);
else if (oldasap != Events.isListened(this, evtnm, true))
smartUpdate("$" + evtnm, !oldasap);
}
}
return true;
}
}
}
}
return false;
}