QComboBox: Use platform theme hint to determine popup geometry.
authorFriedemann Kleint <Friedemann.Kleint@nokia.com>
Mon, 27 Feb 2012 16:09:43 +0000 (17:09 +0100)
committerQt by Nokia <qt-info@nokia.com>
Tue, 28 Feb 2012 08:12:03 +0000 (09:12 +0100)
Change-Id: I1f81be1394455715c5dfcd2d426758c4c7cd91fc
Reviewed-by: Bradley T. Hughes <bradley.hughes@nokia.com>
src/widgets/widgets/qcombobox.cpp
tests/auto/widgets/widgets/qcombobox/tst_qcombobox.cpp

index d6af8d6..c5f5d6e 100644 (file)
@@ -43,6 +43,7 @@
 
 #ifndef QT_NO_COMBOBOX
 #include <qstylepainter.h>
+#include <qplatformtheme_qpa.h>
 #include <qlineedit.h>
 #include <qapplication.h>
 #include <qdesktopwidget.h>
 #include <qtreeview.h>
 #include <qheaderview.h>
 #include <qmath.h>
+#include <private/qguiapplication_p.h>
 #include <private/qapplication_p.h>
 #include <private/qcombobox_p.h>
 #include <private/qabstractitemmodel_p.h>
 #include <private/qabstractscrollarea_p.h>
 #include <private/qsoftkeymanager_p.h>
 #include <qdebug.h>
-#ifdef Q_WS_X11
-#include <private/qt_x11_p.h>
-#endif
 #if defined(Q_WS_MAC) && !defined(QT_NO_EFFECTS) && !defined(QT_NO_STYLE_MAC)
 #include <private/qcore_mac_p.h>
 #include <QMacStyle>
@@ -219,16 +218,12 @@ void QComboBoxPrivate::_q_modelDestroyed()
 //Windows and KDE allows menus to cover the taskbar, while GNOME and Mac don't
 QRect QComboBoxPrivate::popupGeometry(int screen) const
 {
-#ifdef Q_WS_WIN
-    return QApplication::desktop()->screenGeometry(screen);
-#elif defined Q_WS_X11
-    if (X11->desktopEnvironment == DE_KDE)
-        return QApplication::desktop()->screenGeometry(screen);
-    else
-        return QApplication::desktop()->availableGeometry(screen);
-#else
-        return QApplication::desktop()->availableGeometry(screen);
-#endif
+    bool useFullScreenForPopupMenu = false;
+    if (const QPlatformTheme *theme = QGuiApplicationPrivate::platformTheme())
+        useFullScreenForPopupMenu = theme->themeHint(QPlatformTheme::UseFullScreenForPopupMenu).toBool();
+    return useFullScreenForPopupMenu ?
+           QApplication::desktop()->screenGeometry(screen) :
+           QApplication::desktop()->availableGeometry(screen);
 }
 
 bool QComboBoxPrivate::updateHoverControl(const QPoint &pos)
index 907a239..0fe9399 100644 (file)
@@ -43,6 +43,8 @@
 
 #include "qcombobox.h"
 #include <private/qcombobox_p.h>
+#include <private/qguiapplication_p.h>
+#include <qplatformtheme_qpa.h>
 
 #include <qfontcombobox.h>
 #include <qdesktopwidget.h>
@@ -1915,19 +1917,15 @@ void tst_QComboBox::itemListPosition()
     QWidget topLevel;
     QFontComboBox combo(&topLevel);
 
-    //the code to get the avaialbe screen space is copied from QComboBox code
+    //the code to get the available screen space is copied from QComboBox code
     const int scrNumber = QApplication::desktop()->screenNumber(&combo);
-    QRect screen;
-#ifdef Q_WS_WIN
-    screen = QApplication::desktop()->screenGeometry(scrNumber);
-#elif defined Q_WS_X11
-    if (X11->desktopEnvironment == DE_KDE)
-        screen = QApplication::desktop()->screenGeometry(scrNumber);
-    else
-        screen = QApplication::desktop()->availableGeometry(scrNumber);
-#else
-    screen = QApplication::desktop()->availableGeometry(scrNumber);
-#endif
+
+    bool useFullScreenForPopupMenu = false;
+    if (const QPlatformTheme *theme = QGuiApplicationPrivate::platformTheme())
+        useFullScreenForPopupMenu = theme->themeHint(QPlatformTheme::UseFullScreenForPopupMenu).toBool();
+    const QRect screen = useFullScreenForPopupMenu ?
+                         QApplication::desktop()->screenGeometry(scrNumber) :
+                         QApplication::desktop()->availableGeometry(scrNumber);
 
     combo.move(screen.width()-combo.sizeHint().width(), 0); //puts the combo to the top-right corner