mirror of
				https://github.com/chylex/TweetDuck.git
				synced 2025-10-31 18:17:15 +01:00 
			
		
		
		
	Compare commits
	
		
			8 Commits
		
	
	
		
			1.24
			...
			1c1aa5ea44
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| 1c1aa5ea44 | |||
| da54af221c | |||
| 6c8d518e0d | |||
| 697f4f1569 | |||
| 15d4ec3228 | |||
| c303346bc3 | |||
| b9af966849 | |||
| 0a7459b72e | 
							
								
								
									
										1
									
								
								.gitignore
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										1
									
								
								.gitignore
									
									
									
									
										vendored
									
									
								
							| @@ -12,6 +12,7 @@ bld/* | |||||||
| # Rider | # Rider | ||||||
| **/.idea/dictionaries | **/.idea/dictionaries | ||||||
| **/.idea/misc.xml | **/.idea/misc.xml | ||||||
|  | **/.idea/riderMarkupCache.xml | ||||||
|  |  | ||||||
| # User-specific files | # User-specific files | ||||||
| *.suo | *.suo | ||||||
|   | |||||||
| @@ -12,7 +12,7 @@ | |||||||
|     <option name="PROJECT_ARGUMENTS_TRACKING" value="1" /> |     <option name="PROJECT_ARGUMENTS_TRACKING" value="1" /> | ||||||
|     <option name="PROJECT_WORKING_DIRECTORY_TRACKING" value="1" /> |     <option name="PROJECT_WORKING_DIRECTORY_TRACKING" value="1" /> | ||||||
|     <option name="PROJECT_KIND" value="DotNetCore" /> |     <option name="PROJECT_KIND" value="DotNetCore" /> | ||||||
|     <option name="PROJECT_TFM" value="net6.0-windows7.0" /> |     <option name="PROJECT_TFM" value="net7.0-windows" /> | ||||||
|     <method v="2"> |     <method v="2"> | ||||||
|       <option name="Build" /> |       <option name="Build" /> | ||||||
|     </method> |     </method> | ||||||
|   | |||||||
| @@ -6,6 +6,6 @@ using TweetDuck; | |||||||
| 
 | 
 | ||||||
| namespace TweetDuck { | namespace TweetDuck { | ||||||
| 	internal static class Version { | 	internal static class Version { | ||||||
| 		public const string Tag = "1.24"; | 		public const string Tag = "1.25"; | ||||||
| 	} | 	} | ||||||
| } | } | ||||||
|   | |||||||
| @@ -1,18 +1,21 @@ | |||||||
| ; Script generated by the Inno Script Studio Wizard. | ; Script generated by the Inno Script Studio Wizard. | ||||||
| ; SEE THE DOCUMENTATION FOR DETAILS ON CREATING INNO SETUP SCRIPT FILES! | ; SEE THE DOCUMENTATION FOR DETAILS ON CREATING INNO SETUP SCRIPT FILES! | ||||||
|  |  | ||||||
|  | #define MyAppID "8C25A716-7E11-4AAD-9992-8B5D0C78AE06" | ||||||
|  |  | ||||||
| #define MyAppName "TweetDuck" | #define MyAppName "TweetDuck" | ||||||
| #define MyAppPublisher "chylex" | #define MyAppPublisher "chylex" | ||||||
| #define MyAppURL "https://tweetduck.chylex.com" | #define MyAppURL "https://tweetduck.chylex.com" | ||||||
| #define MyAppShortURL "https://td.chylex.com" | #define MyAppShortURL "https://td.chylex.com" | ||||||
| #define MyAppExeName "TweetDuck.exe" | #define MyAppExeName "TweetDuck.exe" | ||||||
|  |  | ||||||
| #define MyAppVersion GetFileVersion("..\windows\TweetDuck\bin\x86\Release\TweetDuck.exe") | #define MyAppArchitecture "x86" | ||||||
|  | #define MyAppVersion GetFileVersion("..\windows\TweetDuck\bin\" + MyAppArchitecture + "\Release\TweetDuck.exe") | ||||||
|  |  | ||||||
| #include ReadReg(HKLM, "Software\Mitrich Software\Inno Download Plugin", "InstallDir") + "\idp.iss" | #include ReadReg(HKLM, "Software\Mitrich Software\Inno Download Plugin", "InstallDir") + "\idp.iss" | ||||||
|  |  | ||||||
| [Setup] | [Setup] | ||||||
| AppId={{8C25A716-7E11-4AAD-9992-8B5D0C78AE06} | AppId={{{#MyAppID}} | ||||||
| AppName={#MyAppName} | AppName={#MyAppName} | ||||||
| AppVersion={#MyAppVersion} | AppVersion={#MyAppVersion} | ||||||
| AppVerName={#MyAppName} {#MyAppVersion} | AppVerName={#MyAppName} {#MyAppVersion} | ||||||
| @@ -43,8 +46,8 @@ Name: "english"; MessagesFile: "compiler:Default.isl" | |||||||
| Name: "desktopicon"; Description: "{cm:CreateDesktopIcon}"; GroupDescription: "{cm:AdditionalTasks}"; Flags: unchecked | Name: "desktopicon"; Description: "{cm:CreateDesktopIcon}"; GroupDescription: "{cm:AdditionalTasks}"; Flags: unchecked | ||||||
|  |  | ||||||
| [Files] | [Files] | ||||||
| Source: "..\windows\TweetDuck\bin\x86\Release\{#MyAppExeName}"; DestDir: "{app}"; Flags: ignoreversion | Source: "..\windows\TweetDuck\bin\{#MyAppArchitecture}\Release\{#MyAppExeName}"; DestDir: "{app}"; Flags: ignoreversion | ||||||
| Source: "..\windows\TweetDuck\bin\x86\Release\*"; DestDir: "{app}"; Flags: ignoreversion recursesubdirs createallsubdirs | Source: "..\windows\TweetDuck\bin\{#MyAppArchitecture}\Release\*"; DestDir: "{app}"; Flags: ignoreversion recursesubdirs createallsubdirs | ||||||
|  |  | ||||||
| [Icons] | [Icons] | ||||||
| Name: "{group}\{#MyAppName}"; Filename: "{app}\{#MyAppExeName}"; Check: TDIsUninstallable | Name: "{group}\{#MyAppName}"; Filename: "{app}\{#MyAppExeName}"; Check: TDIsUninstallable | ||||||
|   | |||||||
| @@ -1,18 +1,21 @@ | |||||||
| ; Script generated by the Inno Script Studio Wizard. | ; Script generated by the Inno Script Studio Wizard. | ||||||
| ; SEE THE DOCUMENTATION FOR DETAILS ON CREATING INNO SETUP SCRIPT FILES! | ; SEE THE DOCUMENTATION FOR DETAILS ON CREATING INNO SETUP SCRIPT FILES! | ||||||
|  |  | ||||||
|  | #define MyAppID "8C25A716-7E11-4AAD-9992-8B5D0C78AE06" | ||||||
|  |  | ||||||
| #define MyAppName "TweetDuck" | #define MyAppName "TweetDuck" | ||||||
| #define MyAppPublisher "chylex" | #define MyAppPublisher "chylex" | ||||||
| #define MyAppURL "https://tweetduck.chylex.com" | #define MyAppURL "https://tweetduck.chylex.com" | ||||||
| #define MyAppShortURL "https://td.chylex.com" | #define MyAppShortURL "https://td.chylex.com" | ||||||
| #define MyAppExeName "TweetDuck.exe" | #define MyAppExeName "TweetDuck.exe" | ||||||
|  |  | ||||||
| #define MyAppVersion GetFileVersion("..\windows\TweetDuck\bin\x86\Release\TweetDuck.exe") | #define MyAppArchitecture "x86" | ||||||
|  | #define MyAppVersion GetFileVersion("..\windows\TweetDuck\bin\" + MyAppArchitecture + "\Release\TweetDuck.exe") | ||||||
|  |  | ||||||
| #include ReadReg(HKLM, "Software\Mitrich Software\Inno Download Plugin", "InstallDir") + "\idp.iss" | #include ReadReg(HKLM, "Software\Mitrich Software\Inno Download Plugin", "InstallDir") + "\idp.iss" | ||||||
|  |  | ||||||
| [Setup] | [Setup] | ||||||
| AppId={{8C25A716-7E11-4AAD-9992-8B5D0C78AE06} | AppId={{{#MyAppID}} | ||||||
| AppName={#MyAppName} Portable | AppName={#MyAppName} Portable | ||||||
| AppVersion={#MyAppVersion} | AppVersion={#MyAppVersion} | ||||||
| AppVerName={#MyAppName} {#MyAppVersion} | AppVerName={#MyAppName} {#MyAppVersion} | ||||||
| @@ -40,8 +43,8 @@ MinVersion=0,6.1 | |||||||
| Name: "english"; MessagesFile: "compiler:Default.isl" | Name: "english"; MessagesFile: "compiler:Default.isl" | ||||||
|  |  | ||||||
| [Files] | [Files] | ||||||
| Source: "..\windows\TweetDuck\bin\x86\Release\{#MyAppExeName}"; DestDir: "{app}"; Flags: ignoreversion | Source: "..\windows\TweetDuck\bin\{#MyAppArchitecture}\Release\{#MyAppExeName}"; DestDir: "{app}"; Flags: ignoreversion | ||||||
| Source: "..\windows\TweetDuck\bin\x86\Release\*"; DestDir: "{app}"; Flags: ignoreversion recursesubdirs createallsubdirs | Source: "..\windows\TweetDuck\bin\{#MyAppArchitecture}\Release\*"; DestDir: "{app}"; Flags: ignoreversion recursesubdirs createallsubdirs | ||||||
|  |  | ||||||
| [Run] | [Run] | ||||||
| Filename: "{app}\{#MyAppExeName}"; Description: "{cm:LaunchProgram,{#StringChange(MyAppName, '&', '&&')}}"; Flags: nowait postinstall shellexec skipifsilent | Filename: "{app}\{#MyAppExeName}"; Description: "{cm:LaunchProgram,{#StringChange(MyAppName, '&', '&&')}}"; Flags: nowait postinstall shellexec skipifsilent | ||||||
|   | |||||||
| @@ -1,15 +1,17 @@ | |||||||
| ; Script generated by the Inno Script Studio Wizard. | ; Script generated by the Inno Script Studio Wizard. | ||||||
| ; SEE THE DOCUMENTATION FOR DETAILS ON CREATING INNO SETUP SCRIPT FILES! | ; SEE THE DOCUMENTATION FOR DETAILS ON CREATING INNO SETUP SCRIPT FILES! | ||||||
|  |  | ||||||
|  | #define MyAppID "8C25A716-7E11-4AAD-9992-8B5D0C78AE06" | ||||||
|  |  | ||||||
| #define MyAppName "TweetDuck" | #define MyAppName "TweetDuck" | ||||||
| #define MyAppPublisher "chylex" | #define MyAppPublisher "chylex" | ||||||
| #define MyAppURL "https://tweetduck.chylex.com" | #define MyAppURL "https://tweetduck.chylex.com" | ||||||
| #define MyAppShortURL "https://td.chylex.com" | #define MyAppShortURL "https://td.chylex.com" | ||||||
| #define MyAppExeName "TweetDuck.exe" | #define MyAppExeName "TweetDuck.exe" | ||||||
|  |  | ||||||
| #define MyAppID "8C25A716-7E11-4AAD-9992-8B5D0C78AE06" | #define MyAppArchitecture "x86" | ||||||
| #define MyAppVersion GetFileVersion("..\windows\TweetDuck\bin\x86\Release\TweetDuck.exe") | #define MyAppVersion GetFileVersion("..\windows\TweetDuck\bin\" + MyAppArchitecture + "\Release\TweetDuck.exe") | ||||||
| #define CefVersion GetFileVersion("..\windows\TweetDuck\bin\x86\Release\libcef.dll") | #define CefVersion GetFileVersion("..\windows\TweetDuck\bin\" + MyAppArchitecture + "\Release\libcef.dll") | ||||||
|  |  | ||||||
| #include ReadReg(HKLM, "Software\Mitrich Software\Inno Download Plugin", "InstallDir") + "\idp.iss" | #include ReadReg(HKLM, "Software\Mitrich Software\Inno Download Plugin", "InstallDir") + "\idp.iss" | ||||||
|  |  | ||||||
| @@ -43,13 +45,13 @@ MinVersion=0,6.1 | |||||||
| Name: "english"; MessagesFile: "compiler:Default.isl" | Name: "english"; MessagesFile: "compiler:Default.isl" | ||||||
|  |  | ||||||
| [Files] | [Files] | ||||||
| Source: "..\windows\TweetDuck\bin\x86\Release\{#MyAppExeName}"; DestDir: "{app}"; Flags: ignoreversion | Source: "..\windows\TweetDuck\bin\{#MyAppArchitecture}\Release\{#MyAppExeName}"; DestDir: "{app}"; Flags: ignoreversion | ||||||
| Source: "..\windows\TweetDuck\bin\x86\Release\TweetDuck.*"; DestDir: "{app}"; Flags: ignoreversion | Source: "..\windows\TweetDuck\bin\{#MyAppArchitecture}\Release\TweetDuck.*"; DestDir: "{app}"; Flags: ignoreversion | ||||||
| Source: "..\windows\TweetDuck\bin\x86\Release\TweetImpl.*"; DestDir: "{app}"; Flags: ignoreversion | Source: "..\windows\TweetDuck\bin\{#MyAppArchitecture}\Release\TweetImpl.*"; DestDir: "{app}"; Flags: ignoreversion | ||||||
| Source: "..\windows\TweetDuck\bin\x86\Release\TweetLib.*"; DestDir: "{app}"; Flags: ignoreversion | Source: "..\windows\TweetDuck\bin\{#MyAppArchitecture}\Release\TweetLib.*"; DestDir: "{app}"; Flags: ignoreversion | ||||||
| Source: "..\windows\TweetDuck\bin\x86\Release\guide\*.*"; DestDir: "{app}\guide"; Flags: ignoreversion recursesubdirs createallsubdirs | Source: "..\windows\TweetDuck\bin\{#MyAppArchitecture}\Release\guide\*.*"; DestDir: "{app}\guide"; Flags: ignoreversion recursesubdirs createallsubdirs | ||||||
| Source: "..\windows\TweetDuck\bin\x86\Release\resources\*.*"; DestDir: "{app}\resources"; Flags: ignoreversion recursesubdirs createallsubdirs | Source: "..\windows\TweetDuck\bin\{#MyAppArchitecture}\Release\resources\*.*"; DestDir: "{app}\resources"; Flags: ignoreversion recursesubdirs createallsubdirs | ||||||
| Source: "..\windows\TweetDuck\bin\x86\Release\plugins\*.*"; DestDir: "{app}\plugins"; Flags: ignoreversion recursesubdirs createallsubdirs | Source: "..\windows\TweetDuck\bin\{#MyAppArchitecture}\Release\plugins\*.*"; DestDir: "{app}\plugins"; Flags: ignoreversion recursesubdirs createallsubdirs | ||||||
|  |  | ||||||
| [Icons] | [Icons] | ||||||
| Name: "{group}\{#MyAppName}"; Filename: "{app}\{#MyAppExeName}"; Check: TDIsUninstallable | Name: "{group}\{#MyAppName}"; Filename: "{app}\{#MyAppExeName}"; Check: TDIsUninstallable | ||||||
|   | |||||||
| @@ -1,6 +1,6 @@ | |||||||
| { | { | ||||||
|   "sdk": { |   "sdk": { | ||||||
|     "version": "6.0.0", |     "version": "7.0.0", | ||||||
|     "rollForward": "latestMinor", |     "rollForward": "latestMinor", | ||||||
|     "allowPrerelease": false |     "allowPrerelease": false | ||||||
|   } |   } | ||||||
|   | |||||||
| @@ -1,10 +1,10 @@ | |||||||
| <Project Sdk="Microsoft.NET.Sdk"> | <Project Sdk="Microsoft.NET.Sdk"> | ||||||
|    |    | ||||||
|   <PropertyGroup> |   <PropertyGroup> | ||||||
|     <TargetFramework>net6.0</TargetFramework> |     <TargetFramework>net7.0</TargetFramework> | ||||||
|     <Configurations>Debug;Release</Configurations> |     <Configurations>Debug;Release</Configurations> | ||||||
|     <Platforms>x86;x64</Platforms> |     <Platforms>x86;x64</Platforms> | ||||||
|     <LangVersion>10</LangVersion> |     <LangVersion>11</LangVersion> | ||||||
|     <Nullable>enable</Nullable> |     <Nullable>enable</Nullable> | ||||||
|     <GenerateAssemblyInfo>false</GenerateAssemblyInfo> |     <GenerateAssemblyInfo>false</GenerateAssemblyInfo> | ||||||
|   </PropertyGroup> |   </PropertyGroup> | ||||||
|   | |||||||
| @@ -1,10 +1,10 @@ | |||||||
| <Project Sdk="Microsoft.NET.Sdk"> | <Project Sdk="Microsoft.NET.Sdk"> | ||||||
|    |    | ||||||
|   <PropertyGroup> |   <PropertyGroup> | ||||||
|     <TargetFramework>net6.0</TargetFramework> |     <TargetFramework>net7.0</TargetFramework> | ||||||
|     <Configurations>Debug;Release</Configurations> |     <Configurations>Debug;Release</Configurations> | ||||||
|     <Platforms>x86;x64</Platforms> |     <Platforms>x86;x64</Platforms> | ||||||
|     <LangVersion>10</LangVersion> |     <LangVersion>11</LangVersion> | ||||||
|     <Nullable>enable</Nullable> |     <Nullable>enable</Nullable> | ||||||
|     <GenerateAssemblyInfo>false</GenerateAssemblyInfo> |     <GenerateAssemblyInfo>false</GenerateAssemblyInfo> | ||||||
|   </PropertyGroup> |   </PropertyGroup> | ||||||
|   | |||||||
| @@ -1,9 +1,9 @@ | |||||||
| <Project Sdk="Microsoft.NET.Sdk"> | <Project Sdk="Microsoft.NET.Sdk"> | ||||||
|  |  | ||||||
|   <PropertyGroup> |   <PropertyGroup> | ||||||
|     <TargetFramework>net6.0</TargetFramework> |     <TargetFramework>net7.0</TargetFramework> | ||||||
|     <Platforms>x86</Platforms> |     <Platforms>x86</Platforms> | ||||||
|     <LangVersion>10</LangVersion> |     <LangVersion>11</LangVersion> | ||||||
|     <Nullable>enable</Nullable> |     <Nullable>enable</Nullable> | ||||||
|     <GenerateAssemblyInfo>false</GenerateAssemblyInfo> |     <GenerateAssemblyInfo>false</GenerateAssemblyInfo> | ||||||
|   </PropertyGroup> |   </PropertyGroup> | ||||||
|   | |||||||
| @@ -1,10 +1,10 @@ | |||||||
| <Project Sdk="Microsoft.NET.Sdk"> | <Project Sdk="Microsoft.NET.Sdk"> | ||||||
|  |  | ||||||
|   <PropertyGroup> |   <PropertyGroup> | ||||||
|     <TargetFramework>net6.0</TargetFramework> |     <TargetFramework>net7.0</TargetFramework> | ||||||
|     <Configurations>Debug;Release</Configurations> |     <Configurations>Debug;Release</Configurations> | ||||||
|     <Platforms>x86;x64</Platforms> |     <Platforms>x86;x64</Platforms> | ||||||
|     <LangVersion>10</LangVersion> |     <LangVersion>11</LangVersion> | ||||||
|     <Nullable>enable</Nullable> |     <Nullable>enable</Nullable> | ||||||
|     <GenerateAssemblyInfo>false</GenerateAssemblyInfo> |     <GenerateAssemblyInfo>false</GenerateAssemblyInfo> | ||||||
|   </PropertyGroup> |   </PropertyGroup> | ||||||
|   | |||||||
| @@ -1,10 +1,10 @@ | |||||||
| <Project Sdk="Microsoft.NET.Sdk"> | <Project Sdk="Microsoft.NET.Sdk"> | ||||||
|    |    | ||||||
|   <PropertyGroup> |   <PropertyGroup> | ||||||
|     <TargetFramework>net6.0</TargetFramework> |     <TargetFramework>net7.0</TargetFramework> | ||||||
|     <Configurations>Debug;Release</Configurations> |     <Configurations>Debug;Release</Configurations> | ||||||
|     <Platforms>x86;x64</Platforms> |     <Platforms>x86;x64</Platforms> | ||||||
|     <LangVersion>10</LangVersion> |     <LangVersion>11</LangVersion> | ||||||
|     <Nullable>enable</Nullable> |     <Nullable>enable</Nullable> | ||||||
|     <GenerateAssemblyInfo>false</GenerateAssemblyInfo> |     <GenerateAssemblyInfo>false</GenerateAssemblyInfo> | ||||||
|   </PropertyGroup> |   </PropertyGroup> | ||||||
|   | |||||||
| @@ -1,7 +1,7 @@ | |||||||
| <Project Sdk="Microsoft.NET.Sdk"> | <Project Sdk="Microsoft.NET.Sdk"> | ||||||
|    |    | ||||||
|   <PropertyGroup> |   <PropertyGroup> | ||||||
|     <TargetFramework>net6.0</TargetFramework> |     <TargetFramework>net7.0</TargetFramework> | ||||||
|     <Platforms>x86</Platforms> |     <Platforms>x86</Platforms> | ||||||
|     <RuntimeIdentifiers>win7-x86;linux-x64</RuntimeIdentifiers> |     <RuntimeIdentifiers>win7-x86;linux-x64</RuntimeIdentifiers> | ||||||
|   </PropertyGroup> |   </PropertyGroup> | ||||||
|   | |||||||
| @@ -7,7 +7,7 @@ open Xunit | |||||||
| module RegexAccount = | module RegexAccount = | ||||||
|  |  | ||||||
|     module IsMatch = |     module IsMatch = | ||||||
|         let isMatch = TwitterUrls.RegexAccount.IsMatch |         let isMatch: string -> bool = TwitterUrls.RegexAccount.IsMatch | ||||||
|  |  | ||||||
|         [<Fact>] |         [<Fact>] | ||||||
|         let ``accepts HTTP protocol`` () = |         let ``accepts HTTP protocol`` () = | ||||||
|   | |||||||
| @@ -1,7 +1,7 @@ | |||||||
| <Project Sdk="Microsoft.NET.Sdk"> | <Project Sdk="Microsoft.NET.Sdk"> | ||||||
|    |    | ||||||
|   <PropertyGroup> |   <PropertyGroup> | ||||||
|     <TargetFramework>net6.0</TargetFramework> |     <TargetFramework>net7.0</TargetFramework> | ||||||
|     <Platforms>x86</Platforms> |     <Platforms>x86</Platforms> | ||||||
|     <RuntimeIdentifiers>win7-x86;linux-x64</RuntimeIdentifiers> |     <RuntimeIdentifiers>win7-x86;linux-x64</RuntimeIdentifiers> | ||||||
|   </PropertyGroup> |   </PropertyGroup> | ||||||
|   | |||||||
| @@ -1,7 +1,7 @@ | |||||||
| <Project Sdk="Microsoft.NET.Sdk"> | <Project Sdk="Microsoft.NET.Sdk"> | ||||||
|    |    | ||||||
|   <PropertyGroup> |   <PropertyGroup> | ||||||
|     <TargetFramework>net6.0</TargetFramework> |     <TargetFramework>net7.0</TargetFramework> | ||||||
|     <Platforms>x86</Platforms> |     <Platforms>x86</Platforms> | ||||||
|     <RuntimeIdentifiers>win7-x86;linux-x64</RuntimeIdentifiers> |     <RuntimeIdentifiers>win7-x86;linux-x64</RuntimeIdentifiers> | ||||||
|   </PropertyGroup> |   </PropertyGroup> | ||||||
|   | |||||||
| @@ -1,10 +1,10 @@ | |||||||
| <Project Sdk="Microsoft.NET.Sdk"> | <Project Sdk="Microsoft.NET.Sdk"> | ||||||
|    |    | ||||||
|   <PropertyGroup> |   <PropertyGroup> | ||||||
|     <TargetFramework>net6.0</TargetFramework> |     <TargetFramework>net7.0</TargetFramework> | ||||||
|     <Configurations>Debug;Release</Configurations> |     <Configurations>Debug;Release</Configurations> | ||||||
|     <Platforms>x64</Platforms> |     <Platforms>x64</Platforms> | ||||||
|     <LangVersion>10</LangVersion> |     <LangVersion>11</LangVersion> | ||||||
|     <OutputType>WinExe</OutputType> |     <OutputType>WinExe</OutputType> | ||||||
|     <Nullable>enable</Nullable> |     <Nullable>enable</Nullable> | ||||||
|     <CheckForOverflowUnderflow>true</CheckForOverflowUnderflow> |     <CheckForOverflowUnderflow>true</CheckForOverflowUnderflow> | ||||||
|   | |||||||
| @@ -1,10 +1,10 @@ | |||||||
| <Project Sdk="Microsoft.NET.Sdk"> | <Project Sdk="Microsoft.NET.Sdk"> | ||||||
|    |    | ||||||
|   <PropertyGroup> |   <PropertyGroup> | ||||||
|     <TargetFramework>net6.0</TargetFramework> |     <TargetFramework>net7.0</TargetFramework> | ||||||
|     <Configurations>Debug;Release</Configurations> |     <Configurations>Debug;Release</Configurations> | ||||||
|     <Platforms>x64</Platforms> |     <Platforms>x64</Platforms> | ||||||
|     <LangVersion>10</LangVersion> |     <LangVersion>11</LangVersion> | ||||||
|     <Nullable>enable</Nullable> |     <Nullable>enable</Nullable> | ||||||
|     <GenerateAssemblyInfo>false</GenerateAssemblyInfo> |     <GenerateAssemblyInfo>false</GenerateAssemblyInfo> | ||||||
|   </PropertyGroup> |   </PropertyGroup> | ||||||
|   | |||||||
| @@ -1,6 +1,6 @@ | |||||||
| { | { | ||||||
|   "sdk": { |   "sdk": { | ||||||
|     "version": "6.0.0", |     "version": "7.0.0", | ||||||
|     "rollForward": "latestMinor", |     "rollForward": "latestMinor", | ||||||
|     "allowPrerelease": false |     "allowPrerelease": false | ||||||
|   } |   } | ||||||
|   | |||||||
| @@ -1,17 +1,16 @@ | |||||||
| <Project Sdk="Microsoft.NET.Sdk"> | <Project Sdk="Microsoft.NET.Sdk"> | ||||||
|    |    | ||||||
|   <PropertyGroup> |   <PropertyGroup> | ||||||
|     <TargetFramework>net6.0-windows</TargetFramework> |     <TargetFramework>net7.0-windows</TargetFramework> | ||||||
|     <Configurations>Debug;Release</Configurations> |     <Configurations>Debug;Release</Configurations> | ||||||
|     <Platforms>x86</Platforms> |     <Platforms>x86</Platforms> | ||||||
|     <RuntimeIdentifier>win7-x86</RuntimeIdentifier> |     <RuntimeIdentifier>win7-x86</RuntimeIdentifier> | ||||||
|     <LangVersion>10</LangVersion> |     <LangVersion>11</LangVersion> | ||||||
|     <Nullable>enable</Nullable> |     <Nullable>enable</Nullable> | ||||||
|   </PropertyGroup> |   </PropertyGroup> | ||||||
|    |    | ||||||
|   <PropertyGroup> |   <PropertyGroup> | ||||||
|     <OutputType>WinExe</OutputType> |     <OutputType>WinExe</OutputType> | ||||||
|     <UseWindowsForms>true</UseWindowsForms> |  | ||||||
|     <RootNamespace>TweetDuck.Browser</RootNamespace> |     <RootNamespace>TweetDuck.Browser</RootNamespace> | ||||||
|     <AssemblyName>TweetDuck.Browser</AssemblyName> |     <AssemblyName>TweetDuck.Browser</AssemblyName> | ||||||
|     <ApplicationIcon>..\TweetDuck\Resources\Images\icon.ico</ApplicationIcon> |     <ApplicationIcon>..\TweetDuck\Resources\Images\icon.ico</ApplicationIcon> | ||||||
| @@ -33,14 +32,14 @@ | |||||||
|   </PropertyGroup> |   </PropertyGroup> | ||||||
|    |    | ||||||
|   <ItemGroup> |   <ItemGroup> | ||||||
|     <PackageReference Include="CefSharp.WinForms.NETCore" Version="105.3.330" /> |     <PackageReference Include="CefSharp.Common.NETCore" Version="107.1.90" /> | ||||||
|   </ItemGroup> |   </ItemGroup> | ||||||
|    |    | ||||||
|   <ItemGroup> |   <ItemGroup> | ||||||
|     <Compile Include="..\..\Version.cs" Link="Version.cs" /> |     <Compile Include="..\..\Version.cs" Link="Version.cs" /> | ||||||
|   </ItemGroup> |   </ItemGroup> | ||||||
|    |    | ||||||
|   <Target Name="CopyResources" AfterTargets="Build"> |   <Target Name="MakeBrowserProcessLargeAddressAware" AfterTargets="Build"> | ||||||
|     <Exec Command="call "$(DevEnvDir)\..\..\VC\Auxiliary\Build\vcvars32.bat" & editbin /largeaddressaware /TSAWARE "$(TargetDir)TweetDuck.Browser.exe"" ContinueOnError="false" /> |     <Exec Command="call "$(DevEnvDir)\..\..\VC\Auxiliary\Build\vcvars32.bat" & editbin /largeaddressaware /TSAWARE "$(TargetDir)TweetDuck.Browser.exe"" ContinueOnError="false" /> | ||||||
|   </Target> |   </Target> | ||||||
|    |    | ||||||
|   | |||||||
| @@ -23,7 +23,7 @@ namespace TweetDuck.Video.Controls { | |||||||
| 
 | 
 | ||||||
| 				string? text = tooltipFunc(args); | 				string? text = tooltipFunc(args); | ||||||
| 
 | 
 | ||||||
| 				if (text == null) { | 				if (text == null || control.Parent == null) { | ||||||
| 					Visible = false; | 					Visible = false; | ||||||
| 					return; | 					return; | ||||||
| 				} | 				} | ||||||
|   | |||||||
| @@ -28,7 +28,7 @@ namespace TweetDuck.Video.Controls { | |||||||
| 				brushFore.Color = ForeColor; | 				brushFore.Color = ForeColor; | ||||||
| 				brushHover.Color = Color.FromArgb(128, ForeColor); | 				brushHover.Color = Color.FromArgb(128, ForeColor); | ||||||
| 				brushOverlap.Color = Color.FromArgb(80 + ForeColor.R * 11 / 16, 80 + ForeColor.G * 11 / 16, 80 + ForeColor.B * 11 / 16); | 				brushOverlap.Color = Color.FromArgb(80 + ForeColor.R * 11 / 16, 80 + ForeColor.G * 11 / 16, 80 + ForeColor.B * 11 / 16); | ||||||
| 				brushBack.Color = Parent.BackColor; | 				brushBack.Color = Parent?.BackColor ?? Color.Black; | ||||||
| 			} | 			} | ||||||
| 
 | 
 | ||||||
| 			Rectangle rect = new Rectangle(0, 0, Width, Height); | 			Rectangle rect = new Rectangle(0, 0, Width, Height); | ||||||
|   | |||||||
| @@ -1,11 +1,11 @@ | |||||||
| <Project Sdk="Microsoft.NET.Sdk"> | <Project Sdk="Microsoft.NET.Sdk"> | ||||||
|    |    | ||||||
|   <PropertyGroup> |   <PropertyGroup> | ||||||
|     <TargetFramework>net6.0-windows</TargetFramework> |     <TargetFramework>net7.0-windows</TargetFramework> | ||||||
|     <Configurations>Debug;Release</Configurations> |     <Configurations>Debug;Release</Configurations> | ||||||
|     <Platforms>x86</Platforms> |     <Platforms>x86</Platforms> | ||||||
|     <RuntimeIdentifier>win7-x86</RuntimeIdentifier> |     <RuntimeIdentifier>win7-x86</RuntimeIdentifier> | ||||||
|     <LangVersion>10</LangVersion> |     <LangVersion>11</LangVersion> | ||||||
|     <Nullable>enable</Nullable> |     <Nullable>enable</Nullable> | ||||||
|   </PropertyGroup> |   </PropertyGroup> | ||||||
|    |    | ||||||
|   | |||||||
| @@ -2,6 +2,7 @@ | |||||||
| using System.Collections.Generic; | using System.Collections.Generic; | ||||||
| using System.Drawing; | using System.Drawing; | ||||||
| using System.Windows.Forms; | using System.Windows.Forms; | ||||||
|  | using TweetDuck.Controls; | ||||||
| using TweetDuck.Management; | using TweetDuck.Management; | ||||||
| using TweetDuck.Utils; | using TweetDuck.Utils; | ||||||
| using TweetLib.Browser.Interfaces; | using TweetLib.Browser.Interfaces; | ||||||
| @@ -53,12 +54,12 @@ namespace TweetDuck.Browser.Notification { | |||||||
| 			} | 			} | ||||||
| 		} | 		} | ||||||
| 
 | 
 | ||||||
| 		private void WindowsSessionManager_LockStateChanged(object? sender, EventArgs e) { | 		private void WindowsSessionManager_LockStateChanged(object? sender, bool isLocked) { | ||||||
| 			if (WindowsSessionManager.IsLocked) { | 			if (isLocked) { | ||||||
| 				PauseNotification(NotificationPauseReason.WindowsSessionLocked); | 				this.InvokeAsyncSafe(() => PauseNotification(NotificationPauseReason.WindowsSessionLocked)); | ||||||
| 			} | 			} | ||||||
| 			else { | 			else { | ||||||
| 				ResumeNotification(NotificationPauseReason.WindowsSessionLocked); | 				this.InvokeAsyncSafe(() => ResumeNotification(NotificationPauseReason.WindowsSessionLocked)); | ||||||
| 			} | 			} | ||||||
| 		} | 		} | ||||||
| 
 | 
 | ||||||
|   | |||||||
| @@ -95,8 +95,8 @@ namespace TweetDuck.Controls { | |||||||
| 				form.WindowState = state.IsMaximized ? FormWindowState.Maximized : FormWindowState.Normal; | 				form.WindowState = state.IsMaximized ? FormWindowState.Maximized : FormWindowState.Normal; | ||||||
| 			} | 			} | ||||||
| 
 | 
 | ||||||
| 			if ((state.Bounds == Rectangle.Empty && firstTimeFullscreen) || form.IsFullyOutsideView()) { | 			if (((state.Bounds == Rectangle.Empty && firstTimeFullscreen) || form.IsFullyOutsideView()) && Screen.PrimaryScreen is {} primaryScreen) { | ||||||
| 				form.DesktopBounds = Screen.PrimaryScreen.WorkingArea; | 				form.DesktopBounds = primaryScreen.WorkingArea; | ||||||
| 				form.WindowState = FormWindowState.Maximized; | 				form.WindowState = FormWindowState.Maximized; | ||||||
| 				state.Save(form); | 				state.Save(form); | ||||||
| 			} | 			} | ||||||
|   | |||||||
| @@ -28,7 +28,7 @@ namespace TweetDuck.Dialogs { | |||||||
| 		} | 		} | ||||||
| 
 | 
 | ||||||
| 		private void OnLinkClicked(object? sender, LinkLabelLinkClickedEventArgs e) { | 		private void OnLinkClicked(object? sender, LinkLabelLinkClickedEventArgs e) { | ||||||
| 			App.SystemHandler.OpenBrowser(e.Link.LinkData as string); | 			App.SystemHandler.OpenBrowser(e.Link?.LinkData as string); | ||||||
| 		} | 		} | ||||||
| 
 | 
 | ||||||
| 		private void FormAbout_HelpRequested(object? sender, HelpEventArgs hlpevent) { | 		private void FormAbout_HelpRequested(object? sender, HelpEventArgs hlpevent) { | ||||||
|   | |||||||
| @@ -4,8 +4,7 @@ using Win = System.Windows.Forms; | |||||||
| 
 | 
 | ||||||
| namespace TweetDuck.Management { | namespace TweetDuck.Management { | ||||||
| 	static class WindowsSessionManager { | 	static class WindowsSessionManager { | ||||||
| 		public static bool IsLocked { get; private set; } = false; | 		public static event EventHandler<bool>? LockStateChanged; | ||||||
| 		public static event EventHandler? LockStateChanged; |  | ||||||
| 
 | 
 | ||||||
| 		public static void Register() { | 		public static void Register() { | ||||||
| 			Win.Application.ApplicationExit += OnApplicationExit; | 			Win.Application.ApplicationExit += OnApplicationExit; | ||||||
| @@ -27,8 +26,7 @@ namespace TweetDuck.Management { | |||||||
| 		} | 		} | ||||||
| 
 | 
 | ||||||
| 		private static void SetLocked(bool newState) { | 		private static void SetLocked(bool newState) { | ||||||
| 			IsLocked = newState; | 			LockStateChanged?.Invoke(null, newState); | ||||||
| 			LockStateChanged?.Invoke(null, EventArgs.Empty); |  | ||||||
| 		} | 		} | ||||||
| 	} | 	} | ||||||
| } | } | ||||||
|   | |||||||
| @@ -45,6 +45,7 @@ namespace TweetDuck { | |||||||
| 		internal static void SetupWinForms() { | 		internal static void SetupWinForms() { | ||||||
| 			Win.Application.EnableVisualStyles(); | 			Win.Application.EnableVisualStyles(); | ||||||
| 			Win.Application.SetCompatibleTextRenderingDefault(false); | 			Win.Application.SetCompatibleTextRenderingDefault(false); | ||||||
|  | 			Win.LegacyWinForms.EnsureValid(); | ||||||
| 		} | 		} | ||||||
| 
 | 
 | ||||||
| 		[STAThread] | 		[STAThread] | ||||||
|   | |||||||
| @@ -1,11 +1,11 @@ | |||||||
| <Project Sdk="Microsoft.NET.Sdk"> | <Project Sdk="Microsoft.NET.Sdk"> | ||||||
|    |    | ||||||
|   <PropertyGroup> |   <PropertyGroup> | ||||||
|     <TargetFramework>net6.0-windows</TargetFramework> |     <TargetFramework>net7.0-windows</TargetFramework> | ||||||
|     <Configurations>Debug;Release</Configurations> |     <Configurations>Debug;Release</Configurations> | ||||||
|     <Platforms>x86</Platforms> |     <Platforms>x86</Platforms> | ||||||
|     <RuntimeIdentifier>win7-x86</RuntimeIdentifier> |     <RuntimeIdentifier>win7-x86</RuntimeIdentifier> | ||||||
|     <LangVersion>10</LangVersion> |     <LangVersion>11</LangVersion> | ||||||
|     <Nullable>enable</Nullable> |     <Nullable>enable</Nullable> | ||||||
|   </PropertyGroup> |   </PropertyGroup> | ||||||
|    |    | ||||||
| @@ -36,7 +36,7 @@ | |||||||
|   </PropertyGroup> |   </PropertyGroup> | ||||||
|    |    | ||||||
|   <ItemGroup> |   <ItemGroup> | ||||||
|     <PackageReference Include="CefSharp.WinForms.NETCore" Version="105.3.330" /> |     <PackageReference Include="CefSharp.WinForms.NETCore" Version="107.1.90" /> | ||||||
|   </ItemGroup> |   </ItemGroup> | ||||||
|    |    | ||||||
|   <ItemGroup> |   <ItemGroup> | ||||||
| @@ -84,6 +84,10 @@ | |||||||
|     <PreBuildEvent>powershell -NoProfile -Command "$ErrorActionPreference = 'SilentlyContinue'; (Get-Process TweetDuck.Browser | Where-Object {$_.Path -eq '$(TargetDir)TweetDuck.Browser.exe'}).Kill(); Exit 0"</PreBuildEvent> |     <PreBuildEvent>powershell -NoProfile -Command "$ErrorActionPreference = 'SilentlyContinue'; (Get-Process TweetDuck.Browser | Where-Object {$_.Path -eq '$(TargetDir)TweetDuck.Browser.exe'}).Kill(); Exit 0"</PreBuildEvent> | ||||||
|   </PropertyGroup> |   </PropertyGroup> | ||||||
|    |    | ||||||
|  |   <Target Name="MakeBrowserProcessLargeAddressAware" AfterTargets="Build"> | ||||||
|  |     <Exec Command="call "$(DevEnvDir)\..\..\VC\Auxiliary\Build\vcvars32.bat" & editbin /largeaddressaware /TSAWARE "$(TargetDir)TweetDuck.Browser.exe"" ContinueOnError="false" /> | ||||||
|  |   </Target> | ||||||
|  |    | ||||||
|   <Target Name="CopyResources" AfterTargets="Build"> |   <Target Name="CopyResources" AfterTargets="Build"> | ||||||
|     <ItemGroup> |     <ItemGroup> | ||||||
|       <LocalesToDelete Include="$(TargetDir)locales\*.pak" Exclude="$(TargetDir)locales\en-US.pak" Visible="false" /> |       <LocalesToDelete Include="$(TargetDir)locales\*.pak" Exclude="$(TargetDir)locales\en-US.pak" Visible="false" /> | ||||||
|   | |||||||
| @@ -1,3 +1,4 @@ | |||||||
|  | using System.Diagnostics; | ||||||
| using CefSharp; | using CefSharp; | ||||||
| using CefSharp.Handler; | using CefSharp.Handler; | ||||||
| using TweetImpl.CefSharp.Adapters; | using TweetImpl.CefSharp.Adapters; | ||||||
| @@ -7,11 +8,11 @@ namespace TweetImpl.CefSharp.Handlers { | |||||||
| 	sealed class CefRequestHandler : RequestHandler { | 	sealed class CefRequestHandler : RequestHandler { | ||||||
| 		public RequestHandlerLogic<IRequest> Logic { get; } | 		public RequestHandlerLogic<IRequest> Logic { get; } | ||||||
| 
 | 
 | ||||||
| 		private readonly bool autoReload; | 		private readonly AutoReloader? autoReloader; | ||||||
| 
 | 
 | ||||||
| 		public CefRequestHandler(CefLifeSpanHandler lifeSpanHandler, bool autoReload) { | 		public CefRequestHandler(CefLifeSpanHandler lifeSpanHandler, bool autoReload) { | ||||||
| 			this.Logic = new RequestHandlerLogic<IRequest>(CefRequestAdapter.Instance, lifeSpanHandler.Logic); | 			this.Logic = new RequestHandlerLogic<IRequest>(CefRequestAdapter.Instance, lifeSpanHandler.Logic); | ||||||
| 			this.autoReload = autoReload; | 			this.autoReloader = autoReload ? new AutoReloader() : null; | ||||||
| 		} | 		} | ||||||
| 
 | 
 | ||||||
| 		protected override bool OnBeforeBrowse(IWebBrowser chromiumWebBrowser, IBrowser browser, IFrame frame, IRequest request, bool userGesture, bool isRedirect) { | 		protected override bool OnBeforeBrowse(IWebBrowser chromiumWebBrowser, IBrowser browser, IFrame frame, IRequest request, bool userGesture, bool isRedirect) { | ||||||
| @@ -23,9 +24,31 @@ namespace TweetImpl.CefSharp.Handlers { | |||||||
| 		} | 		} | ||||||
| 
 | 
 | ||||||
| 		protected override void OnRenderProcessTerminated(IWebBrowser browserControl, IBrowser browser, CefTerminationStatus status) { | 		protected override void OnRenderProcessTerminated(IWebBrowser browserControl, IBrowser browser, CefTerminationStatus status) { | ||||||
| 			if (autoReload) { | 			if (autoReloader?.RequestReload() == true) { | ||||||
| 				browser.Reload(); | 				browser.Reload(); | ||||||
| 			} | 			} | ||||||
| 		} | 		} | ||||||
|  | 
 | ||||||
|  | 		private sealed class AutoReloader { | ||||||
|  | 			private readonly Stopwatch lastReload = Stopwatch.StartNew(); | ||||||
|  | 			private int rapidReloadCount; | ||||||
|  | 			 | ||||||
|  | 			public bool RequestReload() { | ||||||
|  | 				if (rapidReloadCount >= 2) { | ||||||
|  | 					lastReload.Stop(); | ||||||
|  | 					return false; | ||||||
|  | 				} | ||||||
|  | 				 | ||||||
|  | 				if (lastReload.ElapsedMilliseconds < 5000) { | ||||||
|  | 					++rapidReloadCount; | ||||||
|  | 				} | ||||||
|  | 				else { | ||||||
|  | 					rapidReloadCount = 0; | ||||||
|  | 				} | ||||||
|  | 				 | ||||||
|  | 				lastReload.Restart(); | ||||||
|  | 				return true; | ||||||
|  | 			} | ||||||
|  | 		} | ||||||
| 	} | 	} | ||||||
| } | } | ||||||
|   | |||||||
| @@ -1,11 +1,11 @@ | |||||||
| <Project Sdk="Microsoft.NET.Sdk"> | <Project Sdk="Microsoft.NET.Sdk"> | ||||||
|    |    | ||||||
|   <PropertyGroup> |   <PropertyGroup> | ||||||
|     <TargetFramework>net6.0-windows</TargetFramework> |     <TargetFramework>net7.0-windows</TargetFramework> | ||||||
|     <Configurations>Debug;Release</Configurations> |     <Configurations>Debug;Release</Configurations> | ||||||
|     <Platforms>x86</Platforms> |     <Platforms>x86</Platforms> | ||||||
|     <RuntimeIdentifier>win7-x86</RuntimeIdentifier> |     <RuntimeIdentifier>win7-x86</RuntimeIdentifier> | ||||||
|     <LangVersion>10</LangVersion> |     <LangVersion>11</LangVersion> | ||||||
|     <Nullable>enable</Nullable> |     <Nullable>enable</Nullable> | ||||||
|   </PropertyGroup> |   </PropertyGroup> | ||||||
|    |    | ||||||
| @@ -28,7 +28,7 @@ | |||||||
|   </PropertyGroup> |   </PropertyGroup> | ||||||
|    |    | ||||||
|   <ItemGroup> |   <ItemGroup> | ||||||
|     <PackageReference Include="CefSharp.WinForms.NETCore" Version="105.3.330" /> |     <PackageReference Include="CefSharp.WinForms.NETCore" Version="107.1.90" /> | ||||||
|   </ItemGroup> |   </ItemGroup> | ||||||
|    |    | ||||||
|   <ItemGroup> |   <ItemGroup> | ||||||
|   | |||||||
| @@ -1,11 +1,11 @@ | |||||||
| <Project Sdk="Microsoft.NET.Sdk"> | <Project Sdk="Microsoft.NET.Sdk"> | ||||||
|    |    | ||||||
|   <PropertyGroup> |   <PropertyGroup> | ||||||
|     <TargetFramework>net6.0-windows</TargetFramework> |     <TargetFramework>net7.0-windows</TargetFramework> | ||||||
|     <Configurations>Debug;Release</Configurations> |     <Configurations>Debug;Release</Configurations> | ||||||
|     <Platforms>x86</Platforms> |     <Platforms>x86</Platforms> | ||||||
|     <RuntimeIdentifier>win7-x86</RuntimeIdentifier> |     <RuntimeIdentifier>win7-x86</RuntimeIdentifier> | ||||||
|     <LangVersion>10</LangVersion> |     <LangVersion>11</LangVersion> | ||||||
|     <Nullable>disable</Nullable> |     <Nullable>disable</Nullable> | ||||||
|     <GenerateAssemblyInfo>false</GenerateAssemblyInfo> |     <GenerateAssemblyInfo>false</GenerateAssemblyInfo> | ||||||
|   </PropertyGroup> |   </PropertyGroup> | ||||||
|   | |||||||
| @@ -4,10 +4,16 @@ using System.Reflection; | |||||||
| namespace System.Windows.Forms { | namespace System.Windows.Forms { | ||||||
| 	internal sealed class Command2 { | 	internal sealed class Command2 { | ||||||
| 		private static readonly Type Type = typeof(Form).Assembly.GetType("System.Windows.Forms.Command"); | 		private static readonly Type Type = typeof(Form).Assembly.GetType("System.Windows.Forms.Command"); | ||||||
| 		private static readonly ConstructorInfo Constructor = Type.GetConstructor(new Type[] { typeof(ICommandExecutor) }) ?? throw new NullReferenceException(); | 		private static readonly ConstructorInfo Constructor = Type.GetConstructor(new Type[] { typeof(ICommandExecutor) }); | ||||||
| 		private static readonly MethodInfo DisposeMethod = Type.GetMethod("Dispose", BindingFlags.Instance | BindingFlags.Public) ?? throw new NullReferenceException(); | 		private static readonly MethodInfo DisposeMethod = Type.GetMethod("Dispose", BindingFlags.Instance | BindingFlags.Public); | ||||||
| 		private static readonly PropertyInfo IDProperty = Type.GetProperty("ID") ?? throw new NullReferenceException(); | 		private static readonly PropertyInfo IDProperty = Type.GetProperty("ID"); | ||||||
| 
 | 
 | ||||||
|  | 		internal static void EnsureValid() { | ||||||
|  | 			if (Constructor == null || DisposeMethod == null || IDProperty == null) { | ||||||
|  | 				throw new InvalidOperationException(); | ||||||
|  | 			} | ||||||
|  | 		} | ||||||
|  | 		 | ||||||
| 		public int ID { get; } | 		public int ID { get; } | ||||||
| 
 | 
 | ||||||
| 		private readonly object cmd; | 		private readonly object cmd; | ||||||
|   | |||||||
| @@ -7,8 +7,14 @@ using System.Runtime.InteropServices; | |||||||
| 
 | 
 | ||||||
| namespace System.Windows.Forms { | namespace System.Windows.Forms { | ||||||
| 	public sealed class ContextMenu : Menu { | 	public sealed class ContextMenu : Menu { | ||||||
| 		private static readonly FieldInfo NotifyIconWindowField = typeof(NotifyIcon).GetField("window", BindingFlags.Instance | BindingFlags.NonPublic) ?? throw new InvalidOperationException(); | 		private static readonly FieldInfo NotifyIconWindowField = typeof(NotifyIcon).GetField("_window", BindingFlags.Instance | BindingFlags.NonPublic); | ||||||
| 			 | 
 | ||||||
|  | 		internal static void EnsureValid() { | ||||||
|  | 			if (NotifyIconWindowField == null) { | ||||||
|  | 				throw new InvalidOperationException(); | ||||||
|  | 			} | ||||||
|  | 		} | ||||||
|  | 
 | ||||||
| 		public event EventHandler Popup; | 		public event EventHandler Popup; | ||||||
| 
 | 
 | ||||||
| 		public void Show(Control control, Point pos) { | 		public void Show(Control control, Point pos) { | ||||||
|   | |||||||
| @@ -0,0 +1,8 @@ | |||||||
|  | namespace System.Windows.Forms;  | ||||||
|  | 
 | ||||||
|  | public static class LegacyWinForms { | ||||||
|  | 	public static void EnsureValid() { | ||||||
|  | 		Command2.EnsureValid(); | ||||||
|  | 		ContextMenu.EnsureValid(); | ||||||
|  | 	} | ||||||
|  | } | ||||||
		Reference in New Issue
	
	Block a user