From 7e95f151ed14ee2a41a8edd75ebec3f9db1ed34a Mon Sep 17 00:00:00 2001 From: Aleksandar Pesic Date: Mon, 2 Dec 2019 14:17:02 +0100 Subject: [PATCH] Removing CustomTitleChanged event (#604) * Dispatcher reviewed and improved. * Minor refactoring. * XtermTerminalView initialization simplified. * Additionally simplifying XtermTerminalView initialization. * Replacing SemaphoreSlim with lighter TaskCompletionSource. * Some async/await simplification. * Resize locking mechanism in XtermTerminalView simplified. * Resize handling improved. * Trivial change in a code comment. * After merge fixes, and some minor changes. * DelayedAction fixed and some UI bug fixed. * Removing TerminalViewModel.CustomTitleChanged event because it's covered by PropertyChanged anyway. --- .../MainViewModel.cs | 68 ++++++------------- .../TerminalViewModel.cs | 10 +-- 2 files changed, 24 insertions(+), 54 deletions(-) diff --git a/FluentTerminal.App.ViewModels/MainViewModel.cs b/FluentTerminal.App.ViewModels/MainViewModel.cs index 892dad2..3552dbe 100644 --- a/FluentTerminal.App.ViewModels/MainViewModel.cs +++ b/FluentTerminal.App.ViewModels/MainViewModel.cs @@ -15,8 +15,6 @@ using Windows.UI.Core; using FluentTerminal.App.ViewModels.Menu; using FluentTerminal.Models.Messages; using GalaSoft.MvvmLight.Command; -using Windows.ApplicationModel.Core; -using Windows.UI.Xaml; using FluentTerminal.App.ViewModels.Infrastructure; using System.Windows.Input; @@ -377,9 +375,7 @@ namespace FluentTerminal.App.ViewModels _applicationSettings, profile, ApplicationView, _dispatcherTimer, _clipboardService, terminalState); terminal.PropertyChanged += Terminal_PropertyChanged; - terminal.Closed += OnTerminalClosed; - terminal.CustomTitleChanged += Terminal_CustomTitleChanged; terminal.CloseLeftTabsRequested += Terminal_CloseLeftTabsRequested; terminal.CloseRightTabsRequested += Terminal_CloseRightTabsRequested; terminal.CloseOtherTabsRequested += Terminal_CloseOtherTabsRequested; @@ -402,17 +398,26 @@ namespace FluentTerminal.App.ViewModels switch (e.PropertyName) { case nameof(TerminalViewModel.ShellTitle): + case nameof(TerminalViewModel.TabTitle): - if (terminalViewModel.IsSelected && !_applicationSettings.ShowCustomTitleInTitlebar) - { - ApplicationView.ExecuteOnUiThreadAsync(() => WindowTitle = terminalViewModel.ShellTitle, - CoreDispatcherPriority.Low); - } + SetWindowTitle(terminalViewModel); break; } } + // ReSharper disable once UnusedMethodReturnValue.Local + private Task SetWindowTitle(TerminalViewModel terminalViewModel) + { + return ApplicationView.ExecuteOnUiThreadAsync(() => + { + WindowTitle = !_applicationSettings.ShowCustomTitleInTitlebar || + string.IsNullOrEmpty(terminalViewModel?.TabTitle) + ? terminalViewModel?.ShellTitle + : terminalViewModel.TabTitle; + }, CoreDispatcherPriority.Low); + } + private async void Terminal_DuplicateTabRequested(object sender, EventArgs e) { if (sender is TerminalViewModel terminal) @@ -462,35 +467,12 @@ namespace FluentTerminal.App.ViewModels } } - private void Terminal_CustomTitleChanged(object sender, string e) - { - if (sender is TerminalViewModel terminal) - { - if (terminal.IsSelected && _applicationSettings.ShowCustomTitleInTitlebar) - { - if (string.IsNullOrWhiteSpace(e)) - { - WindowTitle = terminal.ShellTitle; - } - else - { - WindowTitle = e; - } - } - } - } - - private void Terminal_ShellTitleChanged(object sender, string e) - { - } - public async Task CloseAllTerminals() { foreach (var terminal in Terminals) { terminal.PropertyChanged -= Terminal_PropertyChanged; terminal.Closed -= OnTerminalClosed; - terminal.CustomTitleChanged -= Terminal_CustomTitleChanged; terminal.CloseLeftTabsRequested -= Terminal_CloseLeftTabsRequested; terminal.CloseRightTabsRequested -= Terminal_CloseRightTabsRequested; terminal.CloseOtherTabsRequested -= Terminal_CloseOtherTabsRequested; @@ -515,26 +497,19 @@ namespace FluentTerminal.App.ViewModels _applicationSettings = message.ApplicationSettings; + SetWindowTitle(SelectedTerminal); + ApplicationView.ExecuteOnUiThreadAsync(() => { TabsPosition = message.ApplicationSettings.TabsPosition; RaisePropertyChanged(nameof(ShowTabsOnTop)); RaisePropertyChanged(nameof(ShowTabsOnBottom)); + }); - if (message.ApplicationSettings.ShowCustomTitleInTitlebar) - { - WindowTitle = SelectedTerminal?.TabTitle; - } - else - { - WindowTitle = SelectedTerminal?.ShellTitle; - } - - if (updateMenu) - { - CreateMenuViewModel(); - } - }, enforceNewSchedule:true); + if (updateMenu) + { + ApplicationView.ExecuteOnUiThreadAsync(CreateMenuViewModel, CoreDispatcherPriority.Low, true); + } } private async Task OnCloseRequest(object sender, CancelableEventArgs e) @@ -579,7 +554,6 @@ namespace FluentTerminal.App.ViewModels terminal.PropertyChanged -= Terminal_PropertyChanged; terminal.Closed -= OnTerminalClosed; - terminal.CustomTitleChanged -= Terminal_CustomTitleChanged; terminal.CloseLeftTabsRequested -= Terminal_CloseLeftTabsRequested; terminal.CloseRightTabsRequested -= Terminal_CloseRightTabsRequested; terminal.CloseOtherTabsRequested -= Terminal_CloseOtherTabsRequested; diff --git a/FluentTerminal.App.ViewModels/TerminalViewModel.cs b/FluentTerminal.App.ViewModels/TerminalViewModel.cs index 5f94b12..da19247 100644 --- a/FluentTerminal.App.ViewModels/TerminalViewModel.cs +++ b/FluentTerminal.App.ViewModels/TerminalViewModel.cs @@ -166,7 +166,6 @@ namespace FluentTerminal.App.ViewModels public event EventHandler FindPreviousRequested; public event EventHandler SearchStarted; public event EventHandler ThemeChanged; - public event EventHandler CustomTitleChanged; public event EventHandler CloseLeftTabsRequested; public event EventHandler CloseRightTabsRequested; public event EventHandler CloseOtherTabsRequested; @@ -336,10 +335,7 @@ namespace FluentTerminal.App.ViewModels } } - if (Set(ref _tabTitle, title)) - { - CustomTitleChanged?.Invoke(this, title); - } + Set(ref _tabTitle, title); } } @@ -440,9 +436,9 @@ namespace FluentTerminal.App.ViewModels public ITerminalView TerminalView { get; set; } - public async Task SerializeXtermState() + public Task SerializeXtermState() { - return await TerminalView?.SerializeXtermState(); + return TerminalView?.SerializeXtermState() ?? Task.FromResult(string.Empty); } private void FindPrevious()