Пример #1
0
 private static void DisconnectFromBuffer(ITextBuffer buffer)
 {
     buffer.Changed -= new EventHandler <TextContentChangedEventArgs>(BufferIdleEventUtil.BufferChanged);
     BufferIdleEventUtil.ClearBufferListeners(buffer);
     BufferIdleEventUtil.ClearBufferTimer(buffer);
     buffer.Properties.RemoveProperty(BufferIdleEventUtil.bufferListenersKey);
 }
Пример #2
0
        private static void RestartTimerForBuffer(ITextBuffer buffer)
        {
            DispatcherTimer timer;

            if (BufferIdleEventUtil.TryGetBufferTimer(buffer, out timer))
            {
                timer.Stop();
            }
            else
            {
                timer = new DispatcherTimer(DispatcherPriority.ApplicationIdle)
                {
                    Interval = TimeSpan.FromMilliseconds(500.0)
                };
                timer.Tick += (EventHandler)((s, e) =>
                {
                    BufferIdleEventUtil.ClearBufferTimer(buffer);
                    HashSet <EventHandler> listeners;
                    if (!BufferIdleEventUtil.TryGetBufferListeners(buffer, out listeners))
                    {
                        return;
                    }
                    foreach (EventHandler eventHandler in listeners)
                    {
                        eventHandler((object)buffer, new EventArgs());
                    }
                });
                buffer.Properties[BufferIdleEventUtil.bufferTimerKey] = (object)timer;
            }
            timer.Start();
        }
Пример #3
0
        private static HashSet <EventHandler> ConnectToBuffer(ITextBuffer buffer)
        {
            buffer.Changed += new EventHandler <TextContentChangedEventArgs>(BufferIdleEventUtil.BufferChanged);
            BufferIdleEventUtil.RestartTimerForBuffer(buffer);
            HashSet <EventHandler> eventHandlerSet = new HashSet <EventHandler>();

            buffer.Properties[BufferIdleEventUtil.bufferListenersKey] = (object)eventHandlerSet;
            return(eventHandlerSet);
        }
Пример #4
0
        private static void BufferChanged(object sender, TextContentChangedEventArgs e)
        {
            ITextBuffer buffer = sender as ITextBuffer;

            if (buffer == null)
            {
                return;
            }
            BufferIdleEventUtil.RestartTimerForBuffer(buffer);
        }
Пример #5
0
        private static void ClearBufferTimer(ITextBuffer buffer)
        {
            DispatcherTimer timer;

            if (!BufferIdleEventUtil.TryGetBufferTimer(buffer, out timer))
            {
                return;
            }
            if (timer != null)
            {
                timer.Stop();
            }
            buffer.Properties.RemoveProperty(BufferIdleEventUtil.bufferTimerKey);
        }
Пример #6
0
        public static bool RemoveBufferIdleEventListener(ITextBuffer buffer, EventHandler handler)
        {
            HashSet <EventHandler> listeners;

            if (!BufferIdleEventUtil.TryGetBufferListeners(buffer, out listeners) || !listeners.Contains(handler))
            {
                return(false);
            }
            listeners.Remove(handler);
            if (listeners.Count == 0)
            {
                BufferIdleEventUtil.DisconnectFromBuffer(buffer);
            }
            return(true);
        }
Пример #7
0
        public static bool AddBufferIdleEventListener(ITextBuffer buffer, EventHandler handler)
        {
            HashSet <EventHandler> listeners;

            if (!BufferIdleEventUtil.TryGetBufferListeners(buffer, out listeners))
            {
                listeners = BufferIdleEventUtil.ConnectToBuffer(buffer);
            }
            if (listeners.Contains(handler))
            {
                return(false);
            }
            listeners.Add(handler);
            return(true);
        }