summaryrefslogtreecommitdiffstats
path: root/src/widgets/widgets
diff options
context:
space:
mode:
Diffstat (limited to 'src/widgets/widgets')
-rw-r--r--src/widgets/widgets/qcombobox.cpp12
-rw-r--r--src/widgets/widgets/qmenu.cpp30
-rw-r--r--src/widgets/widgets/qmenu_p.h1
3 files changed, 19 insertions, 24 deletions
diff --git a/src/widgets/widgets/qcombobox.cpp b/src/widgets/widgets/qcombobox.cpp
index e38e1d7750..9a403e8eef 100644
--- a/src/widgets/widgets/qcombobox.cpp
+++ b/src/widgets/widgets/qcombobox.cpp
@@ -80,6 +80,7 @@
#if QT_CONFIG(effects)
# include <private/qeffects_p.h>
#endif
+#include <private/qstyle_p.h>
#ifndef QT_NO_ACCESSIBILITY
#include "qaccessible.h"
#endif
@@ -261,16 +262,11 @@ void QComboBoxPrivate::_q_modelDestroyed()
model = QAbstractItemModelPrivate::staticEmptyModel();
}
-
-//Windows and KDE allows menus to cover the taskbar, while GNOME and Mac don't
QRect QComboBoxPrivate::popupGeometry(int screen) const
{
- bool useFullScreenForPopupMenu = false;
- if (const QPlatformTheme *theme = QGuiApplicationPrivate::platformTheme())
- useFullScreenForPopupMenu = theme->themeHint(QPlatformTheme::UseFullScreenForPopupMenu).toBool();
- return useFullScreenForPopupMenu ?
- QDesktopWidgetPrivate::screenGeometry(screen) :
- QDesktopWidgetPrivate::availableGeometry(screen);
+ return QStylePrivate::useFullScreenForPopup()
+ ? QDesktopWidgetPrivate::screenGeometry(screen)
+ : QDesktopWidgetPrivate::availableGeometry(screen);
}
bool QComboBoxPrivate::updateHoverControl(const QPoint &pos)
diff --git a/src/widgets/widgets/qmenu.cpp b/src/widgets/widgets/qmenu.cpp
index 7dc67c8efe..14964a696d 100644
--- a/src/widgets/widgets/qmenu.cpp
+++ b/src/widgets/widgets/qmenu.cpp
@@ -78,6 +78,7 @@
#include <private/qguiapplication_p.h>
#include <qpa/qplatformtheme.h>
#include <private/qdesktopwidget_p.h>
+#include <private/qstyle_p.h>
QT_BEGIN_NAMESPACE
@@ -307,29 +308,26 @@ int QMenuPrivate::scrollerHeight() const
return qMax(QApplication::globalStrut().height(), q->style()->pixelMetric(QStyle::PM_MenuScrollerHeight, 0, q));
}
-//Windows and KDE allow menus to cover the taskbar, while GNOME and Mac don't
+// Windows and KDE allow menus to cover the taskbar, while GNOME and macOS
+// don't. Torn-off menus are again different
+inline bool QMenuPrivate::useFullScreenForPopup() const
+{
+ return !tornoff && QStylePrivate::useFullScreenForPopup();
+}
+
QRect QMenuPrivate::popupGeometry() const
{
Q_Q(const QMenu);
- if (!tornoff && // Torn-off menus are different
- QGuiApplicationPrivate::platformTheme() &&
- QGuiApplicationPrivate::platformTheme()->themeHint(QPlatformTheme::UseFullScreenForPopupMenu).toBool()) {
- return QDesktopWidgetPrivate::screenGeometry(q);
- } else {
- return QDesktopWidgetPrivate::availableGeometry(q);
- }
+ return useFullScreenForPopup()
+ ? QDesktopWidgetPrivate::screenGeometry(q)
+ : QDesktopWidgetPrivate::availableGeometry(q);
}
-//Windows and KDE allow menus to cover the taskbar, while GNOME and Mac don't
QRect QMenuPrivate::popupGeometry(int screen) const
{
- if (!tornoff && // Torn-off menus are different
- QGuiApplicationPrivate::platformTheme() &&
- QGuiApplicationPrivate::platformTheme()->themeHint(QPlatformTheme::UseFullScreenForPopupMenu).toBool()) {
- return QDesktopWidgetPrivate::screenGeometry(screen);
- } else {
- return QDesktopWidgetPrivate::availableGeometry(screen);
- }
+ return useFullScreenForPopup()
+ ? QDesktopWidgetPrivate::screenGeometry(screen)
+ : QDesktopWidgetPrivate::availableGeometry(screen);
}
QVector<QPointer<QWidget> > QMenuPrivate::calcCausedStack() const
diff --git a/src/widgets/widgets/qmenu_p.h b/src/widgets/widgets/qmenu_p.h
index 12521e7a36..1821181535 100644
--- a/src/widgets/widgets/qmenu_p.h
+++ b/src/widgets/widgets/qmenu_p.h
@@ -349,6 +349,7 @@ public:
void updateActionRects(const QRect &screen) const;
QRect popupGeometry() const;
QRect popupGeometry(int screen) const;
+ bool useFullScreenForPopup() const;
int getLastVisibleAction() const;
//selection