Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/FreeRDP/FreeRDP-Sharp.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMarc-André Moreau <marcandre.moreau@gmail.com>2012-04-24 20:45:02 +0400
committerMarc-André Moreau <marcandre.moreau@gmail.com>2012-04-24 20:45:02 +0400
commit4a612fb70ae3d86862eede13c83d60f0c3c2a0c0 (patch)
tree196a3902cb1d20e798decdd93564856353b260b7
parent11ecae62117dd5710e1979002c6f375d3657e2d0 (diff)
gfreerdp: started Gtk# UI
-rw-r--r--FreeRDP.sln110
-rw-r--r--GFreeRDP/AssemblyInfo.cs27
-rw-r--r--GFreeRDP/ConnectionDialog.cs58
-rw-r--r--GFreeRDP/GFreeRDP.csproj85
-rw-r--r--GFreeRDP/IUserAction.cs27
-rw-r--r--GFreeRDP/MainWindow.cs52
-rw-r--r--GFreeRDP/Program.cs34
-rw-r--r--GFreeRDP/RdpClient.cs143
-rw-r--r--GFreeRDP/gtk-gui/GFreeRDP.ConnectionDialog.cs141
-rw-r--r--GFreeRDP/gtk-gui/GFreeRDP.MainWindow.cs62
-rw-r--r--GFreeRDP/gtk-gui/generated.cs29
-rw-r--r--GFreeRDP/gtk-gui/gui.stetic219
-rw-r--r--NFreeRDP/MainWindow.resourcesbin0 -> 180 bytes
-rw-r--r--NFreeRDP/NFreeRDP.csproj3
-rw-r--r--NFreeRDP/Properties/Resources.resourcesbin0 -> 180 bytes
15 files changed, 938 insertions, 52 deletions
diff --git a/FreeRDP.sln b/FreeRDP.sln
index 2265018..eb2aeff 100644
--- a/FreeRDP.sln
+++ b/FreeRDP.sln
@@ -1,50 +1,60 @@
-
-Microsoft Visual Studio Solution File, Format Version 11.00
-# Visual Studio 2010
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "FreeRDP", "FreeRDP\FreeRDP.csproj", "{C5E8D831-864B-4BE7-8027-77727D5A6D80}"
-EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "NFreeRDP", "NFreeRDP\NFreeRDP.csproj", "{DDCCC18C-7B29-431D-8F48-F6DCD579D272}"
-EndProject
-Global
- GlobalSection(SolutionConfigurationPlatforms) = preSolution
- Debug|Mixed Platforms = Debug|Mixed Platforms
- Debug|x86 = Debug|x86
- Release|Mixed Platforms = Release|Mixed Platforms
- Release|x86 = Release|x86
- EndGlobalSection
- GlobalSection(ProjectConfigurationPlatforms) = postSolution
- {C5E8D831-864B-4BE7-8027-77727D5A6D80}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
- {C5E8D831-864B-4BE7-8027-77727D5A6D80}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU
- {C5E8D831-864B-4BE7-8027-77727D5A6D80}.Debug|x86.ActiveCfg = Debug|Any CPU
- {C5E8D831-864B-4BE7-8027-77727D5A6D80}.Debug|x86.Build.0 = Debug|Any CPU
- {C5E8D831-864B-4BE7-8027-77727D5A6D80}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU
- {C5E8D831-864B-4BE7-8027-77727D5A6D80}.Release|Mixed Platforms.Build.0 = Release|Any CPU
- {C5E8D831-864B-4BE7-8027-77727D5A6D80}.Release|x86.ActiveCfg = Release|Any CPU
- {C5E8D831-864B-4BE7-8027-77727D5A6D80}.Release|x86.Build.0 = Release|Any CPU
- {DDCCC18C-7B29-431D-8F48-F6DCD579D272}.Debug|Mixed Platforms.ActiveCfg = Debug|x86
- {DDCCC18C-7B29-431D-8F48-F6DCD579D272}.Debug|Mixed Platforms.Build.0 = Debug|x86
- {DDCCC18C-7B29-431D-8F48-F6DCD579D272}.Debug|x86.ActiveCfg = Debug|x86
- {DDCCC18C-7B29-431D-8F48-F6DCD579D272}.Debug|x86.Build.0 = Debug|x86
- {DDCCC18C-7B29-431D-8F48-F6DCD579D272}.Release|Mixed Platforms.ActiveCfg = Release|x86
- {DDCCC18C-7B29-431D-8F48-F6DCD579D272}.Release|Mixed Platforms.Build.0 = Release|x86
- {DDCCC18C-7B29-431D-8F48-F6DCD579D272}.Release|x86.ActiveCfg = Release|x86
- {DDCCC18C-7B29-431D-8F48-F6DCD579D272}.Release|x86.Build.0 = Release|x86
- EndGlobalSection
- GlobalSection(SolutionProperties) = preSolution
- HideSolutionNode = FALSE
- EndGlobalSection
- GlobalSection(MonoDevelopProperties) = preSolution
- StartupItem = Client\Client.csproj
- Policies = $0
- $0.DotNetNamingPolicy = $1
- $1.DirectoryNamespaceAssociation = None
- $1.ResourceNamePolicy = FileFormatDefault
- $0.TextStylePolicy = $2
- $2.inheritsSet = null
- $2.scope = text/x-csharp
- $0.CSharpFormattingPolicy = $3
- $3.inheritsSet = Mono
- $3.inheritsScope = text/x-csharp
- $3.scope = text/x-csharp
- EndGlobalSection
-EndGlobal
+
+Microsoft Visual Studio Solution File, Format Version 11.00
+# Visual Studio 2010
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "FreeRDP", "FreeRDP\FreeRDP.csproj", "{C5E8D831-864B-4BE7-8027-77727D5A6D80}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "NFreeRDP", "NFreeRDP\NFreeRDP.csproj", "{DDCCC18C-7B29-431D-8F48-F6DCD579D272}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "GFreeRDP", "GFreeRDP\GFreeRDP.csproj", "{60C01725-0B80-414D-82F4-6EDEF452AD94}"
+EndProject
+Global
+ GlobalSection(SolutionConfigurationPlatforms) = preSolution
+ Debug|Mixed Platforms = Debug|Mixed Platforms
+ Debug|x86 = Debug|x86
+ Release|Mixed Platforms = Release|Mixed Platforms
+ Release|x86 = Release|x86
+ EndGlobalSection
+ GlobalSection(ProjectConfigurationPlatforms) = postSolution
+ {60C01725-0B80-414D-82F4-6EDEF452AD94}.Debug|Mixed Platforms.ActiveCfg = Debug|Mixed Platforms
+ {60C01725-0B80-414D-82F4-6EDEF452AD94}.Debug|Mixed Platforms.Build.0 = Debug|Mixed Platforms
+ {60C01725-0B80-414D-82F4-6EDEF452AD94}.Debug|x86.ActiveCfg = Debug|Mixed Platforms
+ {60C01725-0B80-414D-82F4-6EDEF452AD94}.Debug|x86.Build.0 = Debug|Mixed Platforms
+ {60C01725-0B80-414D-82F4-6EDEF452AD94}.Release|Mixed Platforms.ActiveCfg = Release|Mixed Platforms
+ {60C01725-0B80-414D-82F4-6EDEF452AD94}.Release|Mixed Platforms.Build.0 = Release|Mixed Platforms
+ {60C01725-0B80-414D-82F4-6EDEF452AD94}.Release|x86.ActiveCfg = Release|Mixed Platforms
+ {60C01725-0B80-414D-82F4-6EDEF452AD94}.Release|x86.Build.0 = Release|Mixed Platforms
+ {C5E8D831-864B-4BE7-8027-77727D5A6D80}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
+ {C5E8D831-864B-4BE7-8027-77727D5A6D80}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU
+ {C5E8D831-864B-4BE7-8027-77727D5A6D80}.Debug|x86.ActiveCfg = Debug|Any CPU
+ {C5E8D831-864B-4BE7-8027-77727D5A6D80}.Debug|x86.Build.0 = Debug|Any CPU
+ {C5E8D831-864B-4BE7-8027-77727D5A6D80}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU
+ {C5E8D831-864B-4BE7-8027-77727D5A6D80}.Release|Mixed Platforms.Build.0 = Release|Any CPU
+ {C5E8D831-864B-4BE7-8027-77727D5A6D80}.Release|x86.ActiveCfg = Release|Any CPU
+ {C5E8D831-864B-4BE7-8027-77727D5A6D80}.Release|x86.Build.0 = Release|Any CPU
+ {DDCCC18C-7B29-431D-8F48-F6DCD579D272}.Debug|Mixed Platforms.ActiveCfg = Debug|x86
+ {DDCCC18C-7B29-431D-8F48-F6DCD579D272}.Debug|Mixed Platforms.Build.0 = Debug|x86
+ {DDCCC18C-7B29-431D-8F48-F6DCD579D272}.Debug|x86.ActiveCfg = Debug|x86
+ {DDCCC18C-7B29-431D-8F48-F6DCD579D272}.Debug|x86.Build.0 = Debug|x86
+ {DDCCC18C-7B29-431D-8F48-F6DCD579D272}.Release|Mixed Platforms.ActiveCfg = Release|x86
+ {DDCCC18C-7B29-431D-8F48-F6DCD579D272}.Release|Mixed Platforms.Build.0 = Release|x86
+ {DDCCC18C-7B29-431D-8F48-F6DCD579D272}.Release|x86.ActiveCfg = Release|x86
+ {DDCCC18C-7B29-431D-8F48-F6DCD579D272}.Release|x86.Build.0 = Release|x86
+ EndGlobalSection
+ GlobalSection(MonoDevelopProperties) = preSolution
+ StartupItem = GFreeRDP\GFreeRDP.csproj
+ Policies = $0
+ $0.DotNetNamingPolicy = $1
+ $1.DirectoryNamespaceAssociation = None
+ $1.ResourceNamePolicy = FileFormatDefault
+ $0.TextStylePolicy = $2
+ $2.inheritsSet = null
+ $2.scope = text/x-csharp
+ $0.CSharpFormattingPolicy = $3
+ $3.inheritsSet = Mono
+ $3.inheritsScope = text/x-csharp
+ $3.scope = text/x-csharp
+ EndGlobalSection
+ GlobalSection(SolutionProperties) = preSolution
+ HideSolutionNode = FALSE
+ EndGlobalSection
+EndGlobal
diff --git a/GFreeRDP/AssemblyInfo.cs b/GFreeRDP/AssemblyInfo.cs
new file mode 100644
index 0000000..2799a7f
--- /dev/null
+++ b/GFreeRDP/AssemblyInfo.cs
@@ -0,0 +1,27 @@
+using System.Reflection;
+using System.Runtime.CompilerServices;
+
+// Information about this assembly is defined by the following attributes.
+// Change them to the values specific to your project.
+
+[assembly: AssemblyTitle("GFreeRDP")]
+[assembly: AssemblyDescription("")]
+[assembly: AssemblyConfiguration("")]
+[assembly: AssemblyCompany("")]
+[assembly: AssemblyProduct("")]
+[assembly: AssemblyCopyright("awake")]
+[assembly: AssemblyTrademark("")]
+[assembly: AssemblyCulture("")]
+
+// The assembly version has the format "{Major}.{Minor}.{Build}.{Revision}".
+// The form "{Major}.{Minor}.*" will automatically update the build and revision,
+// and "{Major}.{Minor}.{Build}.*" will update just the revision.
+
+[assembly: AssemblyVersion("1.0.*")]
+
+// The following attributes are used to specify the signing key for the assembly,
+// if desired. See the Mono documentation for more information about signing.
+
+//[assembly: AssemblyDelaySign(false)]
+//[assembly: AssemblyKeyFile("")]
+
diff --git a/GFreeRDP/ConnectionDialog.cs b/GFreeRDP/ConnectionDialog.cs
new file mode 100644
index 0000000..0756792
--- /dev/null
+++ b/GFreeRDP/ConnectionDialog.cs
@@ -0,0 +1,58 @@
+/**
+ * FreeRDP: A Remote Desktop Protocol Implementation
+ *
+ * Copyright 2012 Marc-Andre Moreau <marcandre.moreau@gmail.com>
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+using System;
+
+namespace GFreeRDP
+{
+ public partial class ConnectionDialog : Gtk.Dialog
+ {
+ private IUserAction iUserAction;
+
+ public ConnectionDialog(IUserAction iUserAction)
+ {
+ this.Build();
+ this.iUserAction = iUserAction;
+ }
+
+ protected void OnButtonConnectClicked(object sender, System.EventArgs e)
+ {
+ string hostname;
+ string username;
+ string password;
+
+ hostname = entryHostname.Text;
+ username = entryUsername.Text;
+ password = entryPassword.Text;
+
+ Console.WriteLine("OnButtonConnectActivated");
+
+ iUserAction.OnNewConnection(hostname, username, password);
+
+ Console.WriteLine("OnButtonConnectActivated Destroy");
+
+ this.Destroy();
+ }
+
+ protected void OnButtonCancelClicked(object sender, System.EventArgs e)
+ {
+ this.Destroy();
+ }
+ }
+}
+
diff --git a/GFreeRDP/GFreeRDP.csproj b/GFreeRDP/GFreeRDP.csproj
new file mode 100644
index 0000000..153def1
--- /dev/null
+++ b/GFreeRDP/GFreeRDP.csproj
@@ -0,0 +1,85 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <PropertyGroup>
+ <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
+ <Platform Condition=" '$(Platform)' == '' ">Mixed Platforms</Platform>
+ <ProductVersion>10.0.0</ProductVersion>
+ <SchemaVersion>2.0</SchemaVersion>
+ <ProjectGuid>{60C01725-0B80-414D-82F4-6EDEF452AD94}</ProjectGuid>
+ <OutputType>WinExe</OutputType>
+ <RootNamespace>GFreeRDP</RootNamespace>
+ <AssemblyName>GFreeRDP</AssemblyName>
+ <TargetFrameworkVersion>v4.0</TargetFrameworkVersion>
+ </PropertyGroup>
+ <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|Mixed Platforms' ">
+ <DebugSymbols>true</DebugSymbols>
+ <DebugType>full</DebugType>
+ <Optimize>false</Optimize>
+ <OutputPath>bin\Debug</OutputPath>
+ <DefineConstants>DEBUG</DefineConstants>
+ <ErrorReport>prompt</ErrorReport>
+ <WarningLevel>4</WarningLevel>
+ <ConsolePause>false</ConsolePause>
+ <AllowUnsafeBlocks>true</AllowUnsafeBlocks>
+ </PropertyGroup>
+ <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|Mixed Platforms' ">
+ <DebugType>none</DebugType>
+ <Optimize>false</Optimize>
+ <OutputPath>bin\Release</OutputPath>
+ <ErrorReport>prompt</ErrorReport>
+ <WarningLevel>4</WarningLevel>
+ <ConsolePause>false</ConsolePause>
+ <AllowUnsafeBlocks>true</AllowUnsafeBlocks>
+ </PropertyGroup>
+ <ItemGroup>
+ <Reference Include="System" />
+ <Reference Include="gtk-sharp, Version=2.12.0.0, Culture=neutral, PublicKeyToken=35e10195dab3c99f">
+ <SpecificVersion>False</SpecificVersion>
+ <Package>gtk-sharp-2.0</Package>
+ </Reference>
+ <Reference Include="gdk-sharp, Version=2.12.0.0, Culture=neutral, PublicKeyToken=35e10195dab3c99f">
+ <SpecificVersion>False</SpecificVersion>
+ <Package>gtk-sharp-2.0</Package>
+ </Reference>
+ <Reference Include="glib-sharp, Version=2.12.0.0, Culture=neutral, PublicKeyToken=35e10195dab3c99f">
+ <SpecificVersion>False</SpecificVersion>
+ <Package>glib-sharp-2.0</Package>
+ </Reference>
+ <Reference Include="glade-sharp, Version=2.12.0.0, Culture=neutral, PublicKeyToken=35e10195dab3c99f">
+ <SpecificVersion>False</SpecificVersion>
+ <Package>glade-sharp-2.0</Package>
+ </Reference>
+ <Reference Include="pango-sharp, Version=2.12.0.0, Culture=neutral, PublicKeyToken=35e10195dab3c99f">
+ <SpecificVersion>False</SpecificVersion>
+ <Package>gtk-sharp-2.0</Package>
+ </Reference>
+ <Reference Include="atk-sharp, Version=2.12.0.0, Culture=neutral, PublicKeyToken=35e10195dab3c99f">
+ <SpecificVersion>False</SpecificVersion>
+ <Package>gtk-sharp-2.0</Package>
+ </Reference>
+ <Reference Include="Mono.Posix" />
+ </ItemGroup>
+ <ItemGroup>
+ <EmbeddedResource Include="gtk-gui\gui.stetic">
+ <LogicalName>gui.stetic</LogicalName>
+ </EmbeddedResource>
+ </ItemGroup>
+ <ItemGroup>
+ <Compile Include="gtk-gui\generated.cs" />
+ <Compile Include="MainWindow.cs" />
+ <Compile Include="AssemblyInfo.cs" />
+ <Compile Include="RdpClient.cs" />
+ <Compile Include="Program.cs" />
+ <Compile Include="gtk-gui\GFreeRDP.MainWindow.cs" />
+ <Compile Include="ConnectionDialog.cs" />
+ <Compile Include="gtk-gui\GFreeRDP.ConnectionDialog.cs" />
+ <Compile Include="IUserAction.cs" />
+ </ItemGroup>
+ <Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />
+ <ItemGroup>
+ <ProjectReference Include="..\FreeRDP\FreeRDP.csproj">
+ <Project>{C5E8D831-864B-4BE7-8027-77727D5A6D80}</Project>
+ <Name>FreeRDP</Name>
+ </ProjectReference>
+ </ItemGroup>
+</Project> \ No newline at end of file
diff --git a/GFreeRDP/IUserAction.cs b/GFreeRDP/IUserAction.cs
new file mode 100644
index 0000000..1e1ee4b
--- /dev/null
+++ b/GFreeRDP/IUserAction.cs
@@ -0,0 +1,27 @@
+/**
+ * FreeRDP: A Remote Desktop Protocol Implementation
+ *
+ * Copyright 2012 Marc-Andre Moreau <marcandre.moreau@gmail.com>
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+using System;
+
+namespace GFreeRDP
+{
+ public interface IUserAction
+ {
+ void OnNewConnection(string hostname, string username, string password);
+ }
+}
diff --git a/GFreeRDP/MainWindow.cs b/GFreeRDP/MainWindow.cs
new file mode 100644
index 0000000..5a477e9
--- /dev/null
+++ b/GFreeRDP/MainWindow.cs
@@ -0,0 +1,52 @@
+/**
+ * FreeRDP: A Remote Desktop Protocol Implementation
+ *
+ * Copyright 2012 Marc-Andre Moreau <marcandre.moreau@gmail.com>
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+using System;
+using FreeRDP;
+using Gtk;
+
+namespace GFreeRDP
+{
+ public partial class MainWindow: Gtk.Window, IUserAction
+ {
+ RdpClient rdpClient;
+
+ public MainWindow(): base (Gtk.WindowType.Toplevel)
+ {
+ Build();
+ }
+
+ protected void OnDeleteEvent(object sender, DeleteEventArgs a)
+ {
+ Application.Quit();
+ a.RetVal = true;
+ }
+
+ protected void OnConnectActionActivated(object sender, System.EventArgs e)
+ {
+ ConnectionDialog connectionDialog = new ConnectionDialog(this);
+ }
+
+ public void OnNewConnection(string hostname, string username, string password)
+ {
+ rdpClient = new RdpClient();
+
+ rdpClient.Connect(hostname, 3389, username, "", password);
+ }
+ }
+}
diff --git a/GFreeRDP/Program.cs b/GFreeRDP/Program.cs
new file mode 100644
index 0000000..9901d49
--- /dev/null
+++ b/GFreeRDP/Program.cs
@@ -0,0 +1,34 @@
+/**
+ * FreeRDP: A Remote Desktop Protocol Implementation
+ *
+ * Copyright 2012 Marc-Andre Moreau <marcandre.moreau@gmail.com>
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+using System;
+using Gtk;
+
+namespace GFreeRDP
+{
+ class Program
+ {
+ public static void Main(string[] args)
+ {
+ Application.Init();
+ MainWindow window = new MainWindow();
+ window.Show();
+ Application.Run();
+ }
+ }
+}
diff --git a/GFreeRDP/RdpClient.cs b/GFreeRDP/RdpClient.cs
new file mode 100644
index 0000000..b1f41f3
--- /dev/null
+++ b/GFreeRDP/RdpClient.cs
@@ -0,0 +1,143 @@
+/**
+ * FreeRDP: A Remote Desktop Protocol Implementation
+ * RDP Connector
+ *
+ * Copyright 2011-2012 Marc-Andre Moreau <marcandre.moreau@gmail.com>
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+using System;
+using FreeRDP;
+using System.Threading;
+
+namespace GFreeRDP
+{
+ public unsafe class RdpClient : IUpdate, IPrimaryUpdate
+ {
+ private RDP rdp;
+ private int port;
+ private string hostname;
+ private string username;
+ private string domain;
+ private string password;
+
+ private Thread thread;
+ private static bool procRunning = true;
+
+ /**
+ * Instantiate RDP and Thread
+ */
+ public RdpClient()
+ {
+ port = 3389;
+ hostname = "localhost";
+ username = "Administrator";
+ domain = "";
+ password = "";
+ rdp = new RDP();
+ thread = new Thread(() => ThreadProc(rdp));
+ }
+
+ /**
+ * Connect to FreeRDP server, start thread
+ */
+ public void Connect(string hostname, int port, string username, string domain, string password)
+ {
+ rdp.SetUpdateInterface(this);
+ rdp.SetPrimaryUpdateInterface(this);
+ rdp.Connect(hostname, port, username, domain, password);
+ procRunning = true;
+ thread.Start();
+ }
+
+ /**
+ * Disconnect from FreeRDP server, stop thread
+ */
+ public void Disconnect()
+ {
+ rdp.Disconnect();
+ procRunning = false;
+ thread = new Thread(() => ThreadProc(rdp));
+ }
+
+ public void OnMouseEvent(UInt16 pointerFlags, UInt16 x, UInt16 y)
+ {
+ rdp.SendInputMouseEvent(pointerFlags, x, y);
+ }
+
+ public void OnKeyboardEvent(UInt16 keyboardFlags, UInt16 keyCode)
+ {
+ rdp.SendInputKeyboardEvent(keyboardFlags, keyCode);
+ }
+
+ public void BeginPaint(rdpContext* context) { }
+ public void EndPaint(rdpContext* context) { }
+ public void SetBounds(rdpContext* context, rdpBounds* bounds) { }
+ public void Synchronize(rdpContext* context) { }
+ public void DesktopResize(rdpContext* context) { }
+
+ public void BitmapUpdate(rdpContext* context, BitmapUpdate* bitmap)
+ {
+ Console.WriteLine("BitmapUpdate");
+ }
+
+ public void Palette(rdpContext* context, PaletteUpdate* palette) { }
+ public void PlaySound(rdpContext* context, PlaySoundUpdate* playSound) { }
+
+ public void SurfaceBits(rdpContext* context, SurfaceBits* surfaceBits)
+ {
+ Console.WriteLine("SurfaceBits");
+ SurfaceBitsCommand cmd = new SurfaceBitsCommand();
+ cmd.Read(surfaceBits);
+ }
+
+ public void DstBlt(rdpContext* context, DstBltOrder* dstblt) { }
+ public void PatBlt(rdpContext* context, PatBltOrder* patblt) { }
+ public void ScrBlt(rdpContext* context, ScrBltOrder* scrblt) { }
+
+ public void OpaqueRect(rdpContext* context, OpaqueRectOrder* opaqueRect)
+ {
+ Console.WriteLine("OpaqueRect");
+ }
+
+ public void DrawNineGrid(rdpContext* context, DrawNineGridOrder* drawNineGrid) { }
+ public void MultiDstBlt(rdpContext* context, MultiDstBltOrder* multi_dstblt) { }
+ public void MultiPatBlt(rdpContext* context, MultiPatBltOrder* multi_patblt) { }
+ public void MultiScrBlt(rdpContext* context, MultiScrBltOrder* multi_scrblt) { }
+ public void MultiOpaqueRect(rdpContext* context, MultiOpaqueRectOrder* multi_opaque_rect) { }
+ public void MultiDrawNineGrid(rdpContext* context, MultiDrawNineGridOrder* multi_draw_nine_grid) { }
+ public void LineTo(rdpContext* context, LineToOrder* line_to) { }
+ public void Polyline(rdpContext* context, PolylineOrder* polyline) { }
+ public void MemBlt(rdpContext* context, MemBltOrder* memblt) { }
+ public void Mem3Blt(rdpContext* context, Mem3BltOrder* mem3blt) { }
+ public void SaveBitmap(rdpContext* context, SaveBitmapOrder* save_bitmap) { }
+ public void GlyphIndex(rdpContext* context, GlyphIndexOrder* glyph_index) { }
+ public void FastIndex(rdpContext* context, FastIndexOrder* fast_index) { }
+ public void FastGlyph(rdpContext* context, FastGlyphOrder* fast_glyph) { }
+ public void PolygonSC(rdpContext* context, PolygonSCOrder* polygon_sc) { }
+ public void PolygonCB(rdpContext* context, PolygonCBOrder* polygon_cb) { }
+ public void EllipseSC(rdpContext* context, EllipseSCOrder* ellipse_sc) { }
+ public void EllipseCB(rdpContext* context, EllipseCBOrder* ellipse_cb) { }
+
+ static void ThreadProc(RDP rdp)
+ {
+ while (procRunning)
+ {
+ rdp.CheckFileDescriptor();
+ Thread.Sleep(10);
+ }
+ }
+ }
+}
+
diff --git a/GFreeRDP/gtk-gui/GFreeRDP.ConnectionDialog.cs b/GFreeRDP/gtk-gui/GFreeRDP.ConnectionDialog.cs
new file mode 100644
index 0000000..5fc158b
--- /dev/null
+++ b/GFreeRDP/gtk-gui/GFreeRDP.ConnectionDialog.cs
@@ -0,0 +1,141 @@
+
+// This file has been generated by the GUI designer. Do not modify.
+namespace GFreeRDP
+{
+ public partial class ConnectionDialog
+ {
+ private global::Gtk.HBox hboxHostname;
+ private global::Gtk.Label labelHostname;
+ private global::Gtk.Entry entryHostname;
+ private global::Gtk.HBox hboxCredentials;
+ private global::Gtk.Label labelUsername;
+ private global::Gtk.Entry entryUsername;
+ private global::Gtk.Label labelPassword;
+ private global::Gtk.Entry entryPassword;
+ private global::Gtk.Button buttonCancel;
+ private global::Gtk.Button buttonConnect;
+
+ protected virtual void Build ()
+ {
+ global::Stetic.Gui.Initialize (this);
+ // Widget GFreeRDP.ConnectionDialog
+ this.Name = "GFreeRDP.ConnectionDialog";
+ this.Title = global::Mono.Unix.Catalog.GetString ("Connection");
+ this.WindowPosition = ((global::Gtk.WindowPosition)(4));
+ // Internal child GFreeRDP.ConnectionDialog.VBox
+ global::Gtk.VBox w1 = this.VBox;
+ w1.Name = "connectionDialog_VBox";
+ w1.BorderWidth = ((uint)(2));
+ // Container child connectionDialog_VBox.Gtk.Box+BoxChild
+ this.hboxHostname = new global::Gtk.HBox ();
+ this.hboxHostname.Name = "hboxHostname";
+ this.hboxHostname.Spacing = 6;
+ // Container child hboxHostname.Gtk.Box+BoxChild
+ this.labelHostname = new global::Gtk.Label ();
+ this.labelHostname.Name = "labelHostname";
+ this.labelHostname.LabelProp = global::Mono.Unix.Catalog.GetString ("Hostname:");
+ this.hboxHostname.Add (this.labelHostname);
+ global::Gtk.Box.BoxChild w2 = ((global::Gtk.Box.BoxChild)(this.hboxHostname [this.labelHostname]));
+ w2.Position = 0;
+ w2.Expand = false;
+ w2.Fill = false;
+ // Container child hboxHostname.Gtk.Box+BoxChild
+ this.entryHostname = new global::Gtk.Entry ();
+ this.entryHostname.CanFocus = true;
+ this.entryHostname.Name = "entryHostname";
+ this.entryHostname.IsEditable = true;
+ this.entryHostname.InvisibleChar = '•';
+ this.hboxHostname.Add (this.entryHostname);
+ global::Gtk.Box.BoxChild w3 = ((global::Gtk.Box.BoxChild)(this.hboxHostname [this.entryHostname]));
+ w3.Position = 1;
+ w1.Add (this.hboxHostname);
+ global::Gtk.Box.BoxChild w4 = ((global::Gtk.Box.BoxChild)(w1 [this.hboxHostname]));
+ w4.Position = 0;
+ w4.Expand = false;
+ w4.Fill = false;
+ // Container child connectionDialog_VBox.Gtk.Box+BoxChild
+ this.hboxCredentials = new global::Gtk.HBox ();
+ this.hboxCredentials.Name = "hboxCredentials";
+ this.hboxCredentials.Spacing = 6;
+ // Container child hboxCredentials.Gtk.Box+BoxChild
+ this.labelUsername = new global::Gtk.Label ();
+ this.labelUsername.Name = "labelUsername";
+ this.labelUsername.LabelProp = global::Mono.Unix.Catalog.GetString ("Username:");
+ this.hboxCredentials.Add (this.labelUsername);
+ global::Gtk.Box.BoxChild w5 = ((global::Gtk.Box.BoxChild)(this.hboxCredentials [this.labelUsername]));
+ w5.Position = 0;
+ w5.Expand = false;
+ w5.Fill = false;
+ // Container child hboxCredentials.Gtk.Box+BoxChild
+ this.entryUsername = new global::Gtk.Entry ();
+ this.entryUsername.CanFocus = true;
+ this.entryUsername.Name = "entryUsername";
+ this.entryUsername.IsEditable = true;
+ this.entryUsername.InvisibleChar = '•';
+ this.hboxCredentials.Add (this.entryUsername);
+ global::Gtk.Box.BoxChild w6 = ((global::Gtk.Box.BoxChild)(this.hboxCredentials [this.entryUsername]));
+ w6.Position = 1;
+ // Container child hboxCredentials.Gtk.Box+BoxChild
+ this.labelPassword = new global::Gtk.Label ();
+ this.labelPassword.Name = "labelPassword";
+ this.labelPassword.LabelProp = global::Mono.Unix.Catalog.GetString ("Password:");
+ this.hboxCredentials.Add (this.labelPassword);
+ global::Gtk.Box.BoxChild w7 = ((global::Gtk.Box.BoxChild)(this.hboxCredentials [this.labelPassword]));
+ w7.Position = 2;
+ w7.Expand = false;
+ w7.Fill = false;
+ // Container child hboxCredentials.Gtk.Box+BoxChild
+ this.entryPassword = new global::Gtk.Entry ();
+ this.entryPassword.CanFocus = true;
+ this.entryPassword.Name = "entryPassword";
+ this.entryPassword.IsEditable = true;
+ this.entryPassword.InvisibleChar = '•';
+ this.hboxCredentials.Add (this.entryPassword);
+ global::Gtk.Box.BoxChild w8 = ((global::Gtk.Box.BoxChild)(this.hboxCredentials [this.entryPassword]));
+ w8.Position = 3;
+ w1.Add (this.hboxCredentials);
+ global::Gtk.Box.BoxChild w9 = ((global::Gtk.Box.BoxChild)(w1 [this.hboxCredentials]));
+ w9.Position = 1;
+ w9.Expand = false;
+ w9.Fill = false;
+ // Internal child GFreeRDP.ConnectionDialog.ActionArea
+ global::Gtk.HButtonBox w10 = this.ActionArea;
+ w10.Name = "connectionDialog_ActionArea";
+ w10.Spacing = 10;
+ w10.BorderWidth = ((uint)(5));
+ w10.LayoutStyle = ((global::Gtk.ButtonBoxStyle)(4));
+ // Container child connectionDialog_ActionArea.Gtk.ButtonBox+ButtonBoxChild
+ this.buttonCancel = new global::Gtk.Button ();
+ this.buttonCancel.CanDefault = true;
+ this.buttonCancel.CanFocus = true;
+ this.buttonCancel.Name = "buttonCancel";
+ this.buttonCancel.UseStock = true;
+ this.buttonCancel.UseUnderline = true;
+ this.buttonCancel.Label = "gtk-cancel";
+ this.AddActionWidget (this.buttonCancel, -6);
+ global::Gtk.ButtonBox.ButtonBoxChild w11 = ((global::Gtk.ButtonBox.ButtonBoxChild)(w10 [this.buttonCancel]));
+ w11.Expand = false;
+ w11.Fill = false;
+ // Container child connectionDialog_ActionArea.Gtk.ButtonBox+ButtonBoxChild
+ this.buttonConnect = new global::Gtk.Button ();
+ this.buttonConnect.CanDefault = true;
+ this.buttonConnect.CanFocus = true;
+ this.buttonConnect.Name = "buttonConnect";
+ this.buttonConnect.UseUnderline = true;
+ this.buttonConnect.Label = global::Mono.Unix.Catalog.GetString ("Connect");
+ this.AddActionWidget (this.buttonConnect, -5);
+ global::Gtk.ButtonBox.ButtonBoxChild w12 = ((global::Gtk.ButtonBox.ButtonBoxChild)(w10 [this.buttonConnect]));
+ w12.Position = 1;
+ w12.Expand = false;
+ w12.Fill = false;
+ if ((this.Child != null)) {
+ this.Child.ShowAll ();
+ }
+ this.DefaultWidth = 516;
+ this.DefaultHeight = 135;
+ this.Show ();
+ this.buttonCancel.Clicked += new global::System.EventHandler (this.OnButtonCancelClicked);
+ this.buttonConnect.Clicked += new global::System.EventHandler (this.OnButtonConnectClicked);
+ }
+ }
+}
diff --git a/GFreeRDP/gtk-gui/GFreeRDP.MainWindow.cs b/GFreeRDP/gtk-gui/GFreeRDP.MainWindow.cs
new file mode 100644
index 0000000..2ebf9ec
--- /dev/null
+++ b/GFreeRDP/gtk-gui/GFreeRDP.MainWindow.cs
@@ -0,0 +1,62 @@
+
+// This file has been generated by the GUI designer. Do not modify.
+namespace GFreeRDP
+{
+ public partial class MainWindow
+ {
+ private global::Gtk.UIManager UIManager;
+ private global::Gtk.Action FileAction;
+ private global::Gtk.Action HelpAction;
+ private global::Gtk.Action ConnectAction;
+ private global::Gtk.Action QuitAction;
+ private global::Gtk.VBox vboxMain;
+ private global::Gtk.MenuBar menuBarMain;
+
+ protected virtual void Build ()
+ {
+ global::Stetic.Gui.Initialize (this);
+ // Widget GFreeRDP.MainWindow
+ this.UIManager = new global::Gtk.UIManager ();
+ global::Gtk.ActionGroup w1 = new global::Gtk.ActionGroup ("Default");
+ this.FileAction = new global::Gtk.Action ("FileAction", global::Mono.Unix.Catalog.GetString ("File"), null, null);
+ this.FileAction.ShortLabel = global::Mono.Unix.Catalog.GetString ("File");
+ w1.Add (this.FileAction, null);
+ this.HelpAction = new global::Gtk.Action ("HelpAction", global::Mono.Unix.Catalog.GetString ("Help"), null, null);
+ this.HelpAction.ShortLabel = global::Mono.Unix.Catalog.GetString ("Help");
+ w1.Add (this.HelpAction, null);
+ this.ConnectAction = new global::Gtk.Action ("ConnectAction", global::Mono.Unix.Catalog.GetString ("Connect"), null, null);
+ this.ConnectAction.ShortLabel = global::Mono.Unix.Catalog.GetString ("Connect");
+ w1.Add (this.ConnectAction, null);
+ this.QuitAction = new global::Gtk.Action ("QuitAction", global::Mono.Unix.Catalog.GetString ("Quit"), null, null);
+ this.QuitAction.ShortLabel = global::Mono.Unix.Catalog.GetString ("Quit");
+ w1.Add (this.QuitAction, null);
+ this.UIManager.InsertActionGroup (w1, 0);
+ this.AddAccelGroup (this.UIManager.AccelGroup);
+ this.Name = "GFreeRDP.MainWindow";
+ this.Title = global::Mono.Unix.Catalog.GetString ("MainWindow");
+ this.WindowPosition = ((global::Gtk.WindowPosition)(4));
+ // Container child GFreeRDP.MainWindow.Gtk.Container+ContainerChild
+ this.vboxMain = new global::Gtk.VBox ();
+ this.vboxMain.Name = "vboxMain";
+ this.vboxMain.Spacing = 6;
+ // Container child vboxMain.Gtk.Box+BoxChild
+ this.UIManager.AddUiFromString ("<ui><menubar name='menuBarMain'><menu name='FileAction' action='FileAction'><menuitem name='ConnectAction' action='ConnectAction'/><menuitem name='QuitAction' action='QuitAction'/></menu><menu name='HelpAction' action='HelpAction'/></menubar></ui>");
+ this.menuBarMain = ((global::Gtk.MenuBar)(this.UIManager.GetWidget ("/menuBarMain")));
+ this.menuBarMain.Name = "menuBarMain";
+ this.vboxMain.Add (this.menuBarMain);
+ global::Gtk.Box.BoxChild w2 = ((global::Gtk.Box.BoxChild)(this.vboxMain [this.menuBarMain]));
+ w2.Position = 0;
+ w2.Expand = false;
+ w2.Fill = false;
+ this.Add (this.vboxMain);
+ if ((this.Child != null)) {
+ this.Child.ShowAll ();
+ }
+ this.DefaultWidth = 409;
+ this.DefaultHeight = 300;
+ this.Show ();
+ this.DeleteEvent += new global::Gtk.DeleteEventHandler (this.OnDeleteEvent);
+ this.ConnectAction.Activated += new global::System.EventHandler (this.OnConnectActionActivated);
+ }
+ }
+}
diff --git a/GFreeRDP/gtk-gui/generated.cs b/GFreeRDP/gtk-gui/generated.cs
new file mode 100644
index 0000000..4e5b605
--- /dev/null
+++ b/GFreeRDP/gtk-gui/generated.cs
@@ -0,0 +1,29 @@
+
+// This file has been generated by the GUI designer. Do not modify.
+namespace Stetic
+{
+ internal class Gui
+ {
+ private static bool initialized;
+
+ internal static void Initialize (Gtk.Widget iconRenderer)
+ {
+ if ((Stetic.Gui.initialized == false)) {
+ Stetic.Gui.initialized = true;
+ }
+ }
+ }
+
+ internal class ActionGroups
+ {
+ public static Gtk.ActionGroup GetActionGroup (System.Type type)
+ {
+ return Stetic.ActionGroups.GetActionGroup (type.FullName);
+ }
+
+ public static Gtk.ActionGroup GetActionGroup (string name)
+ {
+ return null;
+ }
+ }
+}
diff --git a/GFreeRDP/gtk-gui/gui.stetic b/GFreeRDP/gtk-gui/gui.stetic
new file mode 100644
index 0000000..6c8ed4e
--- /dev/null
+++ b/GFreeRDP/gtk-gui/gui.stetic
@@ -0,0 +1,219 @@
+<?xml version="1.0" encoding="utf-8"?>
+<stetic-interface>
+ <configuration>
+ <images-root-path>..</images-root-path>
+ <target-gtk-version>2.12</target-gtk-version>
+ </configuration>
+ <import>
+ <widget-library name="glade-sharp, Version=2.12.0.0, Culture=neutral, PublicKeyToken=35e10195dab3c99f" />
+ <widget-library name="../bin/Debug/GFreeRDP.exe" internal="true" />
+ </import>
+ <widget class="Gtk.Window" id="GFreeRDP.MainWindow" design-size="409 300">
+ <action-group name="Default">
+ <action id="FileAction">
+ <property name="Type">Action</property>
+ <property name="Label" translatable="yes">File</property>
+ <property name="ShortLabel" translatable="yes">File</property>
+ </action>
+ <action id="HelpAction">
+ <property name="Type">Action</property>
+ <property name="Label" translatable="yes">Help</property>
+ <property name="ShortLabel" translatable="yes">Help</property>
+ </action>
+ <action id="ConnectAction">
+ <property name="Type">Action</property>
+ <property name="Label" translatable="yes">Connect</property>
+ <property name="ShortLabel" translatable="yes">Connect</property>
+ <signal name="Activated" handler="OnConnectActionActivated" />
+ </action>
+ <action id="QuitAction">
+ <property name="Type">Action</property>
+ <property name="Label" translatable="yes">Quit</property>
+ <property name="ShortLabel" translatable="yes">Quit</property>
+ </action>
+ </action-group>
+ <property name="MemberName" />
+ <property name="Title" translatable="yes">MainWindow</property>
+ <property name="WindowPosition">CenterOnParent</property>
+ <signal name="DeleteEvent" handler="OnDeleteEvent" />
+ <child>
+ <widget class="Gtk.VBox" id="vboxMain">
+ <property name="MemberName" />
+ <property name="Spacing">6</property>
+ <child>
+ <widget class="Gtk.MenuBar" id="menuBarMain">
+ <property name="MemberName" />
+ <node name="menuBarMain" type="Menubar">
+ <node type="Menu" action="FileAction">
+ <node type="Menuitem" action="ConnectAction" />
+ <node type="Menuitem" action="QuitAction" />
+ </node>
+ <node type="Menu" action="HelpAction" />
+ </node>
+ </widget>
+ <packing>
+ <property name="Position">0</property>
+ <property name="AutoSize">True</property>
+ <property name="Expand">False</property>
+ <property name="Fill">False</property>
+ </packing>
+ </child>
+ <child>
+ <placeholder />
+ </child>
+ </widget>
+ </child>
+ </widget>
+ <widget class="Gtk.Dialog" id="GFreeRDP.ConnectionDialog" design-size="516 135">
+ <property name="MemberName" />
+ <property name="Title" translatable="yes">Connection</property>
+ <property name="WindowPosition">CenterOnParent</property>
+ <property name="Buttons">2</property>
+ <property name="HelpButton">False</property>
+ <child internal-child="VBox">
+ <widget class="Gtk.VBox" id="connectionDialog_VBox">
+ <property name="MemberName" />
+ <property name="BorderWidth">2</property>
+ <child>
+ <widget class="Gtk.HBox" id="hboxHostname">
+ <property name="MemberName" />
+ <property name="Spacing">6</property>
+ <child>
+ <widget class="Gtk.Label" id="labelHostname">
+ <property name="MemberName" />
+ <property name="LabelProp" translatable="yes">Hostname:</property>
+ </widget>
+ <packing>
+ <property name="Position">0</property>
+ <property name="AutoSize">True</property>
+ <property name="Expand">False</property>
+ <property name="Fill">False</property>
+ </packing>
+ </child>
+ <child>
+ <widget class="Gtk.Entry" id="entryHostname">
+ <property name="MemberName" />
+ <property name="CanFocus">True</property>
+ <property name="IsEditable">True</property>
+ <property name="InvisibleChar">•</property>
+ </widget>
+ <packing>
+ <property name="Position">1</property>
+ <property name="AutoSize">True</property>
+ </packing>
+ </child>
+ </widget>
+ <packing>
+ <property name="Position">0</property>
+ <property name="AutoSize">True</property>
+ <property name="Expand">False</property>
+ <property name="Fill">False</property>
+ </packing>
+ </child>
+ <child>
+ <widget class="Gtk.HBox" id="hboxCredentials">
+ <property name="MemberName" />
+ <property name="Spacing">6</property>
+ <child>
+ <widget class="Gtk.Label" id="labelUsername">
+ <property name="MemberName" />
+ <property name="LabelProp" translatable="yes">Username:</property>
+ </widget>
+ <packing>
+ <property name="Position">0</property>
+ <property name="AutoSize">True</property>
+ <property name="Expand">False</property>
+ <property name="Fill">False</property>
+ </packing>
+ </child>
+ <child>
+ <widget class="Gtk.Entry" id="entryUsername">
+ <property name="MemberName" />
+ <property name="CanFocus">True</property>
+ <property name="IsEditable">True</property>
+ <property name="InvisibleChar">•</property>
+ </widget>
+ <packing>
+ <property name="Position">1</property>
+ <property name="AutoSize">True</property>
+ </packing>
+ </child>
+ <child>
+ <widget class="Gtk.Label" id="labelPassword">
+ <property name="MemberName" />
+ <property name="LabelProp" translatable="yes">Password:</property>
+ </widget>
+ <packing>
+ <property name="Position">2</property>
+ <property name="AutoSize">True</property>
+ <property name="Expand">False</property>
+ <property name="Fill">False</property>
+ </packing>
+ </child>
+ <child>
+ <widget class="Gtk.Entry" id="entryPassword">
+ <property name="MemberName" />
+ <property name="CanFocus">True</property>
+ <property name="IsEditable">True</property>
+ <property name="InvisibleChar">•</property>
+ </widget>
+ <packing>
+ <property name="Position">3</property>
+ <property name="AutoSize">True</property>
+ </packing>
+ </child>
+ </widget>
+ <packing>
+ <property name="Position">1</property>
+ <property name="AutoSize">True</property>
+ <property name="Expand">False</property>
+ <property name="Fill">False</property>
+ </packing>
+ </child>
+ </widget>
+ </child>
+ <child internal-child="ActionArea">
+ <widget class="Gtk.HButtonBox" id="connectionDialog_ActionArea">
+ <property name="MemberName" />
+ <property name="Spacing">10</property>
+ <property name="BorderWidth">5</property>
+ <property name="Size">2</property>
+ <property name="LayoutStyle">End</property>
+ <child>
+ <widget class="Gtk.Button" id="buttonCancel">
+ <property name="MemberName" />
+ <property name="CanDefault">True</property>
+ <property name="CanFocus">True</property>
+ <property name="UseStock">True</property>
+ <property name="Type">StockItem</property>
+ <property name="StockId">gtk-cancel</property>
+ <property name="ResponseId">-6</property>
+ <signal name="Clicked" handler="OnButtonCancelClicked" />
+ <property name="label">gtk-cancel</property>
+ </widget>
+ <packing>
+ <property name="Expand">False</property>
+ <property name="Fill">False</property>
+ </packing>
+ </child>
+ <child>
+ <widget class="Gtk.Button" id="buttonConnect">
+ <property name="MemberName" />
+ <property name="CanDefault">True</property>
+ <property name="CanFocus">True</property>
+ <property name="Type">TextOnly</property>
+ <property name="Label" translatable="yes">Connect</property>
+ <property name="UseUnderline">True</property>
+ <property name="ResponseId">-5</property>
+ <signal name="Clicked" handler="OnButtonConnectClicked" />
+ </widget>
+ <packing>
+ <property name="Position">1</property>
+ <property name="Expand">False</property>
+ <property name="Fill">False</property>
+ </packing>
+ </child>
+ </widget>
+ </child>
+ </widget>
+</stetic-interface> \ No newline at end of file
diff --git a/NFreeRDP/MainWindow.resources b/NFreeRDP/MainWindow.resources
new file mode 100644
index 0000000..6c05a97
--- /dev/null
+++ b/NFreeRDP/MainWindow.resources
Binary files differ
diff --git a/NFreeRDP/NFreeRDP.csproj b/NFreeRDP/NFreeRDP.csproj
index a2697a6..dd7eac6 100644
--- a/NFreeRDP/NFreeRDP.csproj
+++ b/NFreeRDP/NFreeRDP.csproj
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
@@ -11,7 +11,6 @@
<RootNamespace>NFreeRDP</RootNamespace>
<AssemblyName>NFreeRDP</AssemblyName>
<TargetFrameworkVersion>v4.0</TargetFrameworkVersion>
- <TargetFrameworkProfile>Client</TargetFrameworkProfile>
<FileAlignment>512</FileAlignment>
<PublishUrl>publish\</PublishUrl>
<Install>true</Install>
diff --git a/NFreeRDP/Properties/Resources.resources b/NFreeRDP/Properties/Resources.resources
new file mode 100644
index 0000000..6c05a97
--- /dev/null
+++ b/NFreeRDP/Properties/Resources.resources
Binary files differ