summaryrefslogtreecommitdiffstats
path: root/src/plugins/platforms/cocoa/qcocoawindow.mm
diff options
context:
space:
mode:
authorLiang Qi <liang.qi@qt.io>2020-04-28 23:00:20 +0200
committerLiang Qi <liang.qi@qt.io>2020-04-28 23:00:20 +0200
commit00edd2a7e75107433b87f3929ecf7478984c7fc6 (patch)
treee9641633b5df634a4e72b57f63106435f095633c /src/plugins/platforms/cocoa/qcocoawindow.mm
parent562d7ded3b23f7aa92cbe4f3132bec0053ed7163 (diff)
parente6a39c13bfe44719ee345419e98638e5f38fe7ee (diff)
Merge remote-tracking branch 'origin/5.15.0' into 5.15
Diffstat (limited to 'src/plugins/platforms/cocoa/qcocoawindow.mm')
-rw-r--r--src/plugins/platforms/cocoa/qcocoawindow.mm23
1 files changed, 18 insertions, 5 deletions
diff --git a/src/plugins/platforms/cocoa/qcocoawindow.mm b/src/plugins/platforms/cocoa/qcocoawindow.mm
index 2cbdb3c873..24e98f5bac 100644
--- a/src/plugins/platforms/cocoa/qcocoawindow.mm
+++ b/src/plugins/platforms/cocoa/qcocoawindow.mm
@@ -376,8 +376,18 @@ void QCocoaWindow::setVisible(bool visible)
} else if (window()->modality() == Qt::ApplicationModal) {
// Show the window as application modal
eventDispatcher()->beginModalSession(window());
- } else if (m_view.window.canBecomeKeyWindow && !eventDispatcher()->hasModalSession()) {
- [m_view.window makeKeyAndOrderFront:nil];
+ } else if (m_view.window.canBecomeKeyWindow) {
+ bool shouldBecomeKeyNow = !NSApp.modalWindow || m_view.window.worksWhenModal;
+
+ // Panels with becomesKeyOnlyIfNeeded set should not activate until a view
+ // with needsPanelToBecomeKey, for example a line edit, is clicked.
+ if ([m_view.window isKindOfClass:[NSPanel class]])
+ shouldBecomeKeyNow &= !(static_cast<NSPanel*>(m_view.window).becomesKeyOnlyIfNeeded);
+
+ if (shouldBecomeKeyNow)
+ [m_view.window makeKeyAndOrderFront:nil];
+ else
+ [m_view.window orderFront:nil];
} else {
[m_view.window orderFront:nil];
}
@@ -894,10 +904,13 @@ void QCocoaWindow::setWindowIcon(const QIcon &icon)
QMacAutoReleasePool pool;
- if (icon.isNull())
+ if (icon.isNull()) {
iconButton.image = [NSWorkspace.sharedWorkspace iconForFile:m_view.window.representedFilename];
- else
- iconButton.image = [NSImage imageFromQIcon:icon];
+ } else {
+ // Fall back to a size that looks good on the highest resolution screen available
+ auto fallbackSize = iconButton.frame.size.height * qGuiApp->devicePixelRatio();
+ iconButton.image = [NSImage imageFromQIcon:icon withSize:fallbackSize];
+ }
}
void QCocoaWindow::setAlertState(bool enabled)