summaryrefslogtreecommitdiffstats
path: root/src/widgets
diff options
context:
space:
mode:
Diffstat (limited to 'src/widgets')
-rw-r--r--src/widgets/accessible/itemviews.cpp71
-rw-r--r--src/widgets/accessible/itemviews_p.h14
-rw-r--r--src/widgets/styles/qstylesheetstyle.cpp12
-rw-r--r--src/widgets/widgets/qmenu.cpp8
4 files changed, 24 insertions, 81 deletions
diff --git a/src/widgets/accessible/itemviews.cpp b/src/widgets/accessible/itemviews.cpp
index 7e3dfbd68db..cc3a230f9b4 100644
--- a/src/widgets/accessible/itemviews.cpp
+++ b/src/widgets/accessible/itemviews.cpp
@@ -44,7 +44,7 @@ int QAccessibleTable::logicalIndex(const QModelIndex &index) const
return -1;
#if QT_CONFIG(listview)
- if (m_role == QAccessible::List) {
+ if (role() == QAccessible::List) {
if (index.column() != qobject_cast<const QListView*>(view())->modelColumn())
return -1;
else
@@ -59,35 +59,10 @@ int QAccessibleTable::logicalIndex(const QModelIndex &index) const
}
}
-QAccessibleTable::QAccessibleTable(QWidget *w)
- : QAccessibleWidgetV2(w)
+QAccessibleTable::QAccessibleTable(QWidget *w, QAccessible::Role role)
+ : QAccessibleWidgetV2(w, role)
{
Q_ASSERT(view());
-
-#if QT_CONFIG(tableview)
- if (qobject_cast<const QTableView*>(view())) {
- m_role = QAccessible::Table;
- } else
-#endif
-#if QT_CONFIG(treeview)
- if (qobject_cast<const QTreeView*>(view())) {
- m_role = QAccessible::Tree;
- } else
-#endif
-#if QT_CONFIG(listview)
- if (qobject_cast<const QListView*>(view())) {
- m_role = QAccessible::List;
- } else
-#endif
- {
- // is this our best guess?
- m_role = QAccessible::Table;
- }
-}
-
-bool QAccessibleTable::isValid() const
-{
- return view() && !qt_widget_private(view())->data.in_destructor;
}
QAccessibleTable::~QAccessibleTable()
@@ -161,7 +136,7 @@ int QAccessibleTable::columnCount() const
if (!theModel)
return 0;
const int modelColumnCount = theModel->columnCount(theView->rootIndex());
- return m_role == QAccessible::List ? qMin(1, modelColumnCount) : modelColumnCount;
+ return role() == QAccessible::List ? qMin(1, modelColumnCount) : modelColumnCount;
}
int QAccessibleTable::rowCount() const
@@ -491,36 +466,6 @@ bool QAccessibleTable::clear()
}
-QAccessible::Role QAccessibleTable::role() const
-{
- return m_role;
-}
-
-QAccessible::State QAccessibleTable::state() const
-{
- QAccessible::State state;
- const auto *w = view();
-
- if (w->testAttribute(Qt::WA_WState_Visible) == false)
- state.invisible = true;
- if (w->focusPolicy() != Qt::NoFocus)
- state.focusable = true;
- if (w->hasFocus())
- state.focused = true;
- if (!w->isEnabled())
- state.disabled = true;
- if (w->isWindow()) {
- if (w->windowFlags() & Qt::WindowSystemMenuHint)
- state.movable = true;
- if (w->minimumSize() != w->maximumSize())
- state.sizeable = true;
- if (w->isActiveWindow())
- state.active = true;
- }
-
- return state;
-}
-
QAccessibleInterface *QAccessibleTable::childAt(int x, int y) const
{
QPoint viewportOffset = view()->viewport()->mapTo(view(), QPoint(0,0));
@@ -589,14 +534,6 @@ int QAccessibleTable::indexOfChild(const QAccessibleInterface *iface) const
return -1;
}
-QRect QAccessibleTable::rect() const
-{
- if (!view()->isVisible())
- return QRect();
- QPoint pos = view()->mapToGlobal(QPoint(0, 0));
- return QRect(pos.x(), pos.y(), view()->width(), view()->height());
-}
-
QAccessibleInterface *QAccessibleTable::parent() const
{
if (view() && view()->parent()) {
diff --git a/src/widgets/accessible/itemviews_p.h b/src/widgets/accessible/itemviews_p.h
index e74be151115..ceb6b913a8d 100644
--- a/src/widgets/accessible/itemviews_p.h
+++ b/src/widgets/accessible/itemviews_p.h
@@ -36,12 +36,7 @@ class QAccessibleTable : public QAccessibleTableInterface,
public QAccessibleWidgetV2
{
public:
- explicit QAccessibleTable(QWidget *w);
- bool isValid() const override;
-
- QAccessible::Role role() const override;
- QAccessible::State state() const override;
- QRect rect() const override;
+ explicit QAccessibleTable(QWidget *w, QAccessible::Role role = QAccessible::Table);
QAccessibleInterface *childAt(int x, int y) const override;
QAccessibleInterface *focusChild() const override;
@@ -91,7 +86,7 @@ public:
protected:
inline QAccessible::Role cellRole() const {
- switch (m_role) {
+ switch (role()) {
case QAccessible::List:
return QAccessible::ListItem;
case QAccessible::Table:
@@ -116,7 +111,6 @@ protected:
private:
// the child index for a model index
inline int logicalIndex(const QModelIndex &index) const;
- QAccessible::Role m_role;
};
#if QT_CONFIG(treeview)
@@ -124,7 +118,7 @@ class QAccessibleTree :public QAccessibleTable
{
public:
explicit QAccessibleTree(QWidget *w)
- : QAccessibleTable(w)
+ : QAccessibleTable(w, QAccessible::Tree)
{}
@@ -153,7 +147,7 @@ class QAccessibleList :public QAccessibleTable
{
public:
explicit QAccessibleList(QWidget *w)
- : QAccessibleTable(w)
+ : QAccessibleTable(w, QAccessible::List)
{}
QAccessibleInterface *child(int index) const override;
diff --git a/src/widgets/styles/qstylesheetstyle.cpp b/src/widgets/styles/qstylesheetstyle.cpp
index b2cfb27e814..d45515e0ecc 100644
--- a/src/widgets/styles/qstylesheetstyle.cpp
+++ b/src/widgets/styles/qstylesheetstyle.cpp
@@ -4658,7 +4658,14 @@ void QStyleSheetStyle::drawPrimitive(PrimitiveElement pe, const QStyleOption *op
#if QT_CONFIG(scrollarea)
if (const QAbstractScrollArea *sa = qobject_cast<const QAbstractScrollArea *>(w)) {
const QAbstractScrollAreaPrivate *sap = sa->d_func();
- rule.drawBackground(p, opt->rect, sap->contentsOffset());
+ bool callBaseClass = true;
+ if (rule.hasBackground()) {
+ if (rule.baseStyleCanDraw())
+ baseStyle()->drawPrimitive(pe, opt, p, w);
+ else
+ rule.drawBackground(p, opt->rect, sap->contentsOffset());
+ callBaseClass = false;
+ }
if (rule.hasBorder()) {
QRect brect = rule.borderRect(opt->rect);
if (styleHint(QStyle::SH_ScrollView_FrameOnlyAroundContents, opt, w)) {
@@ -4667,7 +4674,10 @@ void QStyleSheetStyle::drawPrimitive(PrimitiveElement pe, const QStyleOption *op
brect = QStyle::visualRect(opt->direction, brect, r);
}
rule.drawBorder(p, brect);
+ callBaseClass = false;
}
+ if (!callBaseClass)
+ return;
break;
}
#endif
diff --git a/src/widgets/widgets/qmenu.cpp b/src/widgets/widgets/qmenu.cpp
index 92ff14dd44f..26d9bcc9f24 100644
--- a/src/widgets/widgets/qmenu.cpp
+++ b/src/widgets/widgets/qmenu.cpp
@@ -2543,14 +2543,16 @@ void QMenuPrivate::popup(const QPoint &p, QAction *atAction, PositionFunction po
q->create();
if (auto waylandWindow = dynamic_cast<QNativeInterface::Private::QWaylandWindow*>(q->windowHandle()->handle())) {
if (causedButton) {
+ const QRect controlGeometry(causedButton->mapTo(causedButton->window(), QPoint(0, 0)), causedButton->size());
+ waylandWindow->setParentControlGeometry(controlGeometry);
waylandWindow->setExtendedWindowType(QNativeInterface::Private::QWaylandWindow::Menu);
- waylandWindow->setParentControlGeometry(causedButton->geometry());
} else if (caused) {
- waylandWindow->setExtendedWindowType(QNativeInterface::Private::QWaylandWindow::SubMenu);
waylandWindow->setParentControlGeometry(caused->d_func()->actionRect(caused->d_func()->currentAction));
+ waylandWindow->setExtendedWindowType(QNativeInterface::Private::QWaylandWindow::SubMenu);
} else if (auto menubar = qobject_cast<QMenuBar*>(causedPopup.widget)) {
+ QPoint menuBarWindowPosition = menubar->mapTo(menubar->window(), QPoint(0, 0));
+ waylandWindow->setParentControlGeometry(menubar->actionGeometry(causedPopup.action).translated(menuBarWindowPosition));
waylandWindow->setExtendedWindowType(QNativeInterface::Private::QWaylandWindow::Menu);
- waylandWindow->setParentControlGeometry(menubar->actionGeometry(causedPopup.action));
}
}
#endif