summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/controls/MenuBar.qml6
-rw-r--r--src/controls/Private/MenuContentItem.qml16
-rw-r--r--src/controls/Private/qquicktreemodeladaptor.cpp14
-rw-r--r--src/controls/Private/qquicktreemodeladaptor_p.h6
-rw-r--r--src/controls/Styles/Android/CursorHandleStyle.qml1
-rw-r--r--src/controls/Styles/Base/TumblerStyle.qml2
-rw-r--r--src/controls/Styles/Desktop/MenuBarStyle.qml5
-rw-r--r--src/controls/Styles/Desktop/MenuStyle.qml5
-rw-r--r--src/controls/TreeView.qml58
-rw-r--r--src/controls/qquickmenupopupwindow.cpp11
-rw-r--r--src/controls/qquickpopupwindow_p.h6
-rw-r--r--src/dialogs/qquickfiledialog_p.h4
-rw-r--r--src/dialogs/qquickplatformfiledialog_p.h2
-rw-r--r--src/extras/TumblerColumn.qml2
-rw-r--r--src/extras/doc/src/qtquickextras-index.qdoc2
-rw-r--r--src/widgets/qquickqfiledialog_p.h2
16 files changed, 85 insertions, 57 deletions
diff --git a/src/controls/MenuBar.qml b/src/controls/MenuBar.qml
index 3410528c..0d9f8ee8 100644
--- a/src/controls/MenuBar.qml
+++ b/src/controls/MenuBar.qml
@@ -116,6 +116,7 @@ MenuBarPrivate {
property Component __menuBarComponent: Loader {
id: menuBarLoader
+ Accessible.role: Accessible.MenuBar
onStatusChanged: if (status === Loader.Error) console.error("Failed to load panel for", root)
@@ -230,7 +231,12 @@ MenuBarPrivate {
Loader {
id: menuItemLoader
+ Accessible.role: Accessible.MenuItem
+ Accessible.name: StyleHelpers.removeMnemonics(opts.text)
+ Accessible.onPressAction: d.openedMenuIndex = opts.index
+
property var styleData: QtObject {
+ id: opts
readonly property int index: __menuItemIndex
readonly property string text: !!__menuItem && __menuItem.title
readonly property bool enabled: !!__menuItem && __menuItem.enabled
diff --git a/src/controls/Private/MenuContentItem.qml b/src/controls/Private/MenuContentItem.qml
index 6006f8d8..07edea2f 100644
--- a/src/controls/Private/MenuContentItem.qml
+++ b/src/controls/Private/MenuContentItem.qml
@@ -37,12 +37,15 @@
import QtQuick 2.2
import QtQuick.Controls 1.2
import QtQuick.Controls.Styles 1.1
+import QtQuick.Controls.Private 1.0
Loader {
id: menuFrameLoader
property var __menu
+ Accessible.role: Accessible.PopupMenu
+
visible: status === Loader.Ready
width: content.width + (d.style ? d.style.padding.left + d.style.padding.right : 0)
height: content.height + (d.style ? d.style.padding.top + d.style.padding.bottom : 0)
@@ -172,6 +175,19 @@ Loader {
Loader {
id: menuItemLoader
+ Accessible.role: opts.type === MenuItemType.Item || opts.type === MenuItemType.Menu ?
+ Accessible.MenuItem : Acccessible.NoRole
+ Accessible.name: StyleHelpers.removeMnemonics(opts.text)
+ Accessible.checkable: opts.checkable
+ Accessible.checked: opts.checked
+ Accessible.onPressAction: {
+ if (opts.type === MenuItemType.Item) {
+ d.triggerAndDismiss(menuItemLoader)
+ } else if (opts.type === MenuItemType.Menu) {
+ __showSubMenu(true /*immediately*/)
+ }
+ }
+
property QtObject styleData: QtObject {
id: opts
readonly property int index: __menuItemIndex
diff --git a/src/controls/Private/qquicktreemodeladaptor.cpp b/src/controls/Private/qquicktreemodeladaptor.cpp
index c9e31712..dddcdd01 100644
--- a/src/controls/Private/qquicktreemodeladaptor.cpp
+++ b/src/controls/Private/qquicktreemodeladaptor.cpp
@@ -177,7 +177,7 @@ bool QQuickTreeModelAdaptor::setData(const QModelIndex &index, const QVariant &v
}
}
-int QQuickTreeModelAdaptor::itemIndex(const QModelIndex &index)
+int QQuickTreeModelAdaptor::itemIndex(const QModelIndex &index) const
{
// This is basically a plagiarism of QTreeViewPrivate::viewIndex()
if (!index.isValid() || m_items.isEmpty())
@@ -244,11 +244,15 @@ QModelIndex QQuickTreeModelAdaptor::mapRowToModelIndex(int row) const
return m_items.at(row).index;
}
-QItemSelection QQuickTreeModelAdaptor::selectionForRowRange(int from, int to) const
+QItemSelection QQuickTreeModelAdaptor::selectionForRowRange(const QModelIndex &fromIndex, const QModelIndex &toIndex) const
{
- Q_ASSERT(0 <= from && from < m_items.count());
- Q_ASSERT(0 <= to && to < m_items.count());
-
+ int from = itemIndex(fromIndex);
+ int to = itemIndex(toIndex);
+ if (from == -1) {
+ if (to == -1)
+ return QItemSelection();
+ return QItemSelection(toIndex, toIndex);
+ }
if (from > to)
qSwap(from, to);
diff --git a/src/controls/Private/qquicktreemodeladaptor_p.h b/src/controls/Private/qquicktreemodeladaptor_p.h
index 8059f681..2297c365 100644
--- a/src/controls/Private/qquicktreemodeladaptor_p.h
+++ b/src/controls/Private/qquicktreemodeladaptor_p.h
@@ -89,12 +89,12 @@ public:
const QModelIndex &mapToModel(const QModelIndex &index) const;
Q_INVOKABLE QModelIndex mapRowToModelIndex(int row) const;
- Q_INVOKABLE QItemSelection selectionForRowRange(int from, int to) const;
+ Q_INVOKABLE QItemSelection selectionForRowRange(const QModelIndex &fromIndex, const QModelIndex &toIndex) const;
void showModelTopLevelItems(bool doInsertRows = true);
void showModelChildItems(const TreeItem &parent, int start, int end, bool doInsertRows = true, bool doExpandPendingRows = true);
- int itemIndex(const QModelIndex &index);
+ int itemIndex(const QModelIndex &index) const;
void expandPendingRows(bool doInsertRows = true);
int lastChildIndex(const QModelIndex &index);
void removeVisibleRows(int startIndex, int endIndex, bool doRemoveRows = true);
@@ -152,7 +152,7 @@ private:
QList<TreeItem> m_items;
QSet<QPersistentModelIndex> m_expandedItems;
QList<TreeItem *> m_itemsToExpand;
- int m_lastItemIndex;
+ mutable int m_lastItemIndex;
};
QT_END_NAMESPACE
diff --git a/src/controls/Styles/Android/CursorHandleStyle.qml b/src/controls/Styles/Android/CursorHandleStyle.qml
index c3e32186..1534f4a9 100644
--- a/src/controls/Styles/Android/CursorHandleStyle.qml
+++ b/src/controls/Styles/Android/CursorHandleStyle.qml
@@ -55,6 +55,7 @@ DrawableLoader {
window_focused: focused && control.Window.active
opacity: hasText && (styleData.hasSelection || styleData.pressed || idle.running) ? 1.0 : 0.0
+ visible: opacity > 0.0 && focused
Timer {
id: idle
diff --git a/src/controls/Styles/Base/TumblerStyle.qml b/src/controls/Styles/Base/TumblerStyle.qml
index 2661837e..46605538 100644
--- a/src/controls/Styles/Base/TumblerStyle.qml
+++ b/src/controls/Styles/Base/TumblerStyle.qml
@@ -49,8 +49,6 @@ import QtQuick.Extras.Private 1.0
\ingroup controlsstyling
\brief Provides custom styling for Tumbler.
- \note TumblerStyle requires Qt 5.3.2 or later.
-
You can create a custom tumbler by replacing the following delegates:
\list
\li \l background
diff --git a/src/controls/Styles/Desktop/MenuBarStyle.qml b/src/controls/Styles/Desktop/MenuBarStyle.qml
index 470ccdb6..a31b2bb7 100644
--- a/src/controls/Styles/Desktop/MenuBarStyle.qml
+++ b/src/controls/Styles/Desktop/MenuBarStyle.qml
@@ -45,8 +45,6 @@ Style {
property Component background: StyleItem {
elementType: "menubar"
- Accessible.role: Accessible.MenuBar
-
Component.onCompleted: {
styleRoot.padding.left = pixelMetric("menubarhmargin") + pixelMetric("menubarpanelwidth")
styleRoot.padding.right = pixelMetric("menubarhmargin") + pixelMetric("menubarpanelwidth")
@@ -69,9 +67,6 @@ Style {
selected: (parent && styleData.selected) || sunken
hints: { "showUnderlined": styleData.underlineMnemonic }
-
- Accessible.role: Accessible.MenuItem
- Accessible.name: plainText
}
property Component menuStyle: Desktop.MenuStyle { }
diff --git a/src/controls/Styles/Desktop/MenuStyle.qml b/src/controls/Styles/Desktop/MenuStyle.qml
index 244bbca4..60e73d2f 100644
--- a/src/controls/Styles/Desktop/MenuStyle.qml
+++ b/src/controls/Styles/Desktop/MenuStyle.qml
@@ -60,8 +60,6 @@ Style {
color: SystemPaletteSingleton.window(control.enabled)
}
- Accessible.role: Accessible.PopupMenu
-
Component.onCompleted: {
var menuHMargin = pixelMetric("menuhmargin")
var menuVMargin = pixelMetric("menuvmargin")
@@ -106,9 +104,6 @@ Style {
"scrollerDirection": styleData.scrollerDirection,
"icon": !!__menuItem && __menuItem.__icon
}
-
- Accessible.role: Accessible.MenuItem
- Accessible.name: StyleHelpers.removeMnemonics(text)
}
property Component scrollIndicator: menuItemPanel
diff --git a/src/controls/TreeView.qml b/src/controls/TreeView.qml
index 84c30edd..c97930f3 100644
--- a/src/controls/TreeView.qml
+++ b/src/controls/TreeView.qml
@@ -118,10 +118,11 @@ BasicTableView {
// the flickable from eating our mouse press events
preventStealing: !Settings.hasTouchScreen
- property int clickedRow: -1
- property int pressedRow: -1
+ property var clickedIndex: undefined
+ property var pressedIndex: undefined
property int pressedColumn: -1
readonly property alias currentRow: root.__currentRow
+ readonly property alias currentIndex: root.currentIndex
// Handle vertical scrolling whem dragging mouse outside boundaries
property int autoScroll: 0 // 0 -> do nothing; 1 -> increment; 2 -> decrement
@@ -132,7 +133,7 @@ BasicTableView {
interval: 20
repeat: true
onTriggered: {
- var oldPressedRow = mouseArea.pressedRow
+ var oldPressedIndex = mouseArea.pressedIndex
var row
if (mouseArea.autoScroll === 1) {
__listView.incrementCurrentIndexBlocking();
@@ -144,28 +145,33 @@ BasicTableView {
row = __listView.indexAt(0, __listView.contentY)
}
- if (row !== oldPressedRow) {
- mouseArea.pressedRow = row
+ var index = modelAdaptor.mapRowToModelIndex(row)
+ if (index !== oldPressedIndex) {
+ mouseArea.pressedIndex = index
var modifiers = mouseArea.shiftPressed ? Qt.ShiftModifier : Qt.NoModifier
- mouseArea.mouseSelect(row, modifiers, true /* drag */)
+ mouseArea.mouseSelect(index, modifiers, true /* drag */)
}
}
}
- function mouseSelect(row, modifiers, drag) {
+ function mouseSelect(modelIndex, modifiers, drag) {
if (!selection) {
maybeWarnAboutSelectionMode()
return
}
if (selectionMode) {
- var modelIndex = modelAdaptor.mapRowToModelIndex(row)
selection.setCurrentIndex(modelIndex, ItemSelectionModel.NoUpdate)
if (selectionMode === SelectionMode.SingleSelection) {
selection.select(modelIndex, ItemSelectionModel.ClearAndSelect)
} else {
- var itemSelection = clickedRow === row ? modelIndex
- : modelAdaptor.selectionForRowRange(clickedRow, row)
+ var selectRowRange = (drag && (selectionMode === SelectionMode.MultiSelection
+ || (selectionMode === SelectionMode.ExtendedSelection
+ && modifiers & Qt.ControlModifier)))
+ || modifiers & Qt.ShiftModifier
+ var itemSelection = !selectRowRange || clickedIndex === modelIndex ? modelIndex
+ : modelAdaptor.selectionForRowRange(clickedIndex, modelIndex)
+
if (selectionMode === SelectionMode.MultiSelection
|| selectionMode === SelectionMode.ExtendedSelection && modifiers & Qt.ControlModifier) {
if (drag)
@@ -175,7 +181,7 @@ BasicTableView {
} else if (modifiers & Qt.ShiftModifier) {
selection.select(itemSelection, ItemSelectionModel.SelectCurrent)
} else {
- clickedRow = row // Needed only when drag is true
+ clickedIndex = modelIndex // Needed only when drag is true
selection.select(modelIndex, ItemSelectionModel.ClearAndSelect)
}
}
@@ -185,9 +191,9 @@ BasicTableView {
function keySelect(keyModifiers) {
if (selectionMode) {
if (!keyModifiers)
- clickedRow = currentRow
+ clickedIndex = currentIndex
if (!(keyModifiers & Qt.ControlModifier))
- mouseSelect(currentRow, keyModifiers, keyModifiers & Qt.ShiftModifier)
+ mouseSelect(currentIndex, keyModifiers, keyModifiers & Qt.ShiftModifier)
}
}
@@ -227,22 +233,23 @@ BasicTableView {
}
onPressed: {
- pressedRow = __listView.indexAt(0, mouseY + __listView.contentY)
+ var pressedRow = __listView.indexAt(0, mouseY + __listView.contentY)
+ pressedIndex = modelAdaptor.mapRowToModelIndex(pressedRow)
pressedColumn = __listView.columnAt(mouseX)
__listView.forceActiveFocus()
if (pressedRow > -1 && !Settings.hasTouchScreen
&& !branchDecorationContains(mouse.x, mouse.y)) {
__listView.currentIndex = pressedRow
- if (clickedRow === -1)
- clickedRow = pressedRow
- mouseSelect(pressedRow, mouse.modifiers, false)
+ if (!clickedIndex)
+ clickedIndex = pressedIndex
+ mouseSelect(pressedIndex, mouse.modifiers, false)
if (!mouse.modifiers)
- clickedRow = pressedRow
+ clickedIndex = pressedIndex
}
}
onReleased: {
- pressedRow = -1
+ pressedIndex = undefined
pressedColumn = -1
autoScroll = 0
}
@@ -261,23 +268,24 @@ BasicTableView {
}
if (pressed && containsMouse) {
- var oldPressedRow = pressedRow
- pressedRow = __listView.indexAt(0, mouseY + __listView.contentY)
+ var oldPressedIndex = pressedIndex
+ var pressedRow = __listView.indexAt(0, mouseY + __listView.contentY)
+ pressedIndex = modelAdaptor.mapRowToModelIndex(pressedRow)
pressedColumn = __listView.columnAt(mouseX)
- if (pressedRow > -1 && oldPressedRow !== pressedRow) {
+ if (pressedRow > -1 && oldPressedIndex !== pressedIndex) {
__listView.currentIndex = pressedRow
- mouseSelect(pressedRow, mouse.modifiers, true /* drag */)
+ mouseSelect(pressedIndex, mouse.modifiers, true /* drag */)
}
}
}
onExited: {
- pressedRow = -1
+ pressedIndex = undefined
pressedColumn = -1
}
onCanceled: {
- pressedRow = -1
+ pressedIndex = undefined
pressedColumn = -1
autoScroll = 0
}
diff --git a/src/controls/qquickmenupopupwindow.cpp b/src/controls/qquickmenupopupwindow.cpp
index e28e63b1..2a91940e 100644
--- a/src/controls/qquickmenupopupwindow.cpp
+++ b/src/controls/qquickmenupopupwindow.cpp
@@ -130,11 +130,15 @@ void QQuickMenuPopupWindow::setGeometry(int posx, int posy, int w, int h)
void QQuickMenuPopupWindow::updateSize()
{
+ const QQuickItem *contentItem = popupContentItem();
+ if (!contentItem)
+ return;
+
qreal x = m_initialPos.x();
qreal y = m_initialPos.y();
if (qGuiApp->layoutDirection() == Qt::RightToLeft)
- x -= popupContentItem()->width();
- setGeometry(x, y, popupContentItem()->width(), popupContentItem()->height());
+ x -= contentItem->width();
+ setGeometry(x, y, contentItem->width(), contentItem->height());
}
void QQuickMenuPopupWindow::updatePosition()
@@ -154,6 +158,9 @@ void QQuickMenuPopupWindow::exposeEvent(QExposeEvent *e)
m_initialPos += m_logicalParentWindow->geometry().topLeft();
}
QQuickPopupWindow::exposeEvent(e);
+
+ if (isExposed())
+ updateSize();
}
QQuickMenu *QQuickMenuPopupWindow::menu() const
diff --git a/src/controls/qquickpopupwindow_p.h b/src/controls/qquickpopupwindow_p.h
index b95275c0..617df53d 100644
--- a/src/controls/qquickpopupwindow_p.h
+++ b/src/controls/qquickpopupwindow_p.h
@@ -37,12 +37,12 @@
#ifndef QQUICKPOPUPWINDOW_H
#define QQUICKPOPUPWINDOW_H
+#include <QtCore/QPointer>
+#include <QtQuick/qquickitem.h>
#include <QtQuick/qquickwindow.h>
QT_BEGIN_NAMESPACE
-class QQuickItem;
-
class QQuickPopupWindow : public QQuickWindow
{
Q_OBJECT
@@ -84,7 +84,7 @@ private:
void forwardEventToTransientParent(QMouseEvent *);
QQuickItem *m_parentItem;
- QQuickItem *m_contentItem;
+ QPointer<QQuickItem> m_contentItem;
bool m_mouseMoved;
bool m_needsActivatedEvent;
bool m_dismissed;
diff --git a/src/dialogs/qquickfiledialog_p.h b/src/dialogs/qquickfiledialog_p.h
index d7b0804b..1dd65531 100644
--- a/src/dialogs/qquickfiledialog_p.h
+++ b/src/dialogs/qquickfiledialog_p.h
@@ -65,7 +65,7 @@ class QQuickFileDialog : public QQuickAbstractFileDialog
public:
explicit QQuickFileDialog(QObject *parent = 0);
~QQuickFileDialog();
- virtual QList<QUrl> fileUrls() const;
+ virtual QList<QUrl> fileUrls() const Q_DECL_OVERRIDE;
QJSValue shortcuts();
QJSValue __shortcuts();
@@ -78,7 +78,7 @@ public Q_SLOTS:
bool addSelection(const QUrl &path);
protected:
- virtual QPlatformFileDialogHelper *helper() { return 0; }
+ virtual QPlatformFileDialogHelper *helper() Q_DECL_OVERRIDE { return 0; }
Q_INVOKABLE QString urlToPath(const QUrl &url) { return url.toLocalFile(); }
Q_INVOKABLE QUrl pathToUrl(const QString &path) { return QUrl::fromLocalFile(path); }
Q_INVOKABLE QUrl pathFolder(const QString &path);
diff --git a/src/dialogs/qquickplatformfiledialog_p.h b/src/dialogs/qquickplatformfiledialog_p.h
index 5a5cc75f..4053db56 100644
--- a/src/dialogs/qquickplatformfiledialog_p.h
+++ b/src/dialogs/qquickplatformfiledialog_p.h
@@ -63,7 +63,7 @@ public:
virtual QList<QUrl> fileUrls() const Q_DECL_OVERRIDE;
protected:
- QPlatformFileDialogHelper *helper();
+ QPlatformFileDialogHelper *helper() Q_DECL_OVERRIDE;
Q_DISABLE_COPY(QQuickPlatformFileDialog)
};
diff --git a/src/extras/TumblerColumn.qml b/src/extras/TumblerColumn.qml
index 6dfecb04..cef4a592 100644
--- a/src/extras/TumblerColumn.qml
+++ b/src/extras/TumblerColumn.qml
@@ -45,8 +45,6 @@ import QtQuick.Controls.Private 1.0
\ingroup extras
\brief A column within a tumbler.
- \note TumblerColumn requires Qt 5.5.0 or later.
-
TumblerColumn represents a column within a tumbler, providing the interface
to define the items and width of each column.
diff --git a/src/extras/doc/src/qtquickextras-index.qdoc b/src/extras/doc/src/qtquickextras-index.qdoc
index 63966614..9237eff5 100644
--- a/src/extras/doc/src/qtquickextras-index.qdoc
+++ b/src/extras/doc/src/qtquickextras-index.qdoc
@@ -35,7 +35,7 @@
The Qt Quick Extras module provides a specialized set of
controls that can be used to build interfaces in Qt Quick.
- The module requires \l{Qt Quick} 2.2, and \l{Qt Quick Controls} 1.1.
+ The module was introduced in Qt 5.5.
Visit the \l{Qt Quick Extras Overview} page to get started.
diff --git a/src/widgets/qquickqfiledialog_p.h b/src/widgets/qquickqfiledialog_p.h
index 2747749e..7b9e5cbe 100644
--- a/src/widgets/qquickqfiledialog_p.h
+++ b/src/widgets/qquickqfiledialog_p.h
@@ -64,7 +64,7 @@ public:
virtual QList<QUrl> fileUrls() const Q_DECL_OVERRIDE;
protected:
- QPlatformFileDialogHelper *helper();
+ QPlatformFileDialogHelper *helper() Q_DECL_OVERRIDE;
Q_DISABLE_COPY(QQuickQFileDialog)
};