diff options
Diffstat (limited to 'src/widgets')
| -rw-r--r-- | src/widgets/accessible/itemviews.cpp | 71 | ||||
| -rw-r--r-- | src/widgets/accessible/itemviews_p.h | 14 | ||||
| -rw-r--r-- | src/widgets/styles/qstylesheetstyle.cpp | 12 | ||||
| -rw-r--r-- | src/widgets/widgets/qmenu.cpp | 8 |
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 |
