Browse Source

Merge pull request #9716 from AvaloniaUI/fixes/macos-child-window-key-handling

macos: Fix child window key handling
release/0.10.19
Max Katz 3 years ago
committed by Steven Kirk
parent
commit
7d09e7cb2b
  1. 5
      native/Avalonia.Native/src/OSX/AvnWindow.mm
  2. 2
      native/Avalonia.Native/src/OSX/WindowBaseImpl.h
  3. 2
      native/Avalonia.Native/src/OSX/WindowBaseImpl.mm
  4. 6
      native/Avalonia.Native/src/OSX/WindowImpl.h
  5. 18
      native/Avalonia.Native/src/OSX/WindowImpl.mm

5
native/Avalonia.Native/src/OSX/AvnWindow.mm

@ -43,7 +43,7 @@
-(bool) isDialog
{
return _parent->IsDialog();
return _parent->IsModal();
}
-(double) getExtendedTitleBarHeight
@ -280,6 +280,9 @@
- (void)windowDidBecomeKey:(NSNotification *_Nonnull)notification
{
if (_parent == nullptr)
return;
_parent->BringToFront();
dispatch_async(dispatch_get_main_queue(), ^{

2
native/Avalonia.Native/src/OSX/WindowBaseImpl.h

@ -96,7 +96,7 @@ BEGIN_INTERFACE_MAP()
IAvnClipboard *clipboard, IAvnDndResultCallback *cb,
void *sourceHandle) override;
virtual bool IsDialog();
virtual bool IsModal();
id<AvnWindowProtocol> GetWindowProtocol ();

2
native/Avalonia.Native/src/OSX/WindowBaseImpl.mm

@ -541,7 +541,7 @@ HRESULT WindowBaseImpl::BeginDragAndDropOperation(AvnDragDropEffects effects, Av
return S_OK;
}
bool WindowBaseImpl::IsDialog() {
bool WindowBaseImpl::IsModal() {
return false;
}

6
native/Avalonia.Native/src/OSX/WindowImpl.h

@ -23,7 +23,7 @@ private:
NSRect _preZoomSize;
bool _transitioningWindowState;
bool _isClientAreaExtended;
bool _isDialog;
bool _isModal;
WindowImpl* _parent;
std::list<WindowImpl*> _children;
AvnExtendClientAreaChromeHints _extendClientHints;
@ -91,7 +91,9 @@ BEGIN_INTERFACE_MAP()
virtual HRESULT SetWindowState (AvnWindowState state) override;
virtual bool IsDialog() override;
virtual bool IsModal() override;
bool IsOwned();
virtual void BringToFront () override;

18
native/Avalonia.Native/src/OSX/WindowImpl.mm

@ -62,7 +62,7 @@ HRESULT WindowImpl::Show(bool activate, bool isDialog) {
START_COM_CALL;
@autoreleasepool {
_isDialog = isDialog || _parent != nullptr;
_isModal = isDialog;
WindowBaseImpl::Show(activate, isDialog);
@ -96,7 +96,7 @@ HRESULT WindowImpl::SetParent(IAvnWindow *parent) {
_parent = cparent;
_isDialog = _parent != nullptr;
_isModal = _parent != nullptr;
if(_parent != nullptr && Window != nullptr){
// If one tries to show a child window with a minimized parent window, then the parent window will be
@ -122,7 +122,7 @@ void WindowImpl::BringToFront()
{
if ([Window isVisible] && ![Window isMiniaturized])
{
if(IsDialog())
if(IsModal())
{
Activate();
}
@ -149,7 +149,7 @@ bool WindowImpl::CanBecomeKeyWindow()
{
for(auto iterator = _children.begin(); iterator != _children.end(); iterator++)
{
if((*iterator)->IsDialog())
if((*iterator)->IsModal())
{
return false;
}
@ -568,8 +568,12 @@ HRESULT WindowImpl::SetWindowState(AvnWindowState state) {
}
}
bool WindowImpl::IsDialog() {
return _isDialog;
bool WindowImpl::IsModal() {
return _isModal;
}
bool WindowImpl::IsOwned() {
return _parent != nullptr;
}
NSWindowStyleMask WindowImpl::GetStyle() {
@ -598,7 +602,7 @@ NSWindowStyleMask WindowImpl::GetStyle() {
break;
}
if (!IsDialog()) {
if (!IsOwned()) {
s |= NSWindowStyleMaskMiniaturizable;
}

Loading…
Cancel
Save