subsurface/scripts/kirigami.diff
Dirk Hohndel ebbe01a359 mobile UI: disable action button / drawer interactions
This is a feature that I never fully understood, but that apparently is
causing the drawers to show up for people who are just trying to
interact with the action button. The approach here is really drastic and
crude, but in my testing it seems to work.

Reported-by: Hartley Horwitz <hhrwtz@gmail.com>
Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2020-03-27 12:31:02 -07:00

345 lines
16 KiB
Diff

diff -rwu ../kirigami/src/controls/GlobalDrawer.qml ./src/controls/GlobalDrawer.qml
--- ../kirigami/src/controls/GlobalDrawer.qml 2019-10-10 17:13:41.384333413 -0700
+++ ./src/controls/GlobalDrawer.qml 2019-10-11 19:44:58.988220651 -0700
@@ -215,6 +215,20 @@
readonly property Action currentSubMenu: stackView.currentItem ? stackView.currentItem.current: null
/**
+ * scrollViewItem: ScrollView
+ *
+ * Points to the internal ScrollView so the caller can implement the Back button
+ */
+ readonly property Item scrollViewItem: scrollView
+
+ /**
+ * pop: function
+ *
+ * Point to the pop function of the stackView inside the scrollView in order to be able to implement the Back button in the caller
+ */
+ function pop() { scrollView.pop }
+
+ /**
* Notifies that the banner has been clicked
*/
signal bannerClicked()
@@ -238,6 +252,7 @@
anchors.fill: parent
implicitWidth: Math.min (Units.gridUnit * 20, root.parent.width * 0.8)
horizontalScrollBarPolicy: Qt.ScrollBarAlwaysOff
+ function pop() { stackView.pop() }
Flickable {
id: mainFlickable
@@ -331,17 +346,13 @@
ColumnLayout {
id: topContent
spacing: 0
- Layout.alignment: Qt.AlignHCenter
- Layout.leftMargin: root.leftPadding
- Layout.rightMargin: root.rightPadding
Layout.bottomMargin: Units.smallSpacing
- Layout.topMargin: root.topPadding
Layout.fillWidth: true
Layout.fillHeight: true
Layout.preferredHeight: implicitHeight * opacity
//NOTE: why this? just Layout.fillWidth: true doesn't seem sufficient
//as items are added only after this column creation
- Layout.minimumWidth: parent.width - root.leftPadding - root.rightPadding
+ Layout.minimumWidth: parent.width
visible: children.length > 0 && childrenRect.height > 0 && opacity > 0
opacity: !root.collapsed || showTopContentWhenCollapsed
Behavior on opacity {
@@ -435,7 +446,7 @@
easing.type: Easing.InOutQuad
}
}
-
+/*
BasicListItem {
id: backItem
visible: level > 0
@@ -454,7 +465,7 @@
sequence: backItem.MnemonicData.sequence
onActivated: backItem.clicked()
}
-
+*/
Repeater {
id: actionsRepeater
model: root.actions
diff -rwu ../kirigami/src/controls/private/GlobalDrawerActionItem.qml ./src/controls/private/GlobalDrawerActionItem.qml
--- ../kirigami/src/controls/private/GlobalDrawerActionItem.qml 2019-10-10 17:13:41.387666766 -0700
+++ ./src/controls/private/GlobalDrawerActionItem.qml 2019-10-11 19:44:58.988220651 -0700
@@ -94,7 +94,7 @@
Layout.preferredHeight: !root.collapsed ? Units.iconSizes.smallMedium : Units.iconSizes.small/2
selected: listItem.checked || listItem.pressed
Layout.preferredWidth: Layout.preferredHeight
- source: (LayoutMirroring.enabled ? "go-next-symbolic-rtl" : "go-next-symbolic")
+ source: (LayoutMirroring.enabled ? ":/go-next-symbolic-rtl" : ":/go-next-symbolic")
visible: (!isExpandible || root.collapsed) && !listItem.isSeparator && modelData.hasOwnProperty("children") && modelData.children!==undefined && modelData.children.length > 0
}
data: [
diff -rwu ../kirigami/src/controls/private/globaltoolbar/BreadcrumbControl.qml ./src/controls/private/globaltoolbar/BreadcrumbControl.qml
--- ../kirigami/src/controls/private/globaltoolbar/BreadcrumbControl.qml 2019-10-10 17:13:41.391000120 -0700
+++ ./src/controls/private/globaltoolbar/BreadcrumbControl.qml 2019-10-11 22:59:45.248031517 -0700
@@ -82,7 +81,7 @@
Kirigami.Heading {
Layout.leftMargin: Kirigami.Units.largeSpacing
font.pointSize: -1
- font.pixelSize: Math.max(1, mainLayout.height * 0.6)
+ font.pixelSize: Math.max(1, Kirigami.Units.defaultFontSize)
color: Kirigami.Theme.textColor
verticalAlignment: Text.AlignVCenter
wrapMode: Text.NoWrap
diff -rwu ../kirigami/src/controls/private/globaltoolbar/PageRowGlobalToolBarUI.qml ./src/controls/private/globaltoolbar/PageRowGlobalToolBarUI.qml
--- ../kirigami/src/controls/private/globaltoolbar/PageRowGlobalToolBarUI.qml 2019-10-10 17:13:41.391000120 -0700
+++ ./src/controls/private/globaltoolbar/PageRowGlobalToolBarUI.qml 2019-10-12 10:36:39.396460010 -0700
@@ -36,15 +36,23 @@
readonly property Item currentItem: layerIsMainRow ? root.currentItem : root.layers.currentItem
height: visible ? implicitHeight : 0
+
minimumHeight: globalToolBar.minimumHeight
preferredHeight: globalToolBar.preferredHeight
maximumHeight: globalToolBar.maximumHeight
separatorVisible: globalToolBar.separatorVisible
+ background: Rectangle { color: subsurfaceTheme.primaryColor }
RowLayout {
anchors.fill: parent
spacing: 0
-
+ // I can't make the layout work without this invisible rectangle to anchor things on
+ Rectangle {
+ id: correct
+ height: parent.height
+ width: 0
+ color: "transparent"
+ }
Item {
id: leftHandleAnchor
visible: (typeof applicationWindow() !== "undefined" && applicationWindow().globalDrawer && applicationWindow().globalDrawer.enabled && applicationWindow().globalDrawer.handleVisible &&
@@ -60,20 +68,21 @@
RowLayout {
id: buttonsLayout
Layout.fillHeight: true
-
Layout.leftMargin: leftHandleAnchor.visible ? Kirigami.Units.smallSpacing : 0
-
+ Layout.alignment: Qt.AlignTop | Qt.AlignVCenter
visible: (globalToolBar.showNavigationButtons != Kirigami.ApplicationHeaderStyle.NoNavigationButtons || root.layers.depth > 1) && (globalToolBar.actualStyle != Kirigami.ApplicationHeaderStyle.None)
Layout.maximumWidth: visibleChildren.length > 0 ? implicitWidth : 0
-
TemplatesPrivate.BackButton {
id: backButton
Layout.leftMargin: leftHandleAnchor.visible ? 0 : Kirigami.Units.smallSpacing
Layout.preferredWidth: height
+ Layout.topMargin: 0
+ Layout.maximumHeight: correct.height
}
TemplatesPrivate.ForwardButton {
Layout.preferredWidth: height
+ Layout.maximumHeight: correct.height
}
}
@@ -110,6 +119,6 @@
Layout.preferredWidth: height
}
}
- background.opacity: breadcrumbLoader.opacity
+ //background.opacity: breadcrumbLoader.opacity
}
diff -rwu ../kirigami/src/controls/templates/private/BackButton.qml ./src/controls/templates/private/BackButton.qml
--- ../kirigami/src/controls/templates/private/BackButton.qml 2019-10-10 17:13:41.391000120 -0700
+++ ./src/controls/templates/private/BackButton.qml 2019-10-12 10:32:00.517728443 -0700
@@ -27,6 +27,7 @@
id: button
icon.name: (LayoutMirroring.enabled ? "go-previous-symbolic-rtl" : "go-previous-symbolic")
+ icon.source: (LayoutMirroring.enabled ? "go-previous-symbolic-rtl" : "go-previous-symbolic")
enabled: applicationWindow().pageStack.layers.depth > 1 || (applicationWindow().pageStack.depth > 1 && (applicationWindow().pageStack.currentIndex > 0 || applicationWindow().pageStack.contentItem.contentX > 0))
diff -rwu ../kirigami/src/controls/templates/private/ForwardButton.qml ./src/controls/templates/private/ForwardButton.qml
--- ../kirigami/src/controls/templates/private/ForwardButton.qml 2019-10-10 17:13:41.391000120 -0700
+++ ./src/controls/templates/private/ForwardButton.qml 2019-10-11 19:44:58.988220651 -0700
@@ -27,6 +27,7 @@
id: button
icon.name: (LayoutMirroring.enabled ? "go-next-symbolic-rtl" : "go-next-symbolic")
+ icon.source: (LayoutMirroring.enabled ? "go-next-symbolic-rtl" : "go-next-symbolic")
enabled: applicationWindow().pageStack.currentIndex < applicationWindow().pageStack.depth-1
diff -rwu ../kirigami/src/controls/Units.qml ./src/controls/Units.qml
--- ../kirigami/src/controls/Units.qml 2019-10-10 17:13:41.387666766 -0700
+++ ./src/controls/Units.qml 2019-10-11 20:48:07.216139938 -0700
@@ -113,6 +113,11 @@
readonly property int wheelScrollLines: 3
/**
+ * Use this to hardcode the font size of the global toolbar that Kirigami gets wrong
+ */
+ property double defaultFontSize: fontMetrics.font.pixelSize
+
+ /**
* metrics used by the default font
*/
property variant fontMetrics: TextMetrics {
diff -rwu ../kirigami/src/kirigamiplugin.cpp ./src/kirigamiplugin.cpp
--- ../kirigami/src/kirigamiplugin.cpp 2019-10-10 17:13:41.391000120 -0700
+++ ./src/kirigamiplugin.cpp 2019-10-11 19:44:58.991554017 -0700
@@ -41,7 +41,7 @@
//Q_INIT_RESOURCE(kirigami);
#ifdef KIRIGAMI_BUILD_TYPE_STATIC
-#include <qrc_kirigami.cpp>
+//#include <qrc_kirigami.cpp>
#endif
QUrl KirigamiPlugin::componentUrl(const QString &fileName) const
diff -rwu ../kirigami/src/controls/private/ActionButton.qml ./src/controls/private/ActionButton.qml
--- ../kirigami/src/controls/private/ActionButton.qml 2019-10-11 14:00:51.783839545 -0400
+++ ./src/controls/private/ActionButton.qml 2019-10-27 17:12:04.339302719 -0400
@@ -70,12 +70,12 @@
anchors.bottom: edgeMouseArea.bottom
- implicitWidth: implicitHeight + Units.iconSizes.smallMedium*2 + Units.gridUnit
+ implicitWidth: implicitHeight + Units.iconSizes.smallMedium*4 + Units.gridUnit
implicitHeight: Units.iconSizes.medium + Units.largeSpacing * 2
onXChanged: {
- if (mouseArea.pressed || edgeMouseArea.pressed || fakeContextMenuButton.pressed) {
+ if (0 && (mouseArea.pressed || edgeMouseArea.pressed || fakeContextMenuButton.pressed)) {
if (root.hasGlobalDrawer && globalDrawer.enabled && globalDrawer.modal) {
globalDrawer.peeking = true;
globalDrawer.visible = true;
@@ -97,13 +97,13 @@
property bool internalVisibility: (!root.hasApplicationWindow || (applicationWindow().controlsVisible && applicationWindow().height > root.height*2)) && (root.action === null || root.action.visible === undefined || root.action.visible)
preventStealing: true
- drag {
- target: button
- //filterChildren: true
- axis: Drag.XAxis
- minimumX: root.hasContextDrawer && contextDrawer.enabled && contextDrawer.modal ? 0 : root.width/2 - button.width/2
- maximumX: root.hasGlobalDrawer && globalDrawer.enabled && globalDrawer.modal ? root.width : root.width/2 - button.width/2
- }
+// drag {
+// target: button
+// //filterChildren: true
+// axis: Drag.XAxis
+// minimumX: root.hasContextDrawer && contextDrawer.enabled && contextDrawer.modal ? 0 : root.width/2 - button.width/2
+// maximumX: root.hasGlobalDrawer && globalDrawer.enabled && globalDrawer.modal ? root.width : root.width/2 - button.width/2
+// }
property var downTimestamp;
property int startX
@@ -147,24 +147,24 @@
drawerShowAdjust = 0;
//project where it would be a full second in the future
- if (root.hasContextDrawer && root.hasGlobalDrawer && globalDrawer.modal && x + speed > Math.min(root.width/4*3, root.width/2 + globalDrawer.contentItem.width/2)) {
- globalDrawer.open();
- contextDrawer.close();
- } else if (root.hasContextDrawer && x + speed < Math.max(root.width/4, root.width/2 - contextDrawer.contentItem.width/2)) {
- if (root.hasContextDrawer && contextDrawer.modal) {
- contextDrawer.open();
- }
- if (root.hasGlobalDrawer && globalDrawer.modal) {
- globalDrawer.close();
- }
- } else {
- if (root.hasGlobalDrawer && globalDrawer.modal) {
- globalDrawer.close();
- }
- if (root.hasContextDrawer && contextDrawer.modal) {
- contextDrawer.close();
- }
- }
+// if (root.hasContextDrawer && root.hasGlobalDrawer && globalDrawer.modal && x + speed > Math.min(root.width/4*3, root.width/2 + globalDrawer.contentItem.width/2)) {
+// globalDrawer.open();
+// contextDrawer.close();
+// } else if (root.hasContextDrawer && x + speed < Math.max(root.width/4, root.width/2 - contextDrawer.contentItem.width/2)) {
+// if (root.hasContextDrawer && contextDrawer.modal) {
+// contextDrawer.open();
+// }
+// if (root.hasGlobalDrawer && globalDrawer.modal) {
+// globalDrawer.close();
+// }
+// } else {
+// if (root.hasGlobalDrawer && globalDrawer.modal) {
+// globalDrawer.close();
+// }
+// if (root.hasContextDrawer && contextDrawer.modal) {
+// contextDrawer.close();
+// }
+// }
//Don't rely on native onClicked, but fake it here:
//Qt.startDragDistance is not adapted to devices dpi in case
//of Android, so consider the button "clicked" when:
@@ -201,10 +201,10 @@
}
}
- onPositionChanged: {
- drawerShowAdjust = Math.min(0.3, Math.max(0, (startMouseY - mouse.y)/(Units.gridUnit*15)));
- button.xChanged();
- }
+// onPositionChanged: {
+// drawerShowAdjust = Math.min(0.3, Math.max(0, (startMouseY - mouse.y)/(Units.gridUnit*15)));
+// button.xChanged();
+// }
onPressAndHold: {
if (!actionUnderMouse) {
return;
@@ -291,7 +291,7 @@
bottomMargin: Units.smallSpacing
}
enabled: root.leftAction && root.leftAction.enabled
- radius: Units.devicePixelRatio*2
+ radius: Units.devicePixelRatio*4
height: Units.iconSizes.smallMedium + Units.smallSpacing * 2
width: height + (root.action ? Units.gridUnit*2 : 0)
visible: root.leftAction
@@ -326,6 +326,17 @@
margins: Units.smallSpacing * 2
}
}
+ Rectangle {
+ anchors.left: parent.left
+ anchors.leftMargin: Units.smallSpacing
+ anchors.verticalCenter: parent.verticalCenter
+ width: Units.iconSizes.smallMedium + Units.smallSpacing * 2
+ height: width
+ radius: width / 2
+ color: "transparent"
+ border.color: Qt.lighter(buttonGraphics.baseColor, 1.1)
+ border.width: 0.5
+ }
}
//right button
Rectangle {
@@ -372,6 +383,17 @@
margins: Units.smallSpacing * 2
}
}
+ Rectangle {
+ anchors.right: parent.right
+ anchors.rightMargin: Units.smallSpacing
+ anchors.verticalCenter: parent.verticalCenter
+ width: Units.iconSizes.smallMedium + Units.smallSpacing * 2
+ height: width
+ radius: width / 2
+ color: "transparent"
+ border.color: Qt.lighter(buttonGraphics.baseColor, 1.1)
+ border.width: 0.5
+ }
}
}