diff options
author | Liang Qi <liang.qi@qt.io> | 2018-06-07 19:10:53 +0200 |
---|---|---|
committer | Liang Qi <liang.qi@qt.io> | 2018-06-07 19:10:53 +0200 |
commit | 096e37910d93f9c52976600e985c615ea36fe291 (patch) | |
tree | 713d020f4a04f03d8ca6e111055e7eebe85953a8 /src/plugins | |
parent | 88eda007a3b5046999dd0b287634765efcd8934d (diff) | |
parent | a14a943f9ac3d1e85514d7fb6688c84e624ac850 (diff) |
Merge remote-tracking branch 'origin/5.11' into dev
Conflicts:
.qmake.conf
src/corelib/kernel/qeventdispatcher_cf.mm
src/gui/kernel/qguiapplication_p.h
src/gui/kernel/qwindowsysteminterface.cpp
src/gui/kernel/qwindowsysteminterface.h
src/plugins/platforms/cocoa/qcocoawindow.mm
src/plugins/platforms/cocoa/qnswindowdelegate.mm
src/plugins/platforms/ios/qioseventdispatcher.mm
src/plugins/platforms/windows/qwindowsdrag.h
src/plugins/platforms/windows/qwindowsinternalmimedata.h
src/plugins/platforms/windows/qwindowsmime.cpp
src/plugins/platforms/winrt/qwinrtscreen.cpp
Change-Id: Ic817f265c2386e83839d2bb9ef7419cb29705246
Diffstat (limited to 'src/plugins')
33 files changed, 127 insertions, 89 deletions
diff --git a/src/plugins/platforms/cocoa/qcocoadrag.h b/src/plugins/platforms/cocoa/qcocoadrag.h index dc0cc17dfb..5a5b985c6e 100644 --- a/src/plugins/platforms/cocoa/qcocoadrag.h +++ b/src/plugins/platforms/cocoa/qcocoadrag.h @@ -46,6 +46,7 @@ #include <private/qsimpledrag_p.h> #include <QtGui/private/qdnd_p.h> +#include <QtGui/private/qinternalmimedata_p.h> QT_BEGIN_NAMESPACE diff --git a/src/plugins/platforms/cocoa/qcocoawindow.mm b/src/plugins/platforms/cocoa/qcocoawindow.mm index be85debdbc..022242130b 100644 --- a/src/plugins/platforms/cocoa/qcocoawindow.mm +++ b/src/plugins/platforms/cocoa/qcocoawindow.mm @@ -567,7 +567,7 @@ void QCocoaWindow::setWindowFlags(Qt::WindowFlags flags) Qt::WindowType type = static_cast<Qt::WindowType>(int(flags & Qt::WindowType_Mask)); if ((type & Qt::Popup) != Qt::Popup && (type & Qt::Dialog) != Qt::Dialog) { NSWindowCollectionBehavior behavior = m_view.window.collectionBehavior; - if (flags & Qt::WindowFullscreenButtonHint) { + if ((flags & Qt::WindowFullscreenButtonHint) || m_view.window.qt_fullScreen) { behavior |= NSWindowCollectionBehaviorFullScreenPrimary; behavior &= ~NSWindowCollectionBehaviorFullScreenAuxiliary; } else { diff --git a/src/plugins/platforms/cocoa/qnswindowdelegate.mm b/src/plugins/platforms/cocoa/qnswindowdelegate.mm index 1888dc1c90..6079a35d05 100644 --- a/src/plugins/platforms/cocoa/qnswindowdelegate.mm +++ b/src/plugins/platforms/cocoa/qnswindowdelegate.mm @@ -40,6 +40,7 @@ #include "qnswindowdelegate.h" #include "qcocoahelpers.h" #include "qcocoawindow.h" +#include "qcocoascreen.h" #include <QDebug> #include <QtCore/private/qcore_mac_p.h> @@ -72,15 +73,24 @@ static QRegExp whitespaceRegex = QRegExp(QStringLiteral("\\s*")); Overridden to ensure that the zoomed state always results in a maximized window, which would otherwise not be the case for borderless windows. */ -- (NSRect)windowWillUseStandardFrame:(NSWindow *)window defaultFrame:(NSRect)newFrame +- (NSRect)windowWillUseStandardFrame:(NSWindow *)window defaultFrame:(NSRect)proposedFrame { - Q_UNUSED(newFrame); - - // We explicitly go through the QScreen API here instead of just using - // window.screen.visibleFrame directly, as that ensures we have the same - // behavior for both use-cases/APIs. + Q_UNUSED(proposedFrame); Q_ASSERT(window == m_cocoaWindow->nativeWindow()); - return NSRectFromCGRect(m_cocoaWindow->screen()->availableGeometry().toCGRect()); + + // We compute the maximized state based on the maximum size, and + // the current position of the window. This may result in the window + // geometry falling outside of the current screen's available geometry, + // e.g. when there is not maximize size set, but this is okey, AppKit + // will then shift and possibly clip the geometry for us. + const QWindow *w = m_cocoaWindow->window(); + QRect maximizedRect = QRect(w->framePosition(), w->maximumSize()); + + // QWindow::maximumSize() refers to the client size, + // but AppKit expects the full frame size. + maximizedRect.adjust(0, 0, 0, w->frameMargins().top()); + + return QCocoaScreen::mapToNative(maximizedRect); } - (BOOL)window:(NSWindow *)window shouldPopUpDocumentPathMenu:(NSMenu *)menu diff --git a/src/plugins/platforms/ios/qiosapplicationstate.mm b/src/plugins/platforms/ios/qiosapplicationstate.mm index 6d9bcdacbf..cc76d198f5 100644 --- a/src/plugins/platforms/ios/qiosapplicationstate.mm +++ b/src/plugins/platforms/ios/qiosapplicationstate.mm @@ -44,6 +44,7 @@ #include <qpa/qwindowsysteminterface.h> #include <QtCore/qcoreapplication.h> +#include <QtCore/private/qcore_mac_p.h> #include <QtGui/private/qguiapplication_p.h> @@ -57,7 +58,13 @@ static void qRegisterApplicationStateNotifications() // Map between notifications and corresponding application state. Note that // there's no separate notification for moving to UIApplicationStateInactive, // so we use UIApplicationWillResignActiveNotification as an intermediate. - static QMap<NSNotificationName, UIApplicationState> notifications { + using NotificationMap = QMap<NSNotificationName, UIApplicationState>; + static auto notifications = qt_apple_isApplicationExtension() ? NotificationMap{ + { NSExtensionHostWillEnterForegroundNotification, UIApplicationStateInactive }, + { NSExtensionHostDidBecomeActiveNotification, UIApplicationStateActive }, + { NSExtensionHostWillResignActiveNotification, UIApplicationStateInactive }, + { NSExtensionHostDidEnterBackgroundNotification, UIApplicationStateBackground }, + } : NotificationMap{ { UIApplicationWillEnterForegroundNotification, UIApplicationStateInactive }, { UIApplicationDidBecomeActiveNotification, UIApplicationStateActive }, { UIApplicationWillResignActiveNotification, UIApplicationStateInactive }, @@ -73,16 +80,24 @@ static void qRegisterApplicationStateNotifications() }]; } - // Initialize correct startup state, which may not be the Qt default (inactive) - UIApplicationState startupState = [UIApplication sharedApplication].applicationState; - QIOSApplicationState::handleApplicationStateChanged(startupState, QLatin1String("Application loaded")); + if (qt_apple_isApplicationExtension()) { + // Extensions are not allowed to access UIApplication, so we assume the state is active + QIOSApplicationState::handleApplicationStateChanged(UIApplicationStateActive, + QLatin1String("Extension loaded, assuming state is active")); + } else { + // Initialize correct startup state, which may not be the Qt default (inactive) + UIApplicationState startupState = [UIApplication sharedApplication].applicationState; + QIOSApplicationState::handleApplicationStateChanged(startupState, QLatin1String("Application loaded")); + } } Q_CONSTRUCTOR_FUNCTION(qRegisterApplicationStateNotifications) QIOSApplicationState::QIOSApplicationState() { - UIApplicationState startupState = [UIApplication sharedApplication].applicationState; - QIOSApplicationState::handleApplicationStateChanged(startupState, QLatin1String("Application launched")); + if (!qt_apple_isApplicationExtension()) { + UIApplicationState startupState = [UIApplication sharedApplication].applicationState; + QIOSApplicationState::handleApplicationStateChanged(startupState, QLatin1String("Application launched")); + } } void QIOSApplicationState::handleApplicationStateChanged(UIApplicationState uiState, const QString &reason) diff --git a/src/plugins/platforms/offscreen/qoffscreencommon.h b/src/plugins/platforms/offscreen/qoffscreencommon.h index 541c07384c..f4f0142911 100644 --- a/src/plugins/platforms/offscreen/qoffscreencommon.h +++ b/src/plugins/platforms/offscreen/qoffscreencommon.h @@ -41,7 +41,9 @@ #define QOFFSCREENCOMMON_H #include <qpa/qplatformbackingstore.h> +#if QT_CONFIG(draganddrop) #include <qpa/qplatformdrag.h> +#endif #include <qpa/qplatformintegration.h> #include <qpa/qplatformscreen.h> #include <qpa/qplatformwindow.h> @@ -71,7 +73,7 @@ public: QScopedPointer<QPlatformCursor> m_cursor; }; -#ifndef QT_NO_DRAGANDDROP +#if QT_CONFIG(draganddrop) class QOffscreenDrag : public QPlatformDrag { public: diff --git a/src/plugins/platforms/offscreen/qoffscreenintegration.cpp b/src/plugins/platforms/offscreen/qoffscreenintegration.cpp index 75bb786b28..01cd254501 100644 --- a/src/plugins/platforms/offscreen/qoffscreenintegration.cpp +++ b/src/plugins/platforms/offscreen/qoffscreenintegration.cpp @@ -109,7 +109,7 @@ QOffscreenIntegration::QOffscreenIntegration() m_fontDatabase.reset(new QFreeTypeFontDatabase()); #endif -#ifndef QT_NO_DRAGANDDROP +#if QT_CONFIG(draganddrop) m_drag.reset(new QOffscreenDrag); #endif m_services.reset(new QPlatformServices); @@ -204,7 +204,7 @@ QPlatformFontDatabase *QOffscreenIntegration::fontDatabase() const return m_fontDatabase.data(); } -#ifndef QT_NO_DRAGANDDROP +#if QT_CONFIG(draganddrop) QPlatformDrag *QOffscreenIntegration::drag() const { return m_drag.data(); diff --git a/src/plugins/platforms/offscreen/qoffscreenintegration.h b/src/plugins/platforms/offscreen/qoffscreenintegration.h index a1e3a9bde8..fc988126bb 100644 --- a/src/plugins/platforms/offscreen/qoffscreenintegration.h +++ b/src/plugins/platforms/offscreen/qoffscreenintegration.h @@ -59,7 +59,7 @@ public: QPlatformWindow *createPlatformWindow(QWindow *window) const override; QPlatformBackingStore *createPlatformBackingStore(QWindow *window) const override; -#ifndef QT_NO_DRAGANDDROP +#if QT_CONFIG(draganddrop) QPlatformDrag *drag() const override; #endif @@ -76,7 +76,7 @@ public: private: QScopedPointer<QPlatformFontDatabase> m_fontDatabase; -#ifndef QT_NO_DRAGANDDROP +#if QT_CONFIG(draganddrop) QScopedPointer<QPlatformDrag> m_drag; #endif QScopedPointer<QPlatformInputContext> m_inputContext; diff --git a/src/plugins/platforms/qnx/qqnxintegration.cpp b/src/plugins/platforms/qnx/qqnxintegration.cpp index 91cb4aba20..4aaade402a 100644 --- a/src/plugins/platforms/qnx/qqnxintegration.cpp +++ b/src/plugins/platforms/qnx/qqnxintegration.cpp @@ -155,7 +155,7 @@ QQnxIntegration::QQnxIntegration(const QStringList ¶mList) , m_clipboard(0) #endif , m_navigator(0) -#if !defined(QT_NO_DRAGANDDROP) +#if QT_CONFIG(draganddrop) , m_drag(new QSimpleDrag()) #endif { @@ -232,7 +232,7 @@ QQnxIntegration::~QQnxIntegration() qIntegrationDebug("platform plugin shutdown begin"); delete m_nativeInterface; -#if !defined(QT_NO_DRAGANDDROP) +#if QT_CONFIG(draganddrop) // Destroy the drag object delete m_drag; #endif @@ -439,7 +439,7 @@ QPlatformClipboard *QQnxIntegration::clipboard() const } #endif -#if !defined(QT_NO_DRAGANDDROP) +#if QT_CONFIG(draganddrop) QPlatformDrag *QQnxIntegration::drag() const { return m_drag; diff --git a/src/plugins/platforms/qnx/qqnxintegration.h b/src/plugins/platforms/qnx/qqnxintegration.h index d1ebb1d4bf..f11afa1748 100644 --- a/src/plugins/platforms/qnx/qqnxintegration.h +++ b/src/plugins/platforms/qnx/qqnxintegration.h @@ -113,7 +113,7 @@ public: #if !defined(QT_NO_CLIPBOARD) QPlatformClipboard *clipboard() const override; #endif -#if !defined(QT_NO_DRAGANDDROP) +#if QT_CONFIG(draganddrop) QPlatformDrag *drag() const override; #endif QVariant styleHint(StyleHint hint) const override; @@ -158,7 +158,7 @@ private: mutable QQnxClipboard* m_clipboard; #endif QQnxAbstractNavigator *m_navigator; -#if !defined(QT_NO_DRAGANDDROP) +#if QT_CONFIG(draganddrop) QSimpleDrag *m_drag; #endif static QQnxWindowMapper ms_windowMapper; diff --git a/src/plugins/platforms/windows/qwindowsdrag.cpp b/src/plugins/platforms/windows/qwindowsdrag.cpp index 7d9c8c3df8..79aef99552 100644 --- a/src/plugins/platforms/windows/qwindowsdrag.cpp +++ b/src/plugins/platforms/windows/qwindowsdrag.cpp @@ -56,6 +56,7 @@ #include <QtGui/qrasterwindow.h> #include <QtGui/qguiapplication.h> #include <qpa/qwindowsysteminterface_p.h> +#include <QtGui/private/qdnd_p.h> #include <QtGui/private/qguiapplication_p.h> #include <QtGui/private/qhighdpiscaling_p.h> diff --git a/src/plugins/platforms/windows/qwindowsdrag.h b/src/plugins/platforms/windows/qwindowsdrag.h index 4e13216e73..94f6e682da 100644 --- a/src/plugins/platforms/windows/qwindowsdrag.h +++ b/src/plugins/platforms/windows/qwindowsdrag.h @@ -45,6 +45,7 @@ #include <qpa/qplatformdrag.h> #include <QtGui/qpixmap.h> +#include <QtGui/qdrag.h> struct IDropTargetHelper; diff --git a/src/plugins/platforms/windows/qwindowsintegration.cpp b/src/plugins/platforms/windows/qwindowsintegration.cpp index 15ccf99f41..365198ff17 100644 --- a/src/plugins/platforms/windows/qwindowsintegration.cpp +++ b/src/plugins/platforms/windows/qwindowsintegration.cpp @@ -552,7 +552,7 @@ QPlatformDrag *QWindowsIntegration::drag() const { return &d->m_drag; } -# endif // !QT_NO_DRAGANDDROP +# endif // QT_CONFIG(draganddrop) #endif // !QT_NO_CLIPBOARD QPlatformInputContext * QWindowsIntegration::inputContext() const diff --git a/src/plugins/platforms/windows/qwindowsinternalmimedata.h b/src/plugins/platforms/windows/qwindowsinternalmimedata.h index c391e81969..dbc1ea3922 100644 --- a/src/plugins/platforms/windows/qwindowsinternalmimedata.h +++ b/src/plugins/platforms/windows/qwindowsinternalmimedata.h @@ -42,7 +42,7 @@ #include <QtCore/qt_windows.h> -#include <QtGui/private/qdnd_p.h> // QInternalMime +#include <QtGui/private/qinternalmimedata_p.h> #include <QtCore/qvariant.h> QT_BEGIN_NAMESPACE diff --git a/src/plugins/platforms/windows/qwindowsmime.cpp b/src/plugins/platforms/windows/qwindowsmime.cpp index cac6f5dafc..cb8e3dc222 100644 --- a/src/plugins/platforms/windows/qwindowsmime.cpp +++ b/src/plugins/platforms/windows/qwindowsmime.cpp @@ -40,7 +40,7 @@ #include "qwindowsmime.h" #include "qwindowscontext.h" -#include <QtGui/private/qdnd_p.h> +#include <QtGui/private/qinternalmimedata_p.h> #include <QtCore/qbytearraymatcher.h> #include <QtCore/qtextcodec.h> #include <QtCore/qmap.h> @@ -1255,7 +1255,7 @@ bool QBuiltInMimes::convertFromMime(const FORMATETC &formatetc, const QMimeData } else { #if QT_CONFIG(draganddrop) data = QInternalMimeData::renderDataHelper(outFormats.value(getCf(formatetc)), mimeData); -#endif //QT_NO_DRAGANDDROP +#endif // QT_CONFIG(draganddrop) } return setData(data, pmedium); } @@ -1363,7 +1363,7 @@ bool QLastResortMimes::canConvertFromMime(const FORMATETC &formatetc, const QMim Q_UNUSED(formatetc); return formatetc.tymed & TYMED_HGLOBAL && formats.contains(formatetc.cfFormat); -#endif //QT_NO_DRAGANDDROP +#endif // QT_CONFIG(draganddrop) } bool QLastResortMimes::convertFromMime(const FORMATETC &formatetc, const QMimeData *mimeData, STGMEDIUM * pmedium) const @@ -1376,7 +1376,7 @@ bool QLastResortMimes::convertFromMime(const FORMATETC &formatetc, const QMimeDa Q_UNUSED(formatetc); Q_UNUSED(pmedium); return false; -#endif //QT_NO_DRAGANDDROP +#endif // QT_CONFIG(draganddrop) } QVector<FORMATETC> QLastResortMimes::formatsForMime(const QString &mimeType, const QMimeData * /*mimeData*/) const @@ -1484,7 +1484,7 @@ QString QLastResortMimes::mimeForFormat(const FORMATETC &formatetc) const format = clipFormat; } } -#endif //QT_NO_DRAGANDDROP +#endif // QT_CONFIG(draganddrop) } return format; @@ -1559,7 +1559,7 @@ QVector<FORMATETC> QWindowsMimeConverter::allFormatsForMime(const QMimeData *mim { ensureInitialized(); QVector<FORMATETC> formatics; -#ifdef QT_NO_DRAGANDDROP +#if !QT_CONFIG(draganddrop) Q_UNUSED(mimeData); #else formatics.reserve(20); @@ -1568,7 +1568,7 @@ QVector<FORMATETC> QWindowsMimeConverter::allFormatsForMime(const QMimeData *mim for (int i = m_mimes.size() - 1; i >= 0; --i) formatics += m_mimes.at(i)->formatsForMime(formats.at(f), mimeData); } -#endif //QT_NO_DRAGANDDROP +#endif // QT_CONFIG(draganddrop) return formatics; } diff --git a/src/plugins/platforms/windows/qwindowsnativeinterface.cpp b/src/plugins/platforms/windows/qwindowsnativeinterface.cpp index 11e514390a..da6f13d01a 100644 --- a/src/plugins/platforms/windows/qwindowsnativeinterface.cpp +++ b/src/plugins/platforms/windows/qwindowsnativeinterface.cpp @@ -277,6 +277,8 @@ QFunctionPointer QWindowsNativeInterface::platformFunction(const QByteArray &fun return QFunctionPointer(QWindowsWindow::setTouchWindowTouchTypeStatic); else if (function == QWindowsWindowFunctions::setHasBorderInFullScreenIdentifier()) return QFunctionPointer(QWindowsWindow::setHasBorderInFullScreenStatic); + else if (function == QWindowsWindowFunctions::setWindowActivationBehaviorIdentifier()) + return QFunctionPointer(QWindowsNativeInterface::setWindowActivationBehavior); else if (function == QWindowsWindowFunctions::isTabletModeIdentifier()) return QFunctionPointer(QWindowsNativeInterface::isTabletMode); return nullptr; diff --git a/src/plugins/platforms/windows/qwindowswindow.cpp b/src/plugins/platforms/windows/qwindowswindow.cpp index 5951821462..ecd814ab5d 100644 --- a/src/plugins/platforms/windows/qwindowswindow.cpp +++ b/src/plugins/platforms/windows/qwindowswindow.cpp @@ -1278,7 +1278,7 @@ void QWindowsWindow::setDropSiteEnabled(bool dropEnabled) RevokeDragDrop(m_data.hwnd); m_dropTarget = 0; } -#endif // !QT_NO_CLIPBOARD && !QT_NO_DRAGANDDROP +#endif // QT_CONFIG(clipboard) && QT_CONFIG(draganddrop) } // Returns topmost QWindowsWindow ancestor even if there are embedded windows in the chain. @@ -2241,6 +2241,15 @@ void QWindowsWindow::requestActivateWindow() foregroundThread = GetWindowThreadProcessId(foregroundWindow, NULL); if (foregroundThread && foregroundThread != currentThread) attached = AttachThreadInput(foregroundThread, currentThread, TRUE) == TRUE; + if (attached) { + if (!window()->flags().testFlag(Qt::WindowStaysOnBottomHint) + && !window()->flags().testFlag(Qt::WindowStaysOnTopHint) + && window()->type() != Qt::ToolTip) { + const UINT swpFlags = SWP_NOMOVE | SWP_NOSIZE | SWP_NOOWNERZORDER; + SetWindowPos(m_data.hwnd, HWND_TOPMOST, 0, 0, 0, 0, swpFlags); + SetWindowPos(m_data.hwnd, HWND_NOTOPMOST, 0, 0, 0, 0, swpFlags); + } + } } } SetForegroundWindow(m_data.hwnd); diff --git a/src/plugins/platforms/winrt/qwinrtdrag.h b/src/plugins/platforms/winrt/qwinrtdrag.h index 2371201507..3868c9f015 100644 --- a/src/plugins/platforms/winrt/qwinrtdrag.h +++ b/src/plugins/platforms/winrt/qwinrtdrag.h @@ -41,7 +41,8 @@ #include <QtCore/QLoggingCategory> #include <QtCore/QMimeData> -#include <QtGui/private/qdnd_p.h> // QInternalMime +#include <QtGui/private/qdnd_p.h> +#include <QtGui/private/qinternalmimedata_p.h> #include <wrl.h> diff --git a/src/plugins/platforms/winrt/qwinrtintegration.cpp b/src/plugins/platforms/winrt/qwinrtintegration.cpp index eae043f3a7..4f37583bed 100644 --- a/src/plugins/platforms/winrt/qwinrtintegration.cpp +++ b/src/plugins/platforms/winrt/qwinrtintegration.cpp @@ -47,7 +47,7 @@ #include "qwinrteglcontext.h" #include "qwinrttheme.h" #include "qwinrtclipboard.h" -#ifndef QT_NO_DRAGANDDROP +#if QT_CONFIG(draganddrop) #include "qwinrtdrag.h" #endif #if QT_CONFIG(accessibility) @@ -317,12 +317,12 @@ QPlatformClipboard *QWinRTIntegration::clipboard() const return d->clipboard; } -#ifndef QT_NO_DRAGANDDROP +#if QT_CONFIG(draganddrop) QPlatformDrag *QWinRTIntegration::drag() const { return QWinRTDrag::instance(); } -#endif // QT_NO_DRAGANDDROP +#endif // QT_CONFIG(draganddrop) #if QT_CONFIG(accessibility) QPlatformAccessibility *QWinRTIntegration::accessibility() const diff --git a/src/plugins/platforms/winrt/qwinrtintegration.h b/src/plugins/platforms/winrt/qwinrtintegration.h index adc7620727..7c83e27c26 100644 --- a/src/plugins/platforms/winrt/qwinrtintegration.h +++ b/src/plugins/platforms/winrt/qwinrtintegration.h @@ -97,7 +97,7 @@ public: QPlatformInputContext *inputContext() const override; QPlatformServices *services() const override; QPlatformClipboard *clipboard() const override; -#ifndef QT_NO_DRAGANDDROP +#if QT_CONFIG(draganddrop) QPlatformDrag *drag() const override; #endif #if QT_CONFIG(accessibility) diff --git a/src/plugins/platforms/winrt/qwinrtscreen.cpp b/src/plugins/platforms/winrt/qwinrtscreen.cpp index a60d50bcc1..7e71b6faf1 100644 --- a/src/plugins/platforms/winrt/qwinrtscreen.cpp +++ b/src/plugins/platforms/winrt/qwinrtscreen.cpp @@ -42,7 +42,7 @@ #include "qwinrtbackingstore.h" #include "qwinrtinputcontext.h" #include "qwinrtcursor.h" -#ifndef QT_NO_DRAGANDDROP +#if QT_CONFIG(draganddrop) #include "qwinrtdrag.h" #endif #include "qwinrtwindow.h" @@ -568,7 +568,7 @@ QWinRTScreen::QWinRTScreen() hr = d->canvas.As(&uiElement); Q_ASSERT_SUCCEEDED(hr); -#ifndef QT_NO_DRAGANDDROP +#if QT_CONFIG(draganddrop) QWinRTDrag::instance()->setUiElement(uiElement); #endif hr = window->put_Content(uiElement.Get()); @@ -852,7 +852,7 @@ void QWinRTScreen::addWindow(QWindow *window) handleExpose(); QWindowSystemInterface::flushWindowSystemEvents(QEventLoop::ExcludeUserInputEvents); -#ifndef QT_NO_DRAGANDDROP +#if QT_CONFIG(draganddrop) QWinRTDrag::instance()->setDropTarget(window); #endif } @@ -872,7 +872,7 @@ void QWinRTScreen::removeWindow(QWindow *window) if (wasTopWindow && type != Qt::Popup && type != Qt::ToolTip && type != Qt::Tool) QWindowSystemInterface::handleWindowActivated(nullptr, Qt::OtherFocusReason); QWindowSystemInterface::flushWindowSystemEvents(QEventLoop::ExcludeUserInputEvents); -#ifndef QT_NO_DRAGANDDROP +#if QT_CONFIG(draganddrop) if (wasTopWindow) QWinRTDrag::instance()->setDropTarget(topWindow()); #endif diff --git a/src/plugins/platforms/winrt/winrt.pro b/src/plugins/platforms/winrt/winrt.pro index 167c5b0448..6a847465e4 100644 --- a/src/plugins/platforms/winrt/winrt.pro +++ b/src/plugins/platforms/winrt/winrt.pro @@ -16,7 +16,6 @@ SOURCES = \ qwinrtcanvas.cpp \ qwinrtclipboard.cpp \ qwinrtcursor.cpp \ - qwinrtdrag.cpp \ qwinrteglcontext.cpp \ qwinrteventdispatcher.cpp \ qwinrtfiledialoghelper.cpp \ @@ -35,7 +34,6 @@ HEADERS = \ qwinrtcanvas.h \ qwinrtclipboard.h \ qwinrtcursor.h \ - qwinrtdrag.h \ qwinrteglcontext.h \ qwinrteventdispatcher.h \ qwinrtfiledialoghelper.h \ @@ -55,9 +53,9 @@ WINRT_SDK_VERSION = $$member($$list($$split(WINRT_SDK_VERSION_STRING, .)), 2) lessThan(WINRT_SDK_VERSION, 14322): DEFINES += QT_WINRT_LIMITED_DRAGANDDROP greaterThan(WINRT_SDK_VERSION, 14393): DEFINES += QT_WINRT_DISABLE_PHONE_COLORS -contains(DEFINES, QT_NO_DRAGANDDROP) { - SOURCES -= qwinrtdrag.cpp - HEADERS -= qwinrtdrag.h +qtConfig(draganddrop) { + SOURCES += qwinrtdrag.cpp + HEADERS += qwinrtdrag.h } qtConfig(accessibility): include($$PWD/uiautomation/uiautomation.pri) diff --git a/src/plugins/platforms/xcb/qxcbconnection.cpp b/src/plugins/platforms/xcb/qxcbconnection.cpp index 7d59496db3..1342a82e6e 100644 --- a/src/plugins/platforms/xcb/qxcbconnection.cpp +++ b/src/plugins/platforms/xcb/qxcbconnection.cpp @@ -46,7 +46,9 @@ #include "qxcbscreen.h" #include "qxcbwindow.h" #include "qxcbclipboard.h" +#if QT_CONFIG(draganddrop) #include "qxcbdrag.h" +#endif #include "qxcbwmsupport.h" #include "qxcbnativeinterface.h" #include "qxcbintegration.h" @@ -608,7 +610,7 @@ QXcbConnection::QXcbConnection(QXcbNativeInterface *nativeInterface, bool canGra #ifndef QT_NO_CLIPBOARD m_clipboard = new QXcbClipboard(this); #endif -#ifndef QT_NO_DRAGANDDROP +#if QT_CONFIG(draganddrop) m_drag = new QXcbDrag(this); #endif @@ -652,7 +654,7 @@ QXcbConnection::~QXcbConnection() #ifndef QT_NO_CLIPBOARD delete m_clipboard; #endif -#ifndef QT_NO_DRAGANDDROP +#if QT_CONFIG(draganddrop) delete m_drag; #endif if (m_reader && m_reader->isRunning()) { @@ -1143,7 +1145,7 @@ void QXcbConnection::handleXcbEvent(xcb_generic_event_t *event) #if QT_CONFIG(draganddrop) || QT_CONFIG(clipboard) xcb_selection_request_event_t *sr = reinterpret_cast<xcb_selection_request_event_t *>(event); #endif -#ifndef QT_NO_DRAGANDDROP +#if QT_CONFIG(draganddrop) if (sr->selection == atom(QXcbAtom::XdndSelection)) m_drag->handleSelectionRequest(sr); else @@ -1779,7 +1781,7 @@ void QXcbConnection::handleClientMessageEvent(const xcb_client_message_event_t * if (event->format != 32) return; -#ifndef QT_NO_DRAGANDDROP +#if QT_CONFIG(draganddrop) if (event->type == atom(QXcbAtom::XdndStatus)) { drag()->handleStatus(event); } else if (event->type == atom(QXcbAtom::XdndFinished)) { diff --git a/src/plugins/platforms/xcb/qxcbconnection.h b/src/plugins/platforms/xcb/qxcbconnection.h index 6bf4ad0b6c..7bacbad40b 100644 --- a/src/plugins/platforms/xcb/qxcbconnection.h +++ b/src/plugins/platforms/xcb/qxcbconnection.h @@ -411,7 +411,7 @@ public: #ifndef QT_NO_CLIPBOARD QXcbClipboard *clipboard() const { return m_clipboard; } #endif -#ifndef QT_NO_DRAGANDDROP +#if QT_CONFIG(draganddrop) QXcbDrag *drag() const { return m_drag; } #endif @@ -653,7 +653,7 @@ private: #ifndef QT_NO_CLIPBOARD QXcbClipboard *m_clipboard = nullptr; #endif -#ifndef QT_NO_DRAGANDDROP +#if QT_CONFIG(draganddrop) QXcbDrag *m_drag = nullptr; #endif QScopedPointer<QXcbWMSupport> m_wmSupport; diff --git a/src/plugins/platforms/xcb/qxcbdrag.cpp b/src/plugins/platforms/xcb/qxcbdrag.cpp index 10a827cfd9..fb2049f87f 100644 --- a/src/plugins/platforms/xcb/qxcbdrag.cpp +++ b/src/plugins/platforms/xcb/qxcbdrag.cpp @@ -63,8 +63,6 @@ QT_BEGIN_NAMESPACE -#ifndef QT_NO_DRAGANDDROP - //#define DND_DEBUG #ifdef DND_DEBUG #define DEBUG qDebug @@ -1321,6 +1319,4 @@ QStringList QXcbDropData::formats_sys() const return formats; } -#endif // QT_NO_DRAGANDDROP - QT_END_NAMESPACE diff --git a/src/plugins/platforms/xcb/qxcbdrag.h b/src/plugins/platforms/xcb/qxcbdrag.h index 138625476a..fc012b4938 100644 --- a/src/plugins/platforms/xcb/qxcbdrag.h +++ b/src/plugins/platforms/xcb/qxcbdrag.h @@ -55,9 +55,9 @@ #include <QtCore/QDebug> -QT_BEGIN_NAMESPACE +QT_REQUIRE_CONFIG(draganddrop); -#ifndef QT_NO_DRAGANDDROP +QT_BEGIN_NAMESPACE class QWindow; class QPlatformWindow; @@ -175,8 +175,6 @@ private: }; Q_DECLARE_TYPEINFO(QXcbDrag::Transaction, Q_MOVABLE_TYPE); -#endif // QT_NO_DRAGANDDROP - QT_END_NAMESPACE #endif diff --git a/src/plugins/platforms/xcb/qxcbintegration.cpp b/src/plugins/platforms/xcb/qxcbintegration.cpp index 9e553666b2..b8a0e85465 100644 --- a/src/plugins/platforms/xcb/qxcbintegration.cpp +++ b/src/plugins/platforms/xcb/qxcbintegration.cpp @@ -46,7 +46,9 @@ #include "qxcbbackingstore.h" #include "qxcbnativeinterface.h" #include "qxcbclipboard.h" +#if QT_CONFIG(draganddrop) #include "qxcbdrag.h" +#endif #include "qxcbglintegration.h" #ifndef QT_NO_SESSIONMANAGER @@ -376,7 +378,7 @@ QPlatformClipboard *QXcbIntegration::clipboard() const } #endif -#ifndef QT_NO_DRAGANDDROP +#if QT_CONFIG(draganddrop) QPlatformDrag *QXcbIntegration::drag() const { return m_connections.at(0)->drag(); diff --git a/src/plugins/platforms/xcb/qxcbintegration.h b/src/plugins/platforms/xcb/qxcbintegration.h index 186b6c5ddd..69e49cb7f6 100644 --- a/src/plugins/platforms/xcb/qxcbintegration.h +++ b/src/plugins/platforms/xcb/qxcbintegration.h @@ -84,7 +84,7 @@ public: #ifndef QT_NO_CLIPBOARD QPlatformClipboard *clipboard() const override; #endif -#ifndef QT_NO_DRAGANDDROP +#if QT_CONFIG(draganddrop) QPlatformDrag *drag() const override; #endif diff --git a/src/plugins/platforms/xcb/qxcbmime.cpp b/src/plugins/platforms/xcb/qxcbmime.cpp index 58e2e8c0e6..7170d259fd 100644 --- a/src/plugins/platforms/xcb/qxcbmime.cpp +++ b/src/plugins/platforms/xcb/qxcbmime.cpp @@ -46,8 +46,6 @@ QT_BEGIN_NAMESPACE -#if !(defined(QT_NO_DRAGANDDROP) && defined(QT_NO_CLIPBOARD)) - QXcbMime::QXcbMime() : QInternalMimeData() { } @@ -320,6 +318,4 @@ xcb_atom_t QXcbMime::mimeAtomForFormat(QXcbConnection *connection, const QString return 0; } -#endif // !(defined(QT_NO_DRAGANDDROP) && defined(QT_NO_CLIPBOARD)) - QT_END_NAMESPACE diff --git a/src/plugins/platforms/xcb/qxcbmime.h b/src/plugins/platforms/xcb/qxcbmime.h index 561631a377..f2136ec9f4 100644 --- a/src/plugins/platforms/xcb/qxcbmime.h +++ b/src/plugins/platforms/xcb/qxcbmime.h @@ -40,7 +40,7 @@ #ifndef QXCBMIME_H #define QXCBMIME_H -#include <private/qdnd_p.h> +#include <QtGui/private/qinternalmimedata_p.h> #include <QtGui/QClipboard> @@ -49,8 +49,6 @@ QT_BEGIN_NAMESPACE -#if !(defined(QT_NO_DRAGANDDROP) && defined(QT_NO_CLIPBOARD)) - class QXcbMime : public QInternalMimeData { Q_OBJECT public: @@ -67,9 +65,6 @@ public: const QVector<xcb_atom_t> &atoms, QByteArray *requestedEncoding); }; -#endif // !(defined(QT_NO_DRAGANDDROP) && defined(QT_NO_CLIPBOARD)) - - QT_END_NAMESPACE #endif // QXCBMIME_H diff --git a/src/plugins/platforms/xcb/qxcbwindow.cpp b/src/plugins/platforms/xcb/qxcbwindow.cpp index d757e2dbf8..97dac4cfc1 100644 --- a/src/plugins/platforms/xcb/qxcbwindow.cpp +++ b/src/plugins/platforms/xcb/qxcbwindow.cpp @@ -49,7 +49,9 @@ #include "qxcbintegration.h" #include "qxcbconnection.h" #include "qxcbscreen.h" +#if QT_CONFIG(draganddrop) #include "qxcbdrag.h" +#endif #include "qxcbkeyboard.h" #include "qxcbimage.h" #include "qxcbwmsupport.h" @@ -539,7 +541,7 @@ void QXcbWindow::create() XSync(static_cast<Display*>(platformScreen->connection()->xlib_display()), false); #endif -#ifndef QT_NO_DRAGANDDROP +#if QT_CONFIG(draganddrop) connection()->drag()->dndEnable(this, true); #endif @@ -1981,7 +1983,7 @@ void QXcbWindow::handleClientMessageEvent(const xcb_client_message_event_t *even qCWarning(lcQpaXcb, "Unhandled WM_PROTOCOLS (%s)", connection()->atomName(protocolAtom).constData()); } -#ifndef QT_NO_DRAGANDDROP +#if QT_CONFIG(draganddrop) } else if (event->type == atom(QXcbAtom::XdndEnter)) { connection()->drag()->handleEnter(this, event); } else if (event->type == atom(QXcbAtom::XdndPosition)) { diff --git a/src/plugins/platforms/xcb/xcb_qpa_lib.pro b/src/plugins/platforms/xcb/xcb_qpa_lib.pro index d71aacbf96..9390d04983 100644 --- a/src/plugins/platforms/xcb/xcb_qpa_lib.pro +++ b/src/plugins/platforms/xcb/xcb_qpa_lib.pro @@ -19,7 +19,6 @@ SOURCES = \ qxcbintegration.cpp \ qxcbkeyboard.cpp \ qxcbmime.cpp \ - qxcbdrag.cpp \ qxcbscreen.cpp \ qxcbwindow.cpp \ qxcbbackingstore.cpp \ @@ -35,7 +34,6 @@ HEADERS = \ qxcbconnection.h \ qxcbintegration.h \ qxcbkeyboard.h \ - qxcbdrag.h \ qxcbmime.h \ qxcbobject.h \ qxcbscreen.h \ @@ -49,6 +47,11 @@ HEADERS = \ qxcbsystemtraytracker.h \ qxcbxkbcommon.h +qtConfig(draganddrop) { + SOURCES += qxcbdrag.cpp + HEADERS += qxcbdrag.h +} + load(qt_build_paths) DEFINES += QT_BUILD_XCB_PLUGIN diff --git a/src/plugins/sqldrivers/ibase/qsql_ibase.cpp b/src/plugins/sqldrivers/ibase/qsql_ibase.cpp index 6fbdef2695..484dad6e1d 100644 --- a/src/plugins/sqldrivers/ibase/qsql_ibase.cpp +++ b/src/plugins/sqldrivers/ibase/qsql_ibase.cpp @@ -1845,9 +1845,9 @@ bool QIBaseDriver::subscribeToNotification(const QString &name) eBuffer->bufferLength, eBuffer->eventBuffer, #if defined (FB_API_VER) && FB_API_VER >= 20 - (ISC_EVENT_CALLBACK)qEventCallback, + reinterpret_cast<ISC_EVENT_CALLBACK>(qEventCallback), #else - (isc_callback)qEventCallback, + reinterpret_cast<isc_callback>(qEventCallback), #endif eBuffer->resultBuffer); @@ -1925,9 +1925,9 @@ void QIBaseDriver::qHandleEventNotification(void *updatedResultBuffer) eBuffer->bufferLength, eBuffer->eventBuffer, #if defined (FB_API_VER) && FB_API_VER >= 20 - (ISC_EVENT_CALLBACK)qEventCallback, + reinterpret_cast<ISC_EVENT_CALLBACK>(qEventCallback), #else - (isc_callback)qEventCallback, + reinterpret_cast<isc_callback>(qEventCallback), #endif eBuffer->resultBuffer); if (Q_UNLIKELY(status[0] == 1 && status[1])) { diff --git a/src/plugins/styles/mac/qmacstyle_mac.mm b/src/plugins/styles/mac/qmacstyle_mac.mm index dc66960ae0..bb5f25e4d7 100644 --- a/src/plugins/styles/mac/qmacstyle_mac.mm +++ b/src/plugins/styles/mac/qmacstyle_mac.mm @@ -1665,13 +1665,13 @@ QRectF QMacStylePrivate::comboboxEditBounds(const QRectF &outerBounds, const Coc } else if (cw.type == Button_PopupButton) { switch (cw.size) { case QStyleHelper::SizeLarge: - ret.adjust(14, 1, -23, -4); + ret.adjust(10, 1, -23, -4); break; case QStyleHelper::SizeSmall: - ret.adjust(13, 4, -20, -3); + ret.adjust(10, 4, -20, -3); break; case QStyleHelper::SizeMini: - ret.adjust(12, 0, -19, 0); + ret.adjust(9, 0, -19, 0); ret.setHeight(13); break; default: @@ -2816,7 +2816,8 @@ void QMacStyle::drawPrimitive(PrimitiveElement pe, const QStyleOption *opt, QPai #if QT_CONFIG(toolbutton) if (const QToolButton *tb = qobject_cast<const QToolButton *>(w)) { // When stroking the arrow, make sure it fits in the tool button - if (tb->arrowType() != Qt::NoArrow) + if (tb->arrowType() != Qt::NoArrow + || tb->popupMode() == QToolButton::MenuButtonPopup) halfSize -= penWidth; } #endif @@ -5855,11 +5856,11 @@ QRect QMacStyle::subControlRect(ComplexControl cc, const QStyleOptionComplex *op #endif case CC_ToolButton: ret = QCommonStyle::subControlRect(cc, opt, sc, widget); - if (sc == SC_ToolButtonMenu + if (sc == SC_ToolButtonMenu) { #ifndef QT_NO_ACCESSIBILITY - && !QStyleHelper::hasAncestor(opt->styleObject, QAccessible::ToolBar) + if (QStyleHelper::hasAncestor(opt->styleObject, QAccessible::ToolBar)) + ret.adjust(-toolButtonArrowMargin, 0, 0, 0); #endif - ) { ret.adjust(-1, 0, 0, 0); } break; @@ -6097,6 +6098,9 @@ QSize QMacStyle::sizeFromContents(ContentsType ct, const QStyleOption *opt, case CT_ToolButton: sz.rwidth() += 10; sz.rheight() += 10; + if (const auto *tb = qstyleoption_cast<const QStyleOptionToolButton *>(opt)) + if (tb->features & QStyleOptionToolButton::Menu) + sz.rwidth() += toolButtonArrowMargin; return sz; case CT_ComboBox: if (const auto *cb = qstyleoption_cast<const QStyleOptionComboBox *>(opt)) { |