on xenial help sign in
Move textarea up automatically when inputmethod popup.

If rating and comment input widget is at the bottom of preview page.Input method will overlap with text area of when it popups.Move contentY of flickitem to fix this issue. Fixes: #1485947 Approved by: Albert Astals Cid

commitb0a1c58c66a9e67114ebdce397a65727928cee7f authorGary.Wzl <Gary.Wang@canonical.com> dateMon 7 Sep 2015, 14:04 (11 years ago) parent37f734d7313a99
6 files changed+48−1
qml/Dash/Previews/Preview.qml+20−1 qml/Dash/Previews/PreviewCommentInput.qml+7 qml/Dash/Previews/PreviewExpandable.qml+3 qml/Dash/Previews/PreviewRatingInput.qml+5 qml/Dash/Previews/PreviewWidget.qml+9 qml/Dash/Previews/PreviewWidgetFactory.qml+4
qml/Dash/Previews/Preview.qml+20−1
@@ -66,10 +66,25 @@ Item {
6666 delegate: ListView {
6767 id: column
6868 objectName: "previewListRow" + index
69− anchors { top: parent.top; bottom: parent.bottom }
69+ anchors {
70+ top: parent.top
71+ bottom: parent.bottom
72+ }
7073 width: row.columnWidth
7174 spacing: row.spacing
7275 bottomMargin: Qt.inputMethod.visible ? Qt.inputMethod.keyboardRectangle.height : 0
76+ property var makeSureVisibleItem
77+ property real previousVisibleHeight: 0
78+ property real visibleHeight: height - bottomMargin
79+ onVisibleHeightChanged: {
80+ if (makeSureVisibleItem && makeSureVisibleItem.activeFocus && previousVisibleHeight > visibleHeight) {
81+ var textAreaPos = makeSureVisibleItem.mapToItem(column, 0, 0);
82+ if (textAreaPos.y + makeSureVisibleItem.height > column.visibleHeight) {
83+ column.contentY += textAreaPos.y + makeSureVisibleItem.height - column.visibleHeight
84+ }
85+ }
86+ previousVisibleHeight = visibleHeight;
87+ }
7388
7489 model: columnModel
7590 cacheBuffer: height
@@ -92,6 +107,10 @@ Item {
92107 onTriggered: {
93108 previewModel.triggered(widgetId, actionId, data);
94109 }
110+ onMakeSureVisible: {
111+ column.previousVisibleHeight=column.visibleHeight
112+ column.makeSureVisibleItem=item
113+ }
95114
96115 onFocusChanged: if (focus) column.positionViewAtIndex(index, ListView.Contain)
97116
qml/Dash/Previews/PreviewCommentInput.qml+7
@@ -38,6 +38,13 @@ PreviewWidget {
3838 TextArea {
3939 id: commentTextArea
4040 objectName: "commentTextArea"
41+
42+ property bool inputMethodVisible: Qt.inputMethod.visible
43+ onInputMethodVisibleChanged: {
44+ if(inputMethodVisible && activeFocus)
45+ root.makeSureVisible(commentTextArea);
46+ }
47+
4148 anchors {
4249 top: parent.top
4350 left: parent.left
qml/Dash/Previews/PreviewExpandable.qml+3
@@ -96,6 +96,9 @@ PreviewWidget {
9696 onTriggered: {
9797 root.triggered(widgetId, actionId, data);
9898 }
99+ onMakeSureVisible: {
100+ root.makeSureVisible(item)
101+ }
99102 }
100103 }
101104 }
qml/Dash/Previews/PreviewRatingInput.qml+5
@@ -143,6 +143,11 @@ PreviewWidget {
143143 TextArea {
144144 id: reviewTextArea
145145 objectName: "reviewTextArea"
146+ property bool inputMethodVisible: Qt.inputMethod.visible
147+ onInputMethodVisibleChanged: {
148+ if(inputMethodVisible && activeFocus)
149+ root.makeSureVisible(reviewTextArea);
150+ }
146151 anchors {
147152 top: parent.top
148153 left: parent.left
qml/Dash/Previews/PreviewWidget.qml+9
@@ -41,5 +41,14 @@ Item {
4141 */
4242 signal triggered(string widgetId, string actionId, var data)
4343
44+ /*! \brief This signal should be emitted when widget gains the focus
45+ * and input method popups.
46+ * And preview widget should reposition in visible area to avoid
47+ * keyboard appears over the widget.
48+ *
49+ * \param item, id of specified item which is needed to reposition.
50+ */
51+ signal makeSureVisible(var item)
52+
4453 objectName: widgetId
4554}
qml/Dash/Previews/PreviewWidgetFactory.qml+4
@@ -43,6 +43,9 @@ Loader {
4343 //! Triggered signal forwarded from the widgets.
4444 signal triggered(string widgetId, string actionId, var data)
4545
46+ //! MakesureVisible signal forwarded from the widgets.
47+ signal makeSureVisible(var item)
48+
4649 source: widgetSource
4750
4851 //! \cond private
@@ -81,5 +84,6 @@ Loader {
8184 Connections {
8285 target: root.item
8386 onTriggered: root.triggered(widgetId, actionId, data)
87+ onMakeSureVisible: root.makeSureVisible(item)
8488 }
8589}