private static void AutomateTabTipOpen(IObservable <Tuple <UIElement, bool> > focusObservable) { focusObservable .ObserveOn(Scheduler.Default) .Where(_ => IgnoreHardwareKeyboard == HardwareKeyboardIgnoreOptions.IgnoreAll || !HardwareKeyboard.IsConnectedAsync().Result) .Where(tuple => tuple.Item2 == true) .Do(_ => TabTip.OpenUndockedAndStartPoolingForClosedEvent()) .ObserveOnDispatcher() .Subscribe(tuple => AnimationHelper.GetUIElementInToWorkAreaWithTabTipOpened(tuple.Item1)); }
private static void AutomateTabTipClose(IObservable <Tuple <UIElement, bool> > focusObservable, Subject <bool> tabTipClosedSubject) { focusObservable .ObserveOn(Scheduler.Default) .Where(_ => IgnoreHardwareKeyboard == HardwareKeyboardIgnoreOptions.IgnoreAll || !HardwareKeyboard.IsConnectedAsync().Result) .Throttle(TimeSpan.FromMilliseconds(100)) // Close only if no other UIElement got focus in 100 ms .Where(tuple => tuple.Item2 == false) .Do(_ => TabTip.Close()) .Subscribe(_ => tabTipClosedSubject.OnNext(true)); tabTipClosedSubject .ObserveOnDispatcher() .Subscribe(_ => AnimationHelper.GetEverythingInToWorkAreaWithTabTipClosed()); }