diff options
author | Dirk Hohndel <dirk@hohndel.org> | 2020-02-07 12:08:20 -0800 |
---|---|---|
committer | Dirk Hohndel <dirk@hohndel.org> | 2020-02-07 14:01:23 -0800 |
commit | 102f3bf295cdd2debd3ce462ec4fbe84463406c7 (patch) | |
tree | ea0f469b025eae3f021ef14ffc1b40022e95a3d5 /mobile-widgets | |
parent | 074dcfb656c579c068e4e298f086535c027ff305 (diff) | |
download | subsurface-102f3bf295cdd2debd3ce462ec4fbe84463406c7.tar.gz |
mobile/notes-edit: ensure cursor stays visible editing dive notes
This seems to work much more reliably as it specifically compares the cursor
position to the visible bottom and top of the screen.
Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
Diffstat (limited to 'mobile-widgets')
-rw-r--r-- | mobile-widgets/qml/DiveDetailsEdit.qml | 22 |
1 files changed, 16 insertions, 6 deletions
diff --git a/mobile-widgets/qml/DiveDetailsEdit.qml b/mobile-widgets/qml/DiveDetailsEdit.qml index 67aad6386..9d10772e4 100644 --- a/mobile-widgets/qml/DiveDetailsEdit.qml +++ b/mobile-widgets/qml/DiveDetailsEdit.qml @@ -716,11 +716,22 @@ Item { selectByMouse: true wrapMode: TextEdit.WrapAtWordBoundaryOrAnywhere property bool firstTime: true + property int visibleTop: detailsEditFlickable.contentY + property int visibleBottom: visibleTop + detailsEditFlickable.height - 4 * Kirigami.Units.gridUnit onPressed: waitForKeyboard.start() + onCursorRectangleChanged: { + ensureVisible(y + cursorRectangle.y) + } + onContentHeightChanged: { + console.log("content height changed") + } - // we repeat the Timer / Function from the SsrfTextField here (no point really in creating a matching customized TextArea) + // ensure that the y coordinate is inside the visible part of the detailsEditFlickable (our flickable) function ensureVisible(yDest) { - detailsEditFlickable.contentY = yDest + if (yDest > visibleBottom) + detailsEditFlickable.contentY += yDest - visibleBottom + if (yDest < visibleTop) + detailsEditFlickable.contentY -= visibleTop - yDest } // give the OS enough time to actually resize the flickable @@ -729,15 +740,14 @@ Item { interval: 300 // 300ms seems like FOREVER onTriggered: { if (!Qt.inputMethod.visible) { - if (firstTime) { - firstTime = false + if (txtNotes.firstTime) { + txtNotes.firstTime = false restart() } return } // make sure at least half the Notes field is visible - if (txtNotes.y + txtNotes.height / 2 > detailsEditFlickable.contentY + detailsEditFlickable.height - 3 * Kirigami.Units.gridUnit || txtNotes.y < detailsEditFlickable.contentY) - txtNotes.ensureVisible(Math.max(0, 3 * Kirigami.Units.gridUnit + txtNotes.y + txtNotes.height / 2 - detailsEditFlickable.height)) + txtNotes.ensureVisible(txtNotes.y + txtNotes.cursorRectangle.y) } } } |