mirror of
				https://github.com/subsurface/subsurface.git
				synced 2025-02-19 22:16:15 +00:00 
			
		
		
		
	In commit622e5aab69("mobile/cleanup: remove more noisy debug output") I had good intentions, but missed the fact that in order to access the 'verbose' variable from QML I needed to use manager.verboseEnabled. The resulting syntax error went unnoticed and broke the screen repositioning when the keyboard opens on mobile devices. Worse, I called a non existing method to do the logging of debug information. And to top it all off, when I fixed the positioning algorithm in commit765c4f9704("mobile/UI: fix the logic to keep input visible"), I forgot to fix the near identical logic for the TextArea for the notes. Fail on so many levels. Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
		
			
				
	
	
		
			74 lines
		
	
	
	
		
			2.5 KiB
		
	
	
	
		
			QML
		
	
	
	
	
	
			
		
		
	
	
			74 lines
		
	
	
	
		
			2.5 KiB
		
	
	
	
		
			QML
		
	
	
	
	
	
| // SPDX-License-Identifier: GPL-2.0
 | |
| import QtQuick 2.2
 | |
| import QtQuick.Controls 2.2 as Controls
 | |
| import org.kde.kirigami 2.4 as Kirigami
 | |
| 
 | |
| Controls.TextField {
 | |
| 	/**
 | |
| 	 * set the flickable property to the Flickable this TextField is part of and
 | |
| 	 * when the user starts editing the text this should stay visible
 | |
| 	 */
 | |
| 	property var flickable
 | |
| 	property bool firstTime: true
 | |
| 
 | |
| 	/**
 | |
| 	 * set inComboBox if the TextField is used in an editable ComboBox
 | |
| 	 * this ensures that the baseline that is used to visually indicate that the user can
 | |
| 	 * edit the text as well as use the drop down is placed much closer to the actual text
 | |
| 	 */
 | |
| 	property bool inComboBox: false
 | |
| 
 | |
| 	id: stf
 | |
| 	background: Item {
 | |
| 		Rectangle {
 | |
| 			width: parent.width - Kirigami.Units.smallSpacing
 | |
| 			x: inComboBox ? Kirigami.Units.smallSpacing : -1
 | |
| 			height: 1
 | |
| 			color: stf.focus ? subsurfaceTheme.primaryColor : Qt.darker(subsurfaceTheme.backgroundColor, 1.2)
 | |
| 			anchors.bottom: parent.bottom
 | |
| 			anchors.bottomMargin: inComboBox ? Kirigami.Units.largeSpacing : 1
 | |
| 			visible: !stf.readOnly
 | |
| 		}
 | |
| 	}
 | |
| 
 | |
| 	// while we are at it, let's put some common settings here into the shared element
 | |
| 	font.pointSize: subsurfaceTheme.regularPointSize
 | |
| 	topPadding: 0
 | |
| 	bottomPadding: 0
 | |
| 	color: subsurfaceTheme.textColor
 | |
| 	onEditingFinished: {
 | |
| 		focus = false
 | |
| 		firstTime = true
 | |
| 	}
 | |
| 
 | |
| 	// once a text input has focus, make sure it is visible
 | |
| 	// we do this via a timer to give the OS time to show a virtual keyboard
 | |
| 	onFocusChanged:	{
 | |
| 		if (focus && flickable !== undefined) {
 | |
| 			waitForKeyboard.start()
 | |
| 		}
 | |
| 	}
 | |
| 
 | |
| 	// give the OS enough time to actually resize the flickable
 | |
| 	Timer {
 | |
| 		id: waitForKeyboard
 | |
| 		interval: 300 // 300ms seems like FOREVER, but even that sometimes isn't long enough on Android
 | |
| 
 | |
| 		onTriggered: {
 | |
| 			if (!Qt.inputMethod.visible) {
 | |
| 				if (firstTime) {
 | |
| 					firstTime = false
 | |
| 					restart()
 | |
| 				}
 | |
| 				return
 | |
| 			}
 | |
| 			// make sure there's enough space for the input field above the keyboard and action button (and that it's not too far up, either)
 | |
| 			var positionInFlickable = stf.mapToItem(flickable.contentItem, 0, 0)
 | |
| 			var stfY = positionInFlickable.y
 | |
| 			if (manager.verboseEnabebled)
 | |
| 				manager.appendTextToLog("position check: lower edge of view is " + (0 + flickable.contentY + flickable.height) + " and text field is at " + stfY)
 | |
| 			if (stfY + stf.height > flickable.contentY + flickable.height - 3 * Kirigami.Units.gridUnit || stfY < flickable.contentY)
 | |
| 				flickable.contentY = Math.max(0, 3 * Kirigami.Units.gridUnit + stfY + stf.height - flickable.height)
 | |
| 		}
 | |
| 	}
 | |
| }
 |