summaryrefslogtreecommitdiffstats
path: root/src/widgets
diff options
context:
space:
mode:
authorLiang Qi <liang.qi@qt.io>2019-04-10 17:33:14 +0000
committerThe Qt Project <gerrit-noreply@qt-project.org>2019-04-10 17:33:14 +0000
commit63e88f60a769f2535945db0e1cabb9815ff45a77 (patch)
treecea2359bc9b5b4e3acce7aeca59a2f9b5d251bcb /src/widgets
parent0bdded64accc3f654b2d12d9bfaf64f842cedf26 (diff)
parentff88e20b8328b6aad5b787aacc5c39da563a67b1 (diff)
Merge "Merge remote-tracking branch 'origin/5.12' into 5.13" into refs/staging/5.13
Diffstat (limited to 'src/widgets')
-rw-r--r--src/widgets/itemviews/qtableview.cpp25
-rw-r--r--src/widgets/styles/qstyle.cpp8
-rw-r--r--src/widgets/styles/qstyle_p.h3
-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
6 files changed, 31 insertions, 48 deletions
diff --git a/src/widgets/itemviews/qtableview.cpp b/src/widgets/itemviews/qtableview.cpp
index dd43c6d3e4..d4a6433c4d 100644
--- a/src/widgets/itemviews/qtableview.cpp
+++ b/src/widgets/itemviews/qtableview.cpp
@@ -1581,29 +1581,6 @@ void QTableView::paintEvent(QPaintEvent *event)
colp += columnWidth(col) - gridSize;
painter.drawLine(colp, dirtyArea.top(), colp, dirtyArea.bottom());
}
-
- //draw the top & left grid lines if the headers are not visible.
- //We do update this line when subsequent scroll happen (see scrollContentsBy)
- if (horizontalHeader->isHidden() && top == 0) {
- const int row = verticalHeader->logicalIndex(top);
- if (!verticalHeader->isSectionHidden(row)) {
- const int rowY = rowViewportPosition(row) + offset.y();
- if (rowY == dirtyArea.top())
- painter.drawLine(dirtyArea.left(), rowY, dirtyArea.right(), rowY);
- }
- }
- if (verticalHeader->isHidden() && left == 0) {
- const int col = horizontalHeader->logicalIndex(left);
- if (!horizontalHeader->isSectionHidden(col)) {
- int colX = columnViewportPosition(col) + offset.x();
- if (!isLeftToRight())
- colX += columnWidth(left) - 1;
- if (isLeftToRight() && colX == dirtyArea.left())
- painter.drawLine(colX, dirtyArea.top(), colX, dirtyArea.bottom());
- if (!isLeftToRight() && colX == dirtyArea.right())
- painter.drawLine(colX, dirtyArea.top(), colX, dirtyArea.bottom());
- }
- }
painter.setPen(old);
}
}
@@ -1878,7 +1855,7 @@ QModelIndex QTableView::moveCursor(CursorAction cursorAction, Qt::KeyboardModifi
visualColumn = d->nextActiveVisualColumn(visualRow, right, -1,
QTableViewPrivate::SearchDirection::Decreasing);
if (modifiers & Qt::ControlModifier)
- visualRow = d->nextActiveVisualRow(bottom, current.column(), -1,
+ visualRow = d->nextActiveVisualRow(bottom, visualColumn, -1,
QTableViewPrivate::SearchDirection::Decreasing);
break;
case MovePageUp: {
diff --git a/src/widgets/styles/qstyle.cpp b/src/widgets/styles/qstyle.cpp
index 97ec1d3f19..ec5b6df6b3 100644
--- a/src/widgets/styles/qstyle.cpp
+++ b/src/widgets/styles/qstyle.cpp
@@ -46,6 +46,7 @@
#include "qstyleoption.h"
#include "private/qstyle_p.h"
#include "private/qguiapplication_p.h"
+#include <qpa/qplatformtheme.h>
#ifndef QT_NO_DEBUG
#include "qdebug.h"
#endif
@@ -2447,6 +2448,13 @@ void QStyle::setProxy(QStyle *style)
d->proxyStyle = style;
}
+//Windows and KDE allow menus to cover the taskbar, while GNOME and macOS don't
+bool QStylePrivate::useFullScreenForPopup()
+{
+ auto theme = QGuiApplicationPrivate::platformTheme();
+ return theme && theme->themeHint(QPlatformTheme::UseFullScreenForPopupMenu).toBool();
+}
+
QT_END_NAMESPACE
#include "moc_qstyle.cpp"
diff --git a/src/widgets/styles/qstyle_p.h b/src/widgets/styles/qstyle_p.h
index cdea29f944..5bbde5fe17 100644
--- a/src/widgets/styles/qstyle_p.h
+++ b/src/widgets/styles/qstyle_p.h
@@ -67,6 +67,9 @@ class QStylePrivate: public QObjectPrivate
public:
inline QStylePrivate()
: layoutSpacingIndex(-1), proxyStyle(0) {}
+
+ static bool useFullScreenForPopup();
+
mutable int layoutSpacingIndex;
QStyle *proxyStyle;
};
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