diff --git a/Microsoft.Maui.Gtk.Packages.slnf b/Microsoft.Maui.Gtk.Packages.slnf index 11e03d24ba4a..2b0045f7c71b 100644 --- a/Microsoft.Maui.Gtk.Packages.slnf +++ b/Microsoft.Maui.Gtk.Packages.slnf @@ -15,7 +15,9 @@ "src\\Graphics\\src\\Graphics.Skia\\Graphics.Skia.csproj", "src\\Graphics\\src\\Graphics\\Graphics.csproj", "src\\Graphics\\src\\Text.Markdig\\Graphics.Text.Markdig.csproj", - "src\\SingleProject\\Resizetizer\\src\\Resizetizer.csproj" + "src\\SingleProject\\Resizetizer\\src\\Resizetizer.csproj", + "src\\Workload\\Microsoft.Maui.Sdk\\Microsoft.Maui.Sdk.csproj", + "src\\Workload\\Microsoft.NET.Sdk.Maui.Manifest\\Microsoft.NET.Sdk.Maui.Manifest.csproj" ] } -} \ No newline at end of file +} diff --git a/eng/Versions.props b/eng/Versions.props index f39295b01c56..9330be3b19e3 100644 --- a/eng/Versions.props +++ b/eng/Versions.props @@ -106,5 +106,6 @@ $(DotNetVersionBand) $(DotNetVersionBand) $(DotNetVersionBand) + $(DotNetVersionBand) diff --git a/eng/scripts/update-version-props.ps1 b/eng/scripts/update-version-props.ps1 index da81e00da2b8..02956c3028aa 100644 --- a/eng/scripts/update-version-props.ps1 +++ b/eng/scripts/update-version-props.ps1 @@ -29,6 +29,10 @@ The MacCatalyst version to update on the file .PARAMETER macVersion +The Gtk version to update on the file + +.PARAMETER gtkVersion + The Mac version to update on the file . @@ -47,7 +51,8 @@ param [string] $iOSVersion, [string] $tvOSVersion, [string] $macCatalystVersion, - [string] $macVersion + [string] $macVersion, + [string] $gtkVersion ) #Update git config @@ -86,11 +91,18 @@ if ($macVersion) $macVersionNode."#text" = $macVersion } +if ($gtkVersion) +{ + $gtkVersionNode = $xmlDoc.SelectNodes("//Project//PropertyGroup//MicrosoftGtkSdkPackageVersion")[0] + $gtkVersionNode."#text" = $gtkVersion +} + Write-Output("Android version: " + $xmlDoc.Project.PropertyGroup.MicrosoftAndroidSdkWindowsPackageVersion) Write-Output("iOS version: " + $xmlDoc.Project.PropertyGroup.MicrosoftiOSSdkPackageVersion) Write-Output("tvOS version: " + $xmlDoc.Project.PropertyGroup.MicrosofttvOSSdkPackageVersion) Write-Output("MacCatalyst version: " + $xmlDoc.Project.PropertyGroup.MicrosoftMacCatalystSdkPackageVersion) Write-Output("Mac version: " + $xmlDoc.Project.PropertyGroup.MicrosoftmacOSSdkPackageVersion) +Write-Output("Gtk version: " + $xmlDoc.Project.PropertyGroup.MicrosoftGtkSdkPackageVersion) $xmlDoc.Save($xmlFileName) diff --git a/src/Compatibility/Core/src/Gtk/GtkPlatformServices.cs_ b/src/Compatibility/Core/src/Gtk/GtkPlatformServices.cs_ index ec7f37c21398..aa3b1bcb91ad 100644 --- a/src/Compatibility/Core/src/Gtk/GtkPlatformServices.cs_ +++ b/src/Compatibility/Core/src/Gtk/GtkPlatformServices.cs_ @@ -18,7 +18,7 @@ namespace Microsoft.Maui.Controls.Compatibility public void BeginInvokeOnMainThread(Action action) { - MauiGtkApplication.Invoke(action); + MauiApplication.Invoke(action); } public Assembly[] GetAssemblies() { @@ -96,7 +96,7 @@ namespace Microsoft.Maui.Controls.Compatibility public void QuitApplication() { - ((GLib.Application)MauiGtkApplication.CurrentGtkApplication).Quit(); + ((GLib.Application)MauiApplication.CurrentGtkApplication).Quit(); } public SizeRequest GetNativeSize(VisualElement view, double widthConstraint, double heightConstraint) diff --git a/src/Controls/samples/Controls.Sample.Gtk/SimpleSampleApp/SimpleSampleGtkApplication.cs b/src/Controls/samples/Controls.Sample.Gtk/SimpleSampleApp/SimpleSampleGtkApplication.cs index 4a1d889e7e98..6c1c4e4d9e94 100644 --- a/src/Controls/samples/Controls.Sample.Gtk/SimpleSampleApp/SimpleSampleGtkApplication.cs +++ b/src/Controls/samples/Controls.Sample.Gtk/SimpleSampleApp/SimpleSampleGtkApplication.cs @@ -7,7 +7,7 @@ namespace Maui.SimpleSampleApp { - public class SimpleSampleGtkApplication : MauiGtkApplication + public class SimpleSampleGtkApplication : MauiApplication { protected override MauiApp CreateMauiApp() diff --git a/src/Controls/samples/Controls.Sample/Platforms/Gtk/Main.cs b/src/Controls/samples/Controls.Sample/Platforms/Gtk/Main.cs index 4358ec30cc28..ac1b2434c9b2 100644 --- a/src/Controls/samples/Controls.Sample/Platforms/Gtk/Main.cs +++ b/src/Controls/samples/Controls.Sample/Platforms/Gtk/Main.cs @@ -4,7 +4,7 @@ namespace Maui.Controls.Sample.Platform { - class Program : MauiGtkApplication + class Program : MauiApplication { protected override MauiApp CreateMauiApp() => MauiProgram.CreateMauiApp(); diff --git a/src/Controls/src/Build.Tasks/nuget/buildTransitive/netstandard2.0/Microsoft.Maui.Controls.Globs.props b/src/Controls/src/Build.Tasks/nuget/buildTransitive/netstandard2.0/Microsoft.Maui.Controls.Globs.props index 70e85541920f..7928adfc7017 100644 --- a/src/Controls/src/Build.Tasks/nuget/buildTransitive/netstandard2.0/Microsoft.Maui.Controls.Globs.props +++ b/src/Controls/src/Build.Tasks/nuget/buildTransitive/netstandard2.0/Microsoft.Maui.Controls.Globs.props @@ -162,4 +162,6 @@ Exclude="$(DefaultItemExcludes);$(DefaultExcludesInProjectFolder);@(TizenTpkUserExcludeFiles)" /> + + diff --git a/src/Core/src/LifecycleEvents/Gtk/GtkLifecycle.cs b/src/Core/src/LifecycleEvents/Gtk/GtkLifecycle.cs index 1cd03cab5f48..e76257c3427b 100644 --- a/src/Core/src/LifecycleEvents/Gtk/GtkLifecycle.cs +++ b/src/Core/src/LifecycleEvents/Gtk/GtkLifecycle.cs @@ -21,7 +21,7 @@ public static class GtkLifecycle public delegate void OnStartup(Gtk.Application application, EventArgs args); - public delegate void OnLaunching(MauiGtkApplication application, EventArgs args); + public delegate void OnLaunching(MauiApplication application, EventArgs args); public delegate void OnLaunched(Gtk.Application application, EventArgs args); diff --git a/src/Core/src/Platform/Gtk/MauiGtkApplication.cs b/src/Core/src/Platform/Gtk/MauiApplication.cs similarity index 90% rename from src/Core/src/Platform/Gtk/MauiGtkApplication.cs rename to src/Core/src/Platform/Gtk/MauiApplication.cs index 3e9b56094554..300596799405 100644 --- a/src/Core/src/Platform/Gtk/MauiGtkApplication.cs +++ b/src/Core/src/Platform/Gtk/MauiApplication.cs @@ -7,13 +7,19 @@ namespace Microsoft.Maui { - public abstract class MauiGtkApplication : IPlatformApplication + public abstract class MauiApplication : IPlatformApplication { + protected MauiApplication() + { + Current = this; + IPlatformApplication.Current = this; + } + protected abstract MauiApp CreateMauiApp(); // https://docs.gtk.org/gio/type_func.Application.id_is_valid.html // TODO: find a better algo for id - public virtual string ApplicationId => $"{typeof(MauiGtkApplication).Namespace}.{nameof(MauiGtkApplication)}.{Name}".PadRight(255, ' ').Substring(0, 255).Trim(); + public virtual string ApplicationId => $"{typeof(MauiApplication).Namespace}.{nameof(MauiApplication)}.{Name}".PadRight(255, ' ').Substring(0, 255).Trim(); string? _name; @@ -27,7 +33,7 @@ public string? Name // https://docs.gtk.org/gtk3/class.Application.html public static Gtk.Application CurrentGtkApplication { get; internal set; } = null!; - public static MauiGtkApplication Current { get; internal set; } = null!; + public static MauiApplication Current { get; internal set; } = null!; public MauiGtkMainWindow MainWindow { get; protected set; } = null!; diff --git a/src/Core/src/Platform/Gtk/MauiGtkMainWindow.cs b/src/Core/src/Platform/Gtk/MauiGtkMainWindow.cs index 4ace70e4ec61..41f35bc6c61f 100644 --- a/src/Core/src/Platform/Gtk/MauiGtkMainWindow.cs +++ b/src/Core/src/Platform/Gtk/MauiGtkMainWindow.cs @@ -23,12 +23,12 @@ public MauiGtkMainWindow() : base(WindowType.Toplevel) void OnDeleteEvent(object o, DeleteEventArgs args) { - MauiGtkApplication.Current.Services?.InvokeLifecycleEvents(del => del(this, args)); + MauiApplication.Current.Services?.InvokeLifecycleEvents(del => del(this, args)); - if (MauiGtkApplication.Current.MainWindow == o) + if (MauiApplication.Current.MainWindow == o) { - ((Application)MauiGtkApplication.CurrentGtkApplication).Quit(); + ((Application)MauiApplication.CurrentGtkApplication).Quit(); args.Event.SendEvent = true; } @@ -37,22 +37,22 @@ void OnDeleteEvent(object o, DeleteEventArgs args) //GtkWidget::visibility-notify-event has been deprecated since version 3.12 // void OnVisibilityNotifyEvent(object o, VisibilityNotifyEventArgs args) // { - // MauiGtkApplication.Current.Services?.InvokeLifecycleEvents(del => del(this, args)); + // MauiApplication.Current.Services?.InvokeLifecycleEvents(del => del(this, args)); // } void OnHidden(object? sender, EventArgs args) { - MauiGtkApplication.Current.Services?.InvokeLifecycleEvents(del => del(this, args)); + MauiApplication.Current.Services?.InvokeLifecycleEvents(del => del(this, args)); } void OnShown(object? sender, EventArgs args) { - MauiGtkApplication.Current.Services?.InvokeLifecycleEvents(del => del(this, args)); + MauiApplication.Current.Services?.InvokeLifecycleEvents(del => del(this, args)); } void OnWindowStateEvent(object o, WindowStateEventArgs args) { - MauiGtkApplication.Current.Services?.InvokeLifecycleEvents(del => del(this, args)); + MauiApplication.Current.Services?.InvokeLifecycleEvents(del => del(this, args)); } } diff --git a/src/Core/src/Platform/Gtk/MauiWindow.cs b/src/Core/src/Platform/Gtk/MauiWindow.cs index 99fa31f8d138..c234ceb4c708 100644 --- a/src/Core/src/Platform/Gtk/MauiWindow.cs +++ b/src/Core/src/Platform/Gtk/MauiWindow.cs @@ -6,7 +6,7 @@ namespace Microsoft.Maui.Platform { - [Obsolete("use MauiGtkApplication")] + [Obsolete("use MauiApplication")] public class MauiWindow : Window { diff --git a/src/Core/src/Platform/Gtk/WindowExtensions.cs b/src/Core/src/Platform/Gtk/WindowExtensions.cs index 61028c550e3c..d535d3716c90 100644 --- a/src/Core/src/Platform/Gtk/WindowExtensions.cs +++ b/src/Core/src/Platform/Gtk/WindowExtensions.cs @@ -12,7 +12,7 @@ public static void UpdateTitle(this Gtk.Window platformWindow, IWindow window) = public static IWindow GetWindow(this Gtk.Window platformWindow) { - foreach (var window in MauiGtkApplication.Current.Application.Windows) + foreach (var window in MauiApplication.Current.Application.Windows) { if (window?.Handler?.PlatformView is Gtk.Window win && win == platformWindow) return window; diff --git a/src/DotNet/Dependencies/Workloads.csproj b/src/DotNet/Dependencies/Workloads.csproj index 2e9b4bd8017d..8ea2438cb9a2 100644 --- a/src/DotNet/Dependencies/Workloads.csproj +++ b/src/DotNet/Dependencies/Workloads.csproj @@ -14,6 +14,7 @@ + \ No newline at end of file diff --git a/src/DotNet/DotNet.csproj b/src/DotNet/DotNet.csproj index 89d95fa4b40f..70930feccedf 100644 --- a/src/DotNet/DotNet.csproj +++ b/src/DotNet/DotNet.csproj @@ -23,6 +23,9 @@ $(DotNetInstallCommand) --azure-feed $(InternalAzureFeed) --feed-credential $DOTNET_TOKEN $(DotNetInstallCommand) --azure-feed $(DotNetFeedUrl) + + + <_ProvisionDependsOn> @@ -121,6 +124,9 @@ bash '$(DotNetInstallScriptPath)' --version $(VersionFromAndroid) --install-dir '$(DotNetDirectory)' --verbose -Runtime dotnet bash '$(DotNetInstallScriptPath)' --version $(VersionFromMacios) --install-dir '$(DotNetDirectory)' --verbose -Runtime dotnet + + + <_PacksToRemove Include="microsoft.net.sdk.tvos" /> <_PacksToRemove Include="microsoft.net.sdk.macos" /> + <_PacksToRemove Include="microsoft.net.sdk.gtk" /> <_PacksToRemove Include="microsoft.net.workload.emscripten" /> <_PacksToRemove Include="microsoft.net.workload.mono.toolchain" /> @@ -155,6 +162,7 @@ <_WorkloadIds Include="macos" /> <_WorkloadIds Include="ios" /> <_WorkloadIds Include="tvos" /> + <_WorkloadIds Include="gtk" /> <_WorkloadIds Include="tizen" Condition=" '$(IncludeTizenTargetFrameworks)' == 'true' " /> diff --git a/src/MultiTargeting.targets b/src/MultiTargeting.targets index 8de3add21204..20646708756b 100644 --- a/src/MultiTargeting.targets +++ b/src/MultiTargeting.targets @@ -61,9 +61,9 @@ - + - + @@ -83,6 +83,8 @@ Platform\Android\ $(AndroidProjectFolder)Resources $(AndroidProjectFolder)Assets + + Platform\Gtk\ diff --git a/src/Workload/Microsoft.Maui.Sdk/Microsoft.Maui.Sdk.csproj b/src/Workload/Microsoft.Maui.Sdk/Microsoft.Maui.Sdk.csproj index 0927ad8bfd55..e5e57d6d89d6 100644 --- a/src/Workload/Microsoft.Maui.Sdk/Microsoft.Maui.Sdk.csproj +++ b/src/Workload/Microsoft.Maui.Sdk/Microsoft.Maui.Sdk.csproj @@ -12,7 +12,7 @@ true Microsoft.Maui.Sdk .NET MAUI SDK - .NET Multi-platform App UI (.NET MAUI) SDK. Please do not reference this package directly. + (MauiLinux is a fork of MAUI).NET Multi-platform App UI (.NET MAUI) SDK. Please do not reference this package directly. diff --git a/src/Workload/Microsoft.NET.Sdk.Maui.Manifest/Microsoft.NET.Sdk.Maui.Manifest.csproj b/src/Workload/Microsoft.NET.Sdk.Maui.Manifest/Microsoft.NET.Sdk.Maui.Manifest.csproj index 403fc3613baf..74fad253e600 100644 --- a/src/Workload/Microsoft.NET.Sdk.Maui.Manifest/Microsoft.NET.Sdk.Maui.Manifest.csproj +++ b/src/Workload/Microsoft.NET.Sdk.Maui.Manifest/Microsoft.NET.Sdk.Maui.Manifest.csproj @@ -6,7 +6,7 @@ true Microsoft.NET.Sdk.Maui.Manifest-$(DotNetMauiManifestVersionBand) - .NET Multi-platform App UI (.NET MAUI) workload manifest. Please do not reference this package directly. + (MauiLinux is a fork of MAUI).NET Multi-platform App UI (.NET MAUI) workload manifest. Please do not reference this package directly. @@ -46,6 +46,7 @@ <_VersionsToReplace Include="DotNetEmscriptenManifestVersionBand" /> <_VersionsToReplace Include="DotNetAndroidManifestVersionBand" /> <_VersionsToReplace Include="DotNetMaciOSManifestVersionBand" /> + <_VersionsToReplace Include="DotNetGtkManifestVersionBand" /> <_VersionsToReplace Include="MicrosoftAspNetCoreAuthorizationPackageVersion" /> <_VersionsToReplace Include="MicrosoftAspNetCoreComponentsAnalyzersPackageVersion" /> <_VersionsToReplace Include="MicrosoftAspNetCoreComponentsFormsPackageVersion" /> diff --git a/src/Workload/Microsoft.NET.Sdk.Maui.Manifest/Rollback.in.json b/src/Workload/Microsoft.NET.Sdk.Maui.Manifest/Rollback.in.json index 87328d8ba95a..53d49444f16f 100644 --- a/src/Workload/Microsoft.NET.Sdk.Maui.Manifest/Rollback.in.json +++ b/src/Workload/Microsoft.NET.Sdk.Maui.Manifest/Rollback.in.json @@ -1,5 +1,6 @@ { "microsoft.net.sdk.android": "@MicrosoftAndroidSdkWindowsPackageVersion@/@DotNetAndroidManifestVersionBand@", + "microsoft.net.sdk.gtk": "@MicrosoftGtkSdkPackageVersion@/@DotNetGtkManifestVersionBand@", "microsoft.net.sdk.ios": "@MicrosoftiOSSdkPackageVersion@/@DotNetMaciOSManifestVersionBand@", "microsoft.net.sdk.maccatalyst": "@MicrosoftMacCatalystSdkPackageVersion@/@DotNetMaciOSManifestVersionBand@", "microsoft.net.sdk.macos": "@MicrosoftmacOSSdkPackageVersion@/@DotNetMaciOSManifestVersionBand@", diff --git a/src/Workload/Microsoft.NET.Sdk.Maui.Manifest/WorkloadManifest.in.json b/src/Workload/Microsoft.NET.Sdk.Maui.Manifest/WorkloadManifest.in.json index ad59614dcc37..87eb9f731c9a 100644 --- a/src/Workload/Microsoft.NET.Sdk.Maui.Manifest/WorkloadManifest.in.json +++ b/src/Workload/Microsoft.NET.Sdk.Maui.Manifest/WorkloadManifest.in.json @@ -20,7 +20,8 @@ "description": ".NET MAUI SDK for Desktop", "extends": [ "maui-maccatalyst", - "maui-windows" + "maui-windows", + "maui-gtk" ] }, "maui-core": { @@ -84,6 +85,13 @@ "extends": [ "maui-blazor" ] + }, + "maui-gtk": { + "description": ".NET MAUI SDK for Gtk", + "extends": [ + "maui-blazor", + "gtk" + ] } }, "packs": { diff --git a/src/Workload/README.md b/src/Workload/README.md index fac19af3af5e..775cb6c4d4f2 100644 --- a/src/Workload/README.md +++ b/src/Workload/README.md @@ -82,13 +82,14 @@ installed: * `maui`: everything * `maui-mobile`: iOS & Android -* `maui-desktop`: Mac Catalyst & Windows +* `maui-desktop`: Mac Catalyst & Windows & Gtk * `maui-core`: required by all platforms * `maui-android` * `maui-maccatalyst` * `maui-macos` * `maui-windows` * `maui-tizen` +* `maui-gtk` `maui-android` simply extends the `android` workload, adding the Android-specific platform implementation for MAUI. @@ -206,6 +207,7 @@ Manually remove these directories: * `dotnet/packs/Microsoft.macOS.*` * `dotnet/packs/Microsoft.Maui.*` * `dotnet/packs/Microsoft.tvOS.*` +* `dotnet/packs/Microsoft.Gtk.*` * `dotnet/sdk/6.0.100-*` * `dotnet/sdk-manifests` * `dotnet/template-packs`