diff options
author | Daniel Triendl <daniel@pew.cc> | 2022-03-18 21:17:46 +0300 |
---|---|---|
committer | Daniel Triendl <daniel@pew.cc> | 2022-03-18 21:33:10 +0300 |
commit | 2fb0ab1d91639a0ca483430d60db02869cad8eae (patch) | |
tree | 9b034c05e88bddfa5874ee0d6896a1c31d5ada26 /mRemoteNG | |
parent | 85f7be1d79cc56793aa9d9341cac6af9ffe3e9fd (diff) |
Enable size change without reconnect
Use IMsRdpClient9::UpdateSessionDisplaySettings to dynamically update the
session display settings without reconnecting. RDP Version needs to be
Rdc9 or Highest for this to work.
Fixes #1546
Diffstat (limited to 'mRemoteNG')
-rw-r--r-- | mRemoteNG/Connection/Protocol/RDP/RdpProtocol8.cs | 25 | ||||
-rw-r--r-- | mRemoteNG/Connection/Protocol/RDP/RdpProtocol9.cs | 39 |
2 files changed, 39 insertions, 25 deletions
diff --git a/mRemoteNG/Connection/Protocol/RDP/RdpProtocol8.cs b/mRemoteNG/Connection/Protocol/RDP/RdpProtocol8.cs index c1cb1057..d3bf69f4 100644 --- a/mRemoteNG/Connection/Protocol/RDP/RdpProtocol8.cs +++ b/mRemoteNG/Connection/Protocol/RDP/RdpProtocol8.cs @@ -29,7 +29,7 @@ namespace mRemoteNG.Connection.Protocol.RDP protected set { base.SmartSize = value; - ReconnectForResize(); + DoResizeClient(); } } @@ -39,7 +39,7 @@ namespace mRemoteNG.Connection.Protocol.RDP protected set { base.Fullscreen = value; - ReconnectForResize(); + DoResizeClient(); } } @@ -50,19 +50,19 @@ namespace mRemoteNG.Connection.Protocol.RDP public override void Resize(object sender, EventArgs e) { - if (DoResize() && _controlBeginningSize.IsEmpty) + if (DoResizeControl() && _controlBeginningSize.IsEmpty) { - ReconnectForResize(); + DoResizeClient(); } base.Resize(sender, e); } public override void ResizeEnd(object sender, EventArgs e) { - DoResize(); + DoResizeControl(); if (!(Control.Size == _controlBeginningSize)) { - ReconnectForResize(); + DoResizeClient(); } _controlBeginningSize = Size.Empty; } @@ -72,7 +72,7 @@ namespace mRemoteNG.Connection.Protocol.RDP return new AxMsRdpClient8NotSafeForScripting(); } - private void ReconnectForResize() + private void DoResizeClient() { if (!loginComplete) return; @@ -94,8 +94,8 @@ namespace mRemoteNG.Connection.Protocol.RDP { var size = Fullscreen ? Screen.FromControl(Control).Bounds.Size - : Control.Size; - RdpClient8.Reconnect((uint)size.Width, (uint)size.Height); + : Control.Size;
+ UpdateSessionDisplaySettings((uint)size.Width, (uint)size.Height); } catch (Exception ex) { @@ -106,7 +106,7 @@ namespace mRemoteNG.Connection.Protocol.RDP } } - private bool DoResize() + private bool DoResizeControl() { Control.Location = InterfaceControl.Location; // kmscode - this doesn't look right to me. But I'm not aware of any functionality issues with this currently... @@ -120,5 +120,10 @@ namespace mRemoteNG.Connection.Protocol.RDP return false; } } + + protected virtual void UpdateSessionDisplaySettings(uint width, uint height) + { + RdpClient8.Reconnect(width, height);
+ } } } diff --git a/mRemoteNG/Connection/Protocol/RDP/RdpProtocol9.cs b/mRemoteNG/Connection/Protocol/RDP/RdpProtocol9.cs index 64923285..e0527d8b 100644 --- a/mRemoteNG/Connection/Protocol/RDP/RdpProtocol9.cs +++ b/mRemoteNG/Connection/Protocol/RDP/RdpProtocol9.cs @@ -1,15 +1,24 @@ -using System.Windows.Forms; -using AxMSTSCLib; - -namespace mRemoteNG.Connection.Protocol.RDP -{ - public class RdpProtocol9 : RdpProtocol8 - { - protected override RdpVersion RdpProtocolVersion => RdpVersion.Rdc9; - - protected override AxHost CreateActiveXRdpClientControl() - { - return new AxMsRdpClient9NotSafeForScripting(); - } - } -} +using System.Windows.Forms;
+using AxMSTSCLib;
+using MSTSCLib;
+
+namespace mRemoteNG.Connection.Protocol.RDP
+{
+ public class RdpProtocol9 : RdpProtocol8
+ {
+ private MsRdpClient9NotSafeForScripting RdpClient9 =>
+ (MsRdpClient9NotSafeForScripting)((AxHost)Control).GetOcx();
+
+ protected override RdpVersion RdpProtocolVersion => RdpVersion.Rdc9;
+
+ protected override AxHost CreateActiveXRdpClientControl()
+ {
+ return new AxMsRdpClient9NotSafeForScripting();
+ }
+
+ protected override void UpdateSessionDisplaySettings(uint width, uint height)
+ {
+ RdpClient9.UpdateSessionDisplaySettings(width, height, width, height, 0, 1, 1);
+ }
+ }
+}
\ No newline at end of file |