public bool removeDelegate <T>(System.Object aDelegate, utList <T> list) where T : tDelegateEntry
        {
            utNode <T> entry;

            for ((entry) = (list.head); (entry != null); (entry) = entry.next)
            {
                if (entry.obj.aDelegate == aDelegate)
                {
                    list.DL_DELETE(entry);
                    return(true);
                }
            }
            return(false);
        }
        public void removeAllDelegatesFromList(utList <tListEntry> list)
        {
            NSUtils.Assert(!_locked, "BUG. Open a ticket. Can't call this function when processing events.");

            lock (this) {
                utNode <tListEntry> entry, tmp;
                entry = list.head;
                while (entry != null)
                {
                    tmp = entry.next;
                    list.DL_DELETE(entry);
                    entry = tmp;
                    tmp   = null;
                }
            }
        }
        public void dispatchEvent(CCEventObject e)
        {
            lock (this)
            {
                NSEvent          evt      = e.evt;
                Action <NSEvent> selector = e.selector;

                // Dispatch events
                if (_dispatchEvents)
                {
                    _locked = true;
                    selector(evt);
                    _locked = false;
                }


                // FIRST: Remove possible delegates
                utNode <tListDeletedEntry> dEntry, tTmp;
                dEntry = _delegatesToBeRemoved.head;
                while (dEntry != null)
                {
                    tTmp = dEntry.next;
                    removeDelegate(dEntry.obj.aDelegate, dEntry.obj.listToBeDeleted);
                    _delegatesToBeRemoved.DL_DELETE(dEntry);
                    dEntry = tTmp;
                }


                // LATER: Add possible delegates
                utNode <tListAddedEntry> entry, tmp;
                entry = _delegatesToBeAdded.head;
                while (entry != null)
                {
                    tmp = entry.next;

                    addDelegate(entry.obj.aDelegate, entry.obj.priority, entry.obj.listToBeAdded);
                    _delegatesToBeAdded.DL_DELETE(entry);

                    entry = tmp;
                }
            }
        }