private void SubscribeToVisibility()

in src/dotnet/ReSharperPlugin.DotNetDisassembler/AsmViewerHost.cs [60:92]


    private void SubscribeToVisibility(Lifetime lifetime, IPsiCachesState psiCachesState, ITextControlManager textControlManager)
    {
        var isVisible = new Property<bool>("AsmViewerHost.IsVisible");
        _model.IsVisible.FlowInto(lifetime, isVisible);

        isVisible.WhenTrue(lifetime, visibleLifetime =>
        {
            _logger.Verbose("ASM Viewer tool window visible");

            var compilationLifetimes = new SequentialLifetimes(visibleLifetime);

            var compilationTrigger = _shellLocks.CreateGroupingEvent(
                visibleLifetime,
                "AsmViewerHost.CompilationTrigger",
                TimeSpan.FromMilliseconds(300),
                () => RequestCompilationAsync(compilationLifetimes).NoAwait());

            SubscribeToConfigurationChanges(visibleLifetime, compilationTrigger);
            SubscribeToRecompileRequests(visibleLifetime, compilationTrigger);
            SubscribeToForceRecompileRequests(visibleLifetime, compilationTrigger);

            psiCachesState.IsInitialUpdateFinished.WhenTrue(visibleLifetime, psiReadyLifetime =>
            {
                SubscribeToTextControlChanges(psiReadyLifetime, textControlManager, compilationTrigger);
            });
        });
        
        isVisible.WhenFalse(lifetime, _ =>
        {
            _logger.Verbose("ASM Viewer tool window hidden");
            _currentTextControl = null;
        });
    }