add: handler->permanent = False;  if (IS_ZERO(handler->when)) return;
context: WMDeleteTimerHandler(WMHandlerID handlerID){    TimerHandler *tmp, *handler=(TimerHandler*)handlerID;    if (!handler || !timerHandler)       return;    tmp = timerHandler;    if (tmp==handler) {	timerHandler = handler->next;	wfree(handler);    } else {	while (tmp->next) {	    if (tmp->next==handler) {		tmp->next=handler->next;		wfree(handler);		break;	    }	    tmp = tmp->next;	}    }}