diff --git a/resources/qml/MessageInput.qml b/resources/qml/MessageInput.qml index a8ae8984..581416e5 100644 --- a/resources/qml/MessageInput.qml +++ b/resources/qml/MessageInput.qml @@ -66,7 +66,7 @@ Rectangle { Rectangle { anchors.fill: parent color: colors.window - visible: TimelineManager.timeline.input.uploading + visible: TimelineManager.timeline && TimelineManager.timeline.input.uploading NhekoBusyIndicator { anchors.fill: parent @@ -123,21 +123,28 @@ Rectangle { selectByMouse: true placeholderText: qsTr("Write a message...") //placeholderTextColor: colors.buttonText - // only set the anchors on Qt 5.12 or higher - // see https://doc.qt.io/qt-5/qml-qtquick-controls2-popup.html#anchors.centerIn-prop - Component.onCompleted: { - if (placeholderTextColor !== undefined) - placeholderTextColor = colors.buttonText + // only set the anchors on Qt 5.12 or higher + // see https://doc.qt.io/qt-5/qml-qtquick-controls2-popup.html#anchors.centerIn-prop + Component.onCompleted: { + if (placeholderTextColor !== undefined) + placeholderTextColor = colors.buttonText; - } + } color: colors.text width: textInput.width wrapMode: TextEdit.Wrap padding: 0 focus: true - onTextChanged: TimelineManager.timeline.input.updateState(selectionStart, selectionEnd, cursorPosition, text) + onTextChanged: { + if (TimelineManager.timeline) { + TimelineManager.timeline.input.updateState(selectionStart, selectionEnd, cursorPosition, text); + } + } onCursorRectangleChanged: textInput.ensureVisible(cursorRectangle) onCursorPositionChanged: { + if (!TimelineManager.timeline) + return ; + TimelineManager.timeline.input.updateState(selectionStart, selectionEnd, cursorPosition, text); if (cursorPosition <= completerTriggeredAt) { completerTriggeredAt = -1; @@ -235,13 +242,14 @@ Rectangle { Completer { id: popup - x: textArea.positionToRectangle(textArea.completerTriggeredAt).x - y: textArea.positionToRectangle(textArea.completerTriggeredAt).y - height + x: textArea.positionToRectangle(textArea.completerTriggeredAt > 0 ? text.completerTriggeredAt : 0).x + y: textArea.positionToRectangle(textArea.completerTriggeredAt > 0 ? text.completerTriggeredAt : 0).y - height } Connections { + ignoreUnknownSignals: true onInsertText: textArea.insert(textArea.cursorPosition, text) - target: TimelineManager.timeline.input + target: TimelineManager.timeline ? TimelineManager.timeline.input : null } MouseArea { @@ -254,7 +262,7 @@ Rectangle { NhekoDropArea { anchors.fill: parent - roomid: TimelineManager.timeline.roomId() + roomid: TimelineManager.timeline ? TimelineManager.timeline.roomId() : "" } } diff --git a/resources/qml/TimelineRow.qml b/resources/qml/TimelineRow.qml index 17dc2cd7..c4c18e0e 100644 --- a/resources/qml/TimelineRow.qml +++ b/resources/qml/TimelineRow.qml @@ -18,6 +18,7 @@ Item { MouseArea { id: hoverHandler + anchors.fill: parent propagateComposedEvents: true preventStealing: false @@ -25,10 +26,9 @@ Item { acceptedButtons: Qt.AllButtons onClicked: { if (mouse.button === Qt.RightButton) - messageContextMenu.show(model.id, model.type, model.isEncrypted, row); + messageContextMenu.show(model.id, model.type, model.isEncrypted, row); else - event.accepted = false - + event.accepted = false; } onPressAndHold: { messageContextMenu.show(model.id, model.type, model.isEncrypted, row, mapToItem(timelineRoot, mouse.x, mouse.y));