Browse Source

Merge pull request #7341 from AvaloniaUI/fixes/standard-osx-item-generation

Fixes/standard osx item generation
border-clip-test
Dan Walmsley 5 years ago
committed by Steven Kirk
parent
commit
e7c6a9f98b
  1. 1
      samples/ControlCatalog/App.xaml
  2. 2
      src/Avalonia.Dialogs/AboutAvaloniaDialog.xaml
  3. 1
      src/Avalonia.Dialogs/Avalonia.Dialogs.csproj
  4. 111
      src/Avalonia.Native/AvaloniaNativeMenuExporter.cs

1
samples/ControlCatalog/App.xaml

@ -3,6 +3,7 @@
xmlns:vm="using:ControlCatalog.ViewModels" xmlns:vm="using:ControlCatalog.ViewModels"
x:DataType="vm:ApplicationViewModel" x:DataType="vm:ApplicationViewModel"
x:CompileBindings="True" x:CompileBindings="True"
Name="Avalonia ControlCatalog"
x:Class="ControlCatalog.App"> x:Class="ControlCatalog.App">
<Application.Styles> <Application.Styles>
<Style Selector="TextBlock.h1, TextBlock.h2, TextBlock.h3"> <Style Selector="TextBlock.h1, TextBlock.h2, TextBlock.h3">

2
src/Avalonia.Dialogs/AboutAvaloniaDialog.xaml

@ -95,7 +95,7 @@
</StackPanel> </StackPanel>
<StackPanel Orientation="Horizontal" HorizontalAlignment="Center" > <StackPanel Orientation="Horizontal" HorizontalAlignment="Center" >
<TextBlock Text="Chat Room | " /> <TextBlock Text="Chat Room | " />
<Button Classes="Hyperlink" CommandParameter="https://gitter.im/AvaloniaUI/Avalonia/" /> <Button Classes="Hyperlink" CommandParameter="https://t.me/Avalonia" />
</StackPanel> </StackPanel>
</StackPanel> </StackPanel>
<StackPanel VerticalAlignment="Bottom" Margin="10"> <StackPanel VerticalAlignment="Bottom" Margin="10">

1
src/Avalonia.Dialogs/Avalonia.Dialogs.csproj

@ -8,6 +8,7 @@
<SubType>Designer</SubType> <SubType>Designer</SubType>
</AvaloniaResource> </AvaloniaResource>
<AvaloniaResource Include="Assets\*" /> <AvaloniaResource Include="Assets\*" />
<AvaloniaResource Include="**/*.xaml" />
</ItemGroup> </ItemGroup>
<Import Project="..\..\build\BuildTargets.targets" /> <Import Project="..\..\build\BuildTargets.targets" />

111
src/Avalonia.Native/AvaloniaNativeMenuExporter.cs

@ -70,74 +70,76 @@ namespace Avalonia.Native
var result = new NativeMenu(); var result = new NativeMenu();
var aboutItem = new NativeMenuItem("About Avalonia"); var aboutItem = new NativeMenuItem("About Avalonia");
aboutItem.Click += async (sender, e) =>
aboutItem.Click += async (_, _) =>
{ {
var dialog = new AboutAvaloniaDialog(); var dialog = new AboutAvaloniaDialog();
var mainWindow = (Application.Current.ApplicationLifetime as IClassicDesktopStyleApplicationLifetime)?.MainWindow; if (Application.Current is
{ ApplicationLifetime: IClassicDesktopStyleApplicationLifetime { MainWindow: { } mainWindow } })
await dialog.ShowDialog(mainWindow); {
await dialog.ShowDialog(mainWindow);
}
}; };
result.Add(aboutItem); result.Add(aboutItem);
var macOpts = AvaloniaLocator.Current.GetService<MacOSPlatformOptions>(); return result;
if (macOpts == null || !macOpts.DisableDefaultApplicationMenuItems) }
{
result.Add(new NativeMenuItemSeparator());
var servicesMenu = new NativeMenuItem("Services"); private void PopulateStandardOSXMenuItems(NativeMenu appMenu)
servicesMenu.Menu = new NativeMenu {
{ appMenu.Add(new NativeMenuItemSeparator());
[MacOSNativeMenuCommands.IsServicesSubmenuProperty] = true
};
result.Add(servicesMenu);
result.Add(new NativeMenuItemSeparator()); var servicesMenu = new NativeMenuItem("Services");
servicesMenu.Menu = new NativeMenu { [MacOSNativeMenuCommands.IsServicesSubmenuProperty] = true };
var hideItem = new NativeMenuItem("Hide " + Application.Current.Name) appMenu.Add(servicesMenu);
{
Gesture = new KeyGesture(Key.H, KeyModifiers.Meta)
};
hideItem.Click += (sender, args) =>
{
_applicationCommands.HideApp();
};
result.Add(hideItem);
appMenu.Add(new NativeMenuItemSeparator());
var hideOthersItem = new NativeMenuItem("Hide Others") var hideItem = new NativeMenuItem("Hide " + (Application.Current?.Name ?? "Application"))
{ {
Gesture = new KeyGesture(Key.Q, KeyModifiers.Meta | KeyModifiers.Alt) Gesture = new KeyGesture(Key.H, KeyModifiers.Meta)
}; };
hideOthersItem.Click += (sender, args) =>
{
_applicationCommands.HideOthers();
};
result.Add(hideOthersItem);
hideItem.Click += (_, _) =>
{
_applicationCommands.HideApp();
};
var showAllItem = new NativeMenuItem("Show All"); appMenu.Add(hideItem);
showAllItem.Click += (sender, args) =>
{
_applicationCommands.ShowAll();
};
result.Add(showAllItem);
result.Add(new NativeMenuItemSeparator()); var hideOthersItem = new NativeMenuItem("Hide Others")
{
Gesture = new KeyGesture(Key.Q, KeyModifiers.Meta | KeyModifiers.Alt)
};
hideOthersItem.Click += (_, _) =>
{
_applicationCommands.HideOthers();
};
appMenu.Add(hideOthersItem);
var quitItem = new NativeMenuItem("Quit") var showAllItem = new NativeMenuItem("Show All");
{ showAllItem.Click += (_, _) =>
Gesture = new KeyGesture(Key.Q, KeyModifiers.Meta) {
}; _applicationCommands.ShowAll();
quitItem.Click += (sender, args) => };
{
_applicationCommands.ShowAll();
};
result.Add(quitItem);
}
appMenu.Add(showAllItem);
return result; appMenu.Add(new NativeMenuItemSeparator());
var quitItem = new NativeMenuItem("Quit") { Gesture = new KeyGesture(Key.Q, KeyModifiers.Meta) };
quitItem.Click += (_, _) =>
{
if (Application.Current is { ApplicationLifetime: IControlledApplicationLifetime lifetime })
{
lifetime.Shutdown();
}
};
appMenu.Add(quitItem);
} }
private void DoLayoutReset(bool forceUpdate = false) private void DoLayoutReset(bool forceUpdate = false)
@ -213,6 +215,13 @@ namespace Avalonia.Native
_nativeMenu.Initialize(this, appMenuHolder, ""); _nativeMenu.Initialize(this, appMenuHolder, "");
var macOpts = AvaloniaLocator.Current.GetService<MacOSPlatformOptions>();
if (macOpts == null || !macOpts.DisableDefaultApplicationMenuItems)
{
PopulateStandardOSXMenuItems(menu);
}
setMenu = true; setMenu = true;
} }

Loading…
Cancel
Save