diff options
author | Morten Johan Sørvig <morten.sorvig@digia.com> | 2014-02-13 14:14:44 +0100 |
---|---|---|
committer | The Qt Project <gerrit-noreply@qt-project.org> | 2014-03-20 22:12:47 +0100 |
commit | 3b8b47db6aaeb333f106cff57cc712b01d828302 (patch) | |
tree | ddc23c12694293279f0fb5aba33f23d5b280e13d /src/widgets/widgets/qtoolbarlayout.cpp | |
parent | 2bc7a40048ada41c59ddac0988bb2e04c227a18d (diff) |
Set unified toolbar height accurately.
Add registerContentBorderArea() to the Cocoa native
interface which allows registering multiple "unified
toolbar" areas for each window.
Use this function in QToolBarLayout::setGeometry()
to register the area for each TopToolBarArea toolbar.
Task-number: QTBUG-36700
Change-Id: I52efcc5662556bb94f25f504be3710d0491f79b9
Reviewed-by: Jake Petroules <jake.petroules@petroules.com>
Reviewed-by: Gabriel de Dietrich <gabriel.dedietrich@digia.com>
Reviewed-by: Denis Dzyubenko <denis@ddenis.info>
Diffstat (limited to 'src/widgets/widgets/qtoolbarlayout.cpp')
-rw-r--r-- | src/widgets/widgets/qtoolbarlayout.cpp | 37 |
1 files changed, 37 insertions, 0 deletions
diff --git a/src/widgets/widgets/qtoolbarlayout.cpp b/src/widgets/widgets/qtoolbarlayout.cpp index fe919feba9..020d180778 100644 --- a/src/widgets/widgets/qtoolbarlayout.cpp +++ b/src/widgets/widgets/qtoolbarlayout.cpp @@ -39,6 +39,7 @@ ** ****************************************************************************/ +#include <qapplication.h> #include <qaction.h> #include <qwidgetaction.h> #include <qtoolbar.h> @@ -47,6 +48,9 @@ #include <qmenu.h> #include <qdebug.h> #include <qmath.h> +#ifdef Q_OS_OSX +#include <qpa/qplatformnativeinterface.h> +#endif #include "qmainwindowlayout_p.h" #include "qtoolbarextension_p.h" @@ -341,6 +345,37 @@ static bool defaultWidgetAction(QToolBarItem *item) return a != 0 && a->defaultWidget() == item->widget(); } +void QToolBarLayout::updateMacBorderMetrics() +{ +#ifdef Q_OS_OSX + QToolBar *tb = qobject_cast<QToolBar*>(parentWidget()); + if (!tb) + return; + + QRect rect = geometry(); + + QMainWindow *mainWindow = qobject_cast<QMainWindow*>(tb->parentWidget()); + if (!mainWindow || !mainWindow->isWindow() || !mainWindow->unifiedTitleAndToolBarOnMac()) + return; + + QPlatformNativeInterface *nativeInterface = QApplication::platformNativeInterface(); + QPlatformNativeInterface::NativeResourceForIntegrationFunction function = + nativeInterface->nativeResourceFunctionForIntegration("registerContentBorderArea"); + if (!function) + return; // Not Cocoa platform plugin. + + QPoint upper = tb->mapToParent(rect.topLeft()); + QPoint lower = tb->mapToParent(rect.bottomLeft() + QPoint(0, 1)); + + typedef void (*RegisterContentBorderAreaFunction)(QWindow *window, void *identifier, int upper, int lower); + if (mainWindow->toolBarArea(tb) == Qt::TopToolBarArea) { + (reinterpret_cast<RegisterContentBorderAreaFunction>(function))(tb->window()->windowHandle(), this, upper.y(), lower.y()); + } else { + (reinterpret_cast<RegisterContentBorderAreaFunction>(function))(tb->window()->windowHandle(), this, 0, 0); + } +#endif +} + void QToolBarLayout::setGeometry(const QRect &rect) { QToolBar *tb = qobject_cast<QToolBar*>(parentWidget()); @@ -355,6 +390,8 @@ void QToolBarLayout::setGeometry(const QRect &rect) QLayout::setGeometry(rect); + updateMacBorderMetrics(); + bool ranOutOfSpace = false; if (!animating) ranOutOfSpace = layoutActions(rect.size()); |