From f1eee397b5fec371541bb71bfe4a25cfaddbd88f Mon Sep 17 00:00:00 2001 From: Stone_Red <56473591+Stone-Red-Code@users.noreply.github.com> Date: Sun, 19 Jul 2026 20:17:42 +0200 Subject: [PATCH] Make sure online users panel stays closed when switching channels --- src/Decho/ViewModels/ChatViewModel.cs | 21 +++++++++++++++----- src/Decho/ViewModels/MainWindowViewModel.cs | 2 -- src/Decho/Views/ConnectDialogWindow.axaml.cs | 2 +- 3 files changed, 17 insertions(+), 8 deletions(-) diff --git a/src/Decho/ViewModels/ChatViewModel.cs b/src/Decho/ViewModels/ChatViewModel.cs index d485a98..4696a32 100644 --- a/src/Decho/ViewModels/ChatViewModel.cs +++ b/src/Decho/ViewModels/ChatViewModel.cs @@ -41,7 +41,17 @@ public sealed class ChatViewModel : ViewModelBase public bool ShowOnlineUsers { - get; + get + { + if (OnlineUsers.Count > 0) + { + return field; + } + else + { + return false; + } + } set => this.RaiseAndSetIfChanged(ref field, value); } @@ -74,6 +84,11 @@ public sealed class ChatViewModel : ViewModelBase { Composer = new MessageComposerViewModel(); ToggleUsersPanelCommand = ReactiveCommand.Create(ToggleUsersPanel); + + OnlineUsers.CollectionChanged += (s, e) => + { + this.RaisePropertyChanged(nameof(ShowOnlineUsers)); + }; } public void SetChannel(ChannelViewModel? channel, string serverUrl = "", bool isServerConnected = true) @@ -86,7 +101,6 @@ public sealed class ChatViewModel : ViewModelBase HasTopic = false; CurrentChannelName = string.Empty; CurrentServerUrl = string.Empty; - ShowOnlineUsers = false; OnlineUsers.Clear(); OnlineUserCount = string.Empty; Composer.SetServer(string.Empty, isServerConnected); @@ -103,7 +117,6 @@ public sealed class ChatViewModel : ViewModelBase if (!isServerConnected) { - ShowOnlineUsers = false; OnlineUsers.Clear(); OnlineUserCount = string.Empty; } @@ -117,7 +130,6 @@ public sealed class ChatViewModel : ViewModelBase OnlineUsers.Add(new UserViewModel(user)); } OnlineUserCount = $"{users.Count}"; - ShowOnlineUsers = true; Composer.UpdateAvailableUsers(OnlineUsers); } @@ -128,7 +140,6 @@ public sealed class ChatViewModel : ViewModelBase OnlineUsers.Add(new UserViewModel(user)); OnlineUserCount = $"{OnlineUsers.Count}"; } - ShowOnlineUsers = OnlineUsers.Count > 0; Composer.UpdateAvailableUsers(OnlineUsers); } diff --git a/src/Decho/ViewModels/MainWindowViewModel.cs b/src/Decho/ViewModels/MainWindowViewModel.cs index 7b1f0e8..69d3e4f 100644 --- a/src/Decho/ViewModels/MainWindowViewModel.cs +++ b/src/Decho/ViewModels/MainWindowViewModel.cs @@ -1128,7 +1128,6 @@ public sealed class MainWindowViewModel : ViewModelBase Avalonia.Threading.Dispatcher.UIThread.Post(() => { Chat.OnlineUsers.Clear(); - Chat.ShowOnlineUsers = false; Chat.OnlineUserCount = string.Empty; }); return; @@ -1146,7 +1145,6 @@ public sealed class MainWindowViewModel : ViewModelBase Avalonia.Threading.Dispatcher.UIThread.Post(() => { Chat.OnlineUsers.Clear(); - Chat.ShowOnlineUsers = false; Chat.OnlineUserCount = string.Empty; }); return; diff --git a/src/Decho/Views/ConnectDialogWindow.axaml.cs b/src/Decho/Views/ConnectDialogWindow.axaml.cs index 0d3ded0..dd04a9e 100644 --- a/src/Decho/Views/ConnectDialogWindow.axaml.cs +++ b/src/Decho/Views/ConnectDialogWindow.axaml.cs @@ -110,7 +110,7 @@ public sealed partial class ConnectDialogWindow : Window return; } - Close(new ConnectDialogResult(url, user, pass, true, RememberCheck.IsChecked ?? false, null, + Close(new ConnectDialogResult(url, user, pass, true, RememberCheck.IsChecked ?? false, null, string.IsNullOrEmpty(displayName) ? null : displayName, string.IsNullOrEmpty(inviteCode) ? null : inviteCode)); }