mirror of
https://github.com/mRemoteNG/mRemoteNG.git
synced 2026-02-17 22:11:48 +08:00
@@ -1,4 +1,5 @@
|
||||
using System;
|
||||
using System.Threading.Tasks;
|
||||
using System.Windows.Forms;
|
||||
using mRemoteNG.Messages.MessageWriters;
|
||||
using mRemoteNG.UI.Forms;
|
||||
@@ -12,7 +13,6 @@ namespace mRemoteNG.Messages.WriterDecorators
|
||||
private readonly IMessageTypeFilteringOptions _filter;
|
||||
private readonly IMessageWriter _decoratedWriter;
|
||||
private readonly ErrorAndInfoWindow _messageWindow;
|
||||
private Timer _ecTimer;
|
||||
private readonly FrmMain _frmMain = FrmMain.Default;
|
||||
|
||||
public MessageFocusDecorator(ErrorAndInfoWindow messageWindow, IMessageTypeFilteringOptions filter, IMessageWriter decoratedWriter)
|
||||
@@ -27,14 +27,14 @@ namespace mRemoteNG.Messages.WriterDecorators
|
||||
_filter = filter;
|
||||
_messageWindow = messageWindow;
|
||||
_decoratedWriter = decoratedWriter;
|
||||
CreateTimer();
|
||||
}
|
||||
|
||||
public void Write(IMessage message)
|
||||
public async void Write(IMessage message)
|
||||
{
|
||||
if (WeShouldFocusNotificationPanel(message))
|
||||
BeginSwitchToPanel();
|
||||
_decoratedWriter.Write(message);
|
||||
|
||||
if (WeShouldFocusNotificationPanel(message))
|
||||
await SwitchToMessageAsync();
|
||||
}
|
||||
|
||||
private bool WeShouldFocusNotificationPanel(IMessage message)
|
||||
@@ -43,7 +43,8 @@ namespace mRemoteNG.Messages.WriterDecorators
|
||||
switch (message.Class)
|
||||
{
|
||||
case MessageClass.InformationMsg:
|
||||
if (_filter.AllowInfoMessages) return true;
|
||||
if (_filter.AllowInfoMessages)
|
||||
return true;
|
||||
break;
|
||||
case MessageClass.WarningMsg:
|
||||
if (_filter.AllowWarningMessages) return true;
|
||||
@@ -55,43 +56,27 @@ namespace mRemoteNG.Messages.WriterDecorators
|
||||
return false;
|
||||
}
|
||||
|
||||
private void CreateTimer()
|
||||
private async Task SwitchToMessageAsync()
|
||||
{
|
||||
_ecTimer = new Timer
|
||||
{
|
||||
Enabled = false,
|
||||
Interval = 300
|
||||
};
|
||||
_ecTimer.Tick += SwitchTimerTick;
|
||||
}
|
||||
|
||||
private void BeginSwitchToPanel()
|
||||
{
|
||||
_ecTimer.Enabled = true;
|
||||
}
|
||||
|
||||
private void SwitchTimerTick(object sender, EventArgs e)
|
||||
{
|
||||
SwitchToMessage();
|
||||
_ecTimer.Enabled = false;
|
||||
await Task
|
||||
.Delay(TimeSpan.FromMilliseconds(300))
|
||||
.ContinueWith(task => SwitchToMessage());
|
||||
}
|
||||
|
||||
private void SwitchToMessage()
|
||||
{
|
||||
if (_messageWindow.InvokeRequired)
|
||||
{
|
||||
_frmMain.Invoke((MethodInvoker)SwitchToMessage);
|
||||
return;
|
||||
}
|
||||
|
||||
_messageWindow.PreviousActiveForm = (DockContent)_frmMain.pnlDock.ActiveContent;
|
||||
ShowMcForm();
|
||||
_messageWindow.Show(_frmMain.pnlDock);
|
||||
_messageWindow.lvErrorCollector.Focus();
|
||||
_messageWindow.lvErrorCollector.SelectedItems.Clear();
|
||||
_messageWindow.lvErrorCollector.Items[0].Selected = true;
|
||||
_messageWindow.lvErrorCollector.FocusedItem = _messageWindow.lvErrorCollector.Items[0];
|
||||
}
|
||||
|
||||
private void ShowMcForm()
|
||||
{
|
||||
if (_frmMain.pnlDock.InvokeRequired)
|
||||
_frmMain.pnlDock.Invoke((MethodInvoker)ShowMcForm);
|
||||
else
|
||||
_messageWindow.Show(_frmMain.pnlDock);
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user