Browse Source

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

macos: Fix child window key handling
pull/9998/head
Max Katz 4 years ago
committed by GitHub
parent
commit
0ff416d4e2
No known key found for this signature in database GPG Key ID: 4AEE18F83AFDEB23
  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

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

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

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

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

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

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

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

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

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

Loading…
Cancel
Save