diff --git a/resources.qrc b/resources.qrc
index 715f7cf8174bc..6036fa0e1bff0 100644
--- a/resources.qrc
+++ b/resources.qrc
@@ -13,7 +13,7 @@
src/gui/filedetails/FileDetailsWindow.qml
src/gui/filedetails/FileTag.qml
src/gui/filedetails/NCInputDateField.qml
- src/gui/filedetails/NCInputTextEdit.qml
+ src/gui/filedetails/NCInputTextArea.qml
src/gui/filedetails/NCInputTextField.qml
src/gui/filedetails/NCTabButton.qml
src/gui/filedetails/ShareeDelegate.qml
diff --git a/src/gui/filedetails/NCInputTextEdit.qml b/src/gui/filedetails/NCInputTextArea.qml
similarity index 77%
rename from src/gui/filedetails/NCInputTextEdit.qml
rename to src/gui/filedetails/NCInputTextArea.qml
index 24dacdd3a831d..d3e917ff5113f 100644
--- a/src/gui/filedetails/NCInputTextEdit.qml
+++ b/src/gui/filedetails/NCInputTextArea.qml
@@ -19,28 +19,20 @@ import QtQuick.Layouts
import com.nextcloud.desktopclient
import Style
-TextEdit {
+TextArea {
id: root
readonly property color accentColor: palette.highlight
readonly property color secondaryColor: palette.placeholderText
readonly property alias submitButton: submitButton
- clip: true
- textMargin: Style.smallSpacing
- wrapMode: TextEdit.Wrap
+ // no implicitHeight here -- let the textarea take as much as it needs
+ // otherwise it will cut off some text vertically on multi-line strings...
+
selectByMouse: true
- height: Math.max(Style.talkReplyTextFieldPreferredHeight, contentHeight)
+ rightPadding: submitButton.width
- Rectangle {
- id: textFieldBorder
- anchors.fill: parent
- radius: Style.trayWindowRadius
- border.width: Style.normalBorderWidth
- border.color: root.activeFocus ? root.accentColor : root.secondaryColor
- color: palette.base
- z: -1
- }
+ wrapMode: TextEdit.Wrap
Button {
id: submitButton
@@ -61,4 +53,3 @@ TextEdit {
onClicked: root.editingFinished()
}
}
-
diff --git a/src/gui/filedetails/ShareDelegate.qml b/src/gui/filedetails/ShareDelegate.qml
index 895153fba632a..d6bb454a94090 100644
--- a/src/gui/filedetails/ShareDelegate.qml
+++ b/src/gui/filedetails/ShareDelegate.qml
@@ -38,7 +38,6 @@ GridLayout {
signal toggleAllowResharing(bool enable)
signal togglePasswordProtect(bool enable)
signal toggleExpirationDate(bool enable)
- signal toggleNoteToRecipient(bool enable)
signal permissionModeChanged(int permissionMode)
signal setLinkShareLabel(string label)
@@ -252,7 +251,6 @@ GridLayout {
onToggleHideDownload: root.toggleHideDownload(enable)
onTogglePasswordProtect: root.togglePasswordProtect(enable)
onToggleExpirationDate: root.toggleExpirationDate(enable)
- onToggleNoteToRecipient: root.toggleNoteToRecipient(enable)
onPermissionModeChanged: root.permissionModeChanged(permissionMode)
onSetLinkShareLabel: root.setLinkShareLabel(label)
diff --git a/src/gui/filedetails/ShareDetailsPage.qml b/src/gui/filedetails/ShareDetailsPage.qml
index 79897f73f44bd..8035b40d9d195 100644
--- a/src/gui/filedetails/ShareDetailsPage.qml
+++ b/src/gui/filedetails/ShareDetailsPage.qml
@@ -87,7 +87,6 @@ Page {
readonly property bool isFolderItem: shareModelData.sharedItemType === ShareModel.SharedItemTypeFolder
readonly property bool isEncryptedItem: shareModelData.sharedItemType === ShareModel.SharedItemTypeEncryptedFile || shareModelData.sharedItemType === ShareModel.SharedItemTypeEncryptedFolder || shareModelData.sharedItemType === ShareModel.SharedItemTypeEncryptedTopLevelFolder
- property bool waitingForNoteEnabledChange: false
property bool waitingForExpireDateEnabledChange: false
property bool waitingForPasswordProtectEnabledChange: false
property bool waitingForExpireDateChange: false
@@ -101,7 +100,7 @@ Page {
}
function resetNoteField() {
- noteTextEdit.text = note;
+ noteTextArea.text = note;
waitingForNoteChange = false;
}
@@ -133,7 +132,7 @@ Page {
function resetNoteEnabledField() {
noteEnabledMenuItem.checked = noteEnabled;
- waitingForNoteEnabledChange = false;
+ waitingForNoteChange = false;
}
function resetExpireDateEnabledField() {
@@ -662,16 +661,18 @@ Page {
checkable: true
checked: root.noteEnabled
text: qsTr("Note to recipient")
- enabled: !root.waitingForNoteEnabledChange
+ enabled: !root.waitingForNoteChange
onClicked: {
- root.toggleNoteToRecipient(checked);
- root.waitingForNoteEnabledChange = true;
+ if (!checked && root.note !== "") {
+ root.setNote("");
+ root.waitingForNoteChange = true;
+ }
}
NCBusyIndicator {
anchors.fill: parent
- visible: root.waitingForNoteEnabledChange
+ visible: root.waitingForNoteChange && !noteEnabledMenuItem.checked
running: visible
z: 1
}
@@ -682,7 +683,7 @@ Page {
height: visible ? implicitHeight : 0
spacing: scrollContentsColumn.indicatorSpacing
- visible: root.noteEnabled
+ visible: noteEnabledMenuItem.checked
Image {
Layout.preferredWidth: scrollContentsColumn.indicatorItemWidth
@@ -697,27 +698,25 @@ Page {
sourceSize.height: scrollContentsColumn.rowIconWidth
}
- NCInputTextEdit {
- id: noteTextEdit
+ NCInputTextArea {
+ id: noteTextArea
Layout.fillWidth: true
- height: visible ? Math.max(Style.talkReplyTextFieldPreferredHeight, contentHeight) : 0
+ // no height here -- let the textarea figure it out how much it needs
submitButton.height: Math.min(Style.talkReplyTextFieldPreferredHeight, height - 2)
text: root.note
- enabled: root.noteEnabled &&
- !root.waitingForNoteChange &&
- !root.waitingForNoteEnabledChange
+ placeholderText: qsTr("Enter a note for the recipient")
+ enabled: noteEnabledMenuItem.checked && !root.waitingForNoteChange
- onEditingFinished: if(text !== root.note) {
+ onEditingFinished: if (text !== "" && text !== root.note) {
root.setNote(text);
root.waitingForNoteChange = true;
}
NCBusyIndicator {
anchors.fill: parent
- visible: root.waitingForNoteChange ||
- root.waitingForNoteEnabledChange
+ visible: root.waitingForNoteChange && noteEnabledMenuItem.checked
running: visible
z: 1
}
diff --git a/src/gui/filedetails/ShareView.qml b/src/gui/filedetails/ShareView.qml
index 51bbb891a8897..1b7b9ca7de067 100644
--- a/src/gui/filedetails/ShareView.qml
+++ b/src/gui/filedetails/ShareView.qml
@@ -263,7 +263,6 @@ ColumnLayout {
onToggleHideDownload: shareModel.toggleHideDownloadFromQml(model.share, enable)
onTogglePasswordProtect: shareModel.toggleSharePasswordProtectFromQml(model.share, enable)
onToggleExpirationDate: shareModel.toggleShareExpirationDateFromQml(model.share, enable)
- onToggleNoteToRecipient: shareModel.toggleShareNoteToRecipientFromQml(model.share, enable)
onPermissionModeChanged: shareModel.changePermissionModeFromQml(model.share, permissionMode)
onSetLinkShareLabel: shareModel.setLinkShareLabelFromQml(model.share, label)
diff --git a/src/gui/filedetails/sharemodel.cpp b/src/gui/filedetails/sharemodel.cpp
index e3be7122aea61..c23ed0b05aeb3 100644
--- a/src/gui/filedetails/sharemodel.cpp
+++ b/src/gui/filedetails/sharemodel.cpp
@@ -1088,26 +1088,6 @@ void ShareModel::toggleShareExpirationDateFromQml(const QVariant &share, const b
toggleShareExpirationDate(ptr, enable);
}
-void ShareModel::toggleShareNoteToRecipient(const SharePtr &share, const bool enable) const
-{
- if (share.isNull()) {
- return;
- }
-
- const QString note = enable ? tr("Enter a note for the recipient") : QString();
- if (const auto linkShare = share.objectCast()) {
- linkShare->setNote(note);
- } else if (const auto userGroupShare = share.objectCast()) {
- userGroupShare->setNote(note);
- }
-}
-
-void ShareModel::toggleShareNoteToRecipientFromQml(const QVariant &share, const bool enable) const
-{
- const auto ptr = share.value();
- toggleShareNoteToRecipient(ptr, enable);
-}
-
void ShareModel::changePermissionModeFromQml(const QVariant &share, const OCC::ShareModel::SharePermissionsMode permissionMode)
{
const auto sharePtr = share.value();
diff --git a/src/gui/filedetails/sharemodel.h b/src/gui/filedetails/sharemodel.h
index 12b262bde7a5a..c40329b3cf3b3 100644
--- a/src/gui/filedetails/sharemodel.h
+++ b/src/gui/filedetails/sharemodel.h
@@ -190,8 +190,6 @@ public slots:
void toggleSharePasswordProtectFromQml(const QVariant &share, const bool enable);
void toggleShareExpirationDate(const OCC::SharePtr &share, const bool enable) const;
void toggleShareExpirationDateFromQml(const QVariant &share, const bool enable) const;
- void toggleShareNoteToRecipient(const OCC::SharePtr &share, const bool enable) const;
- void toggleShareNoteToRecipientFromQml(const QVariant &share, const bool enable) const;
void changePermissionModeFromQml(const QVariant &share, const OCC::ShareModel::SharePermissionsMode permissionMode);
void setLinkShareLabel(const QSharedPointer &linkShare, const QString &label) const;
diff --git a/test/testsharemodel.cpp b/test/testsharemodel.cpp
index 1385dc73dc06c..c1e92bba66cb6 100644
--- a/test/testsharemodel.cpp
+++ b/test/testsharemodel.cpp
@@ -820,7 +820,7 @@ private slots:
helper.resetTestData();
// Test with an existing link share.
- // This one has a pre-existing password
+ // This one has a pre-existing note
helper.appendShareReplyData(_testLinkShareDefinition);
QCOMPARE(helper.shareCount(), 1);
@@ -844,7 +844,7 @@ private slots:
const auto linkSharePtr = sharePtr.dynamicCast(); // Need to connect to signal
QSignalSpy noteSet(linkSharePtr.data(), &LinkShare::noteSet);
- model.toggleShareNoteToRecipient(sharePtr, false);
+ model.setShareNote(sharePtr, QStringLiteral(""));
QVERIFY(noteSet.wait(3000));
QCOMPARE(shareIndex.data(ShareModel::NoteEnabledRole).toBool(), false);
@@ -852,7 +852,7 @@ private slots:
model.setShareNote(sharePtr, note);
QVERIFY(noteSet.wait(3000));
QCOMPARE(shareIndex.data(ShareModel::NoteEnabledRole).toBool(), true);
- // The model stores the recently set password.
+ // The model stores the recently set note.
// We want to present the user with it in the UI while the model is alive
QCOMPARE(shareIndex.data(ShareModel::NoteRole).toString(), note);
}