diff --git a/TODO.md b/TODO.md index e2c6544a..01f4a63f 100644 --- a/TODO.md +++ b/TODO.md @@ -29,6 +29,7 @@ - Catch server 5xx errors when sending message and retry - Popups and room settings can't be scrolled when not enough height to show all +- `TextArea`s in Popups grow past window height instead of being scrollable - Handle cases where a known account's access token is invalid - If an account is gone from the user's config, discard UI state last page diff --git a/src/gui/Base/HScrollableTextArea.qml b/src/gui/Base/HScrollableTextArea.qml deleted file mode 100644 index 55ed253d..00000000 --- a/src/gui/Base/HScrollableTextArea.qml +++ /dev/null @@ -1,120 +0,0 @@ -// SPDX-License-Identifier: LGPL-3.0-or-later - -import QtQuick 2.12 -import QtQuick.Controls 2.12 - -ScrollView { - id: scrollView - opacity: enabled ? 1 : theme.disabledElementsOpacity - clip: true - ScrollBar.vertical.visible: contentHeight > height - - // Set it only on component creation to avoid binding loops - Component.onCompleted: if (! text) { - text = window.getState(this, "text", "") - textArea.cursorPosition = text.length - } - - onTextChanged: window.saveState(this) - - - default property alias textAreaData: textArea.data - - property string saveName: "" - property var saveId: "ALL" - property var saveProperties: ["text"] - - property alias placeholderText: textArea.placeholderText - property alias placeholderTextColor: textArea.placeholderTextColor - property alias area: textArea - property alias text: textArea.text - - property var focusItemOnTab: null - property var disabledText: null - property string defaultText: "" - readonly property bool changed: text !== defaultText - - - function reset() { area.clear(); text = defaultText } - - - Behavior on opacity { HNumberAnimation {} } - - TextArea { - id: textArea - text: defaultText - enabled: parent.enabled - leftPadding: theme.spacing - rightPadding: leftPadding - topPadding: theme.spacing / 1.5 - bottomPadding: topPadding - - readOnly: ! visible - selectByMouse: true - - wrapMode: TextEdit.Wrap - font.family: theme.fontFamily.sans - font.pixelSize: theme.fontSize.normal - font.pointSize: -1 - - placeholderTextColor: theme.controls.textArea.placeholderText - color: theme.controls.textArea.text - - background: Rectangle { - id: textAreaBackground - color: theme.controls.textArea.background - radius: theme.radius - } - - Keys.onPressed: if ( - event.modifiers & Qt.AltModifier || - event.modifiers & Qt.MetaModifier - ) event.accepted = true - - KeyNavigation.priority: KeyNavigation.BeforeItem - KeyNavigation.tab: focusItemOnTab - - - Binding on color { - value: "transparent" - when: disabledText !== null && ! textArea.enabled - } - - Binding on placeholderTextColor { - value: "transparent" - when: disabledText !== null && ! textArea.enabled - } - - Binding on implicitHeight { - value: disabledTextLabel.implicitHeight - when: disabledText !== null && ! textArea.enabled - } - - Behavior on color { HColorAnimation {} } - Behavior on placeholderTextColor { HColorAnimation {} } - - HLabel { - id: disabledTextLabel - anchors.fill: parent - visible: opacity > 0 - opacity: disabledText !== null && parent.enabled ? 0 : 1 - text: disabledText || "" - - leftPadding: parent.leftPadding - rightPadding: parent.rightPadding - topPadding: parent.topPadding - bottomPadding: parent.bottomPadding - - wrapMode: - parent.wrapMode === TextEdit.Wrap ? Text.Wrap : - parent.wrapMode === TextEdit.WordWrap ? Text.WordWrap : - parent.wrapMode === TextEdit.WrapAnywhere ? Text.WrapAnywhere : - Text.NoWrap - - font.family: parent.font.family - font.pixelSize: parent.font.pixelSize - - Behavior on opacity { HNumberAnimation {} } - } - } -} diff --git a/src/gui/Popups/InviteToRoomPopup.qml b/src/gui/Popups/InviteToRoomPopup.qml index 83cbce5b..a7105db2 100644 --- a/src/gui/Popups/InviteToRoomPopup.qml +++ b/src/gui/Popups/InviteToRoomPopup.qml @@ -1,6 +1,7 @@ // SPDX-License-Identifier: LGPL-3.0-or-later import QtQuick 2.12 +import QtQuick.Controls 2.12 import QtQuick.Layouts 1.12 import "../Base" @@ -12,7 +13,7 @@ BoxPopup { okText: qsTr("Invite") okEnabled: invitingAllowed && Boolean(inviteArea.text.trim()) - onOpened: inviteArea.area.forceActiveFocus() + onOpened: inviteArea.forceActiveFocus() onInvitingAllowedChanged: if (! invitingAllowed && inviteFuture) inviteFuture.cancel() @@ -60,14 +61,16 @@ BoxPopup { property var failedInvites: [] - HScrollableTextArea { - id: inviteArea - focusItemOnTab: box.firstButton - area.placeholderText: - qsTr("User IDs (e.g. @bob:matrix.org @alice:localhost)") - + ScrollView { Layout.fillWidth: true Layout.fillHeight: true + + HTextArea { + id: inviteArea + focusItemOnTab: box.firstButton + placeholderText: + qsTr("User IDs (e.g. @bob:matrix.org @alice:localhost)") + } } HLabel { diff --git a/src/gui/Popups/UnexpectedErrorPopup.qml b/src/gui/Popups/UnexpectedErrorPopup.qml index 590dd8d8..a10d5046 100644 --- a/src/gui/Popups/UnexpectedErrorPopup.qml +++ b/src/gui/Popups/UnexpectedErrorPopup.qml @@ -1,6 +1,7 @@ // SPDX-License-Identifier: LGPL-3.0-or-later import QtQuick 2.12 +import QtQuick.Controls 2.12 import QtQuick.Layouts 1.12 import "../Base" @@ -20,12 +21,14 @@ BoxPopup { property string traceback: "" - HScrollableTextArea { - text: [message, traceback].join("\n\n") || qsTr("No info available") - area.readOnly: true - area.font.family: theme.fontFamily.mono - + ScrollView { Layout.fillWidth: true + + HTextArea { + text: [message, traceback].join("\n\n") || qsTr("No info available") + readOnly: true + font.family: theme.fontFamily.mono + } } HCheckBox {