Compare commits

..

5 Commits

Author SHA1 Message Date
Heiko Becker
df8a09ce90 GIT_SILENT Update Appstream for new release
(cherry picked from commit b009b9aac0)
2026-02-28 13:22:00 +01:00
l10n daemon script
150b9c4038 GIT_SILENT Sync po/docbooks with svn 2026-02-28 01:48:45 +00:00
James Graham
7550b2b000 Apply 1 suggestion(s) to 1 file(s)
Co-authored-by: Tobias Fella <fella@posteo.de>
2026-02-27 14:15:30 +00:00
James Graham
daa66c4abc Treat all text in a code block as plain, i.e. don't format based on markdown. 2026-02-27 14:15:30 +00:00
James Graham
e0b229e040 Focus the charbar when clicking the reply button. 2026-02-27 13:29:04 +00:00
20 changed files with 106 additions and 280 deletions

View File

@@ -109,34 +109,6 @@ TestCase {
compare(spyCursor.count, 5);
}
function test_longFixedChars(): void {
textEdit.forceActiveFocus();
testHelper.setFixedChars("111", "222");
compare(textEdit.text, "111222");
compare(textEdit.cursorPosition, 3);
compare(spyCursor.count, 0);
keyClick("b");
compare(textEdit.text, "111b222");
compare(textEdit.cursorPosition, 4);
compare(spyCursor.count, 1);
keyClick(Qt.Key_Left);
compare(textEdit.text, "111b222");
compare(textEdit.cursorPosition, 3);
compare(spyCursor.count, 2);
keyClick(Qt.Key_Left);
compare(textEdit.text, "111b222");
compare(textEdit.cursorPosition, 3);
compare(spyCursor.count, 3);
keyClick(Qt.Key_Right);
compare(textEdit.text, "111b222");
compare(textEdit.cursorPosition, 4);
compare(spyCursor.count, 4);
keyClick(Qt.Key_Right);
compare(textEdit.text, "111b222");
compare(textEdit.cursorPosition, 4);
compare(spyCursor.count, 5);
}
function test_document(): void {
// We can't get to the QTextDocument from QML so we have to use a helper function.
compare(testHelper.compareDocuments(textEdit.textDocument), true);

View File

@@ -626,10 +626,10 @@ void TextHandlerTest::componentOutput_data()
MessageComponent{MessageComponentType::Code, u"Some code"_s, QVariantMap{{u"class"_s, u"html"_s}}}};
QTest::newRow("quote") << u"<p>Text</p>\n<blockquote>\n<p>blockquote</p>\n</blockquote>"_s
<< QList<MessageComponent>{MessageComponent{MessageComponentType::Text, u"Text"_s, {}},
MessageComponent{MessageComponentType::Quote, u"\"blockquote\""_s, {}}};
MessageComponent{MessageComponentType::Quote, u"blockquote"_s, {}}};
QTest::newRow("multiple paragraph quote") << u"<blockquote>\n<p>blockquote</p>\n<p>next paragraph</p>\n</blockquote>"_s
<< QList<MessageComponent>{
MessageComponent{MessageComponentType::Quote, u"<p>\"blockquote</p>\n<p>next paragraph\"</p>"_s, {}}};
MessageComponent{MessageComponentType::Quote, u"<p>blockquote</p>\n<p>next paragraph</p>"_s, {}}};
QTest::newRow("no tag first paragraph") << u"Text\n<p>Text</p>"_s
<< QList<MessageComponent>{MessageComponent{MessageComponentType::Text, u"Text"_s, {}},
MessageComponent{MessageComponentType::Text, u"Text"_s, {}}};

View File

@@ -490,6 +490,7 @@
<content_attribute id="social-chat">intense</content_attribute>
</content_rating>
<releases>
<release version="25.12.3" date="2026-03-05"/>
<release version="25.12.2" date="2026-02-05"/>
<release version="25.12.1" date="2026-01-08"/>
<release version="25.12.0" date="2025-12-11"/>

View File

@@ -10,7 +10,7 @@ msgstr ""
"Project-Id-Version: neochat\n"
"Report-Msgid-Bugs-To: https://bugs.kde.org\n"
"POT-Creation-Date: 2026-02-27 00:43+0000\n"
"PO-Revision-Date: 2026-02-26 08:47+0100\n"
"PO-Revision-Date: 2026-02-27 07:24+0100\n"
"Last-Translator: Josep M. Ferrer <txemaq@gmail.com>\n"
"Language-Team: Catalan <kde-i18n-ca@kde.org>\n"
"Language: ca\n"
@@ -18,7 +18,7 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=n != 1;\n"
"X-Generator: Lokalize 25.04.0\n"
"X-Generator: Lokalize 25.12.2\n"
#: src/app/controller.cpp:170
#, kde-format
@@ -1733,14 +1733,13 @@ msgstr "Surt"
#, kde-format
msgctxt "As in enter starts a new line in the chat bar"
msgid "Enter starts a new line"
msgstr ""
msgstr "Retorn comença una línia nova"
#: src/chatbar/ChatBar.qml:85
#, fuzzy, kde-format
#| msgid "%1 sent a message"
#, kde-format
msgctxt "As in enter starts send the chat message"
msgid "Enter sends the message"
msgstr "%1 ha enviat un missatge"
msgstr "Retorn envia el missatge"
#: src/chatbar/ChatBarCore.qml:79
#, kde-format
@@ -2039,13 +2038,13 @@ msgstr "Envia un missatge de veu"
#, kde-format
msgctxt "@action:button"
msgid "Hide Rich Text Controls"
msgstr ""
msgstr "Oculta els controls de text enriquit"
#: src/chatbar/SendBar.qml:195
#, kde-format
msgctxt "@action:button"
msgid "Show Rich Text Controls"
msgstr ""
msgstr "Mostra els controls de text enriquit"
#: src/chatbar/SendBar.qml:209
#, kde-format

View File

@@ -10,7 +10,7 @@ msgstr ""
"Project-Id-Version: neochat\n"
"Report-Msgid-Bugs-To: https://bugs.kde.org\n"
"POT-Creation-Date: 2026-02-27 00:43+0000\n"
"PO-Revision-Date: 2026-02-26 08:47+0100\n"
"PO-Revision-Date: 2026-02-27 07:24+0100\n"
"Last-Translator: Josep M. Ferrer <txemaq@gmail.com>\n"
"Language-Team: Catalan <kde-i18n-ca@kde.org>\n"
"Language: ca@valencia\n"
@@ -18,7 +18,7 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=n != 1;\n"
"X-Generator: Lokalize 25.04.0\n"
"X-Generator: Lokalize 25.12.2\n"
#: src/app/controller.cpp:170
#, kde-format
@@ -1734,14 +1734,13 @@ msgstr "Ix"
#, kde-format
msgctxt "As in enter starts a new line in the chat bar"
msgid "Enter starts a new line"
msgstr ""
msgstr "«Retorn» comença una línia nova"
#: src/chatbar/ChatBar.qml:85
#, fuzzy, kde-format
#| msgid "%1 sent a message"
#, kde-format
msgctxt "As in enter starts send the chat message"
msgid "Enter sends the message"
msgstr "%1 ha enviat un missatge"
msgstr "«Retorn» envia el missatge"
#: src/chatbar/ChatBarCore.qml:79
#, kde-format
@@ -2040,13 +2039,13 @@ msgstr "Envia un missatge de veu"
#, kde-format
msgctxt "@action:button"
msgid "Hide Rich Text Controls"
msgstr ""
msgstr "Oculta els controls de text enriquit"
#: src/chatbar/SendBar.qml:195
#, kde-format
msgctxt "@action:button"
msgid "Show Rich Text Controls"
msgstr ""
msgstr "Mostra els controls de text enriquit"
#: src/chatbar/SendBar.qml:209
#, kde-format
@@ -7740,7 +7739,3 @@ msgid "%2 is typing"
msgid_plural "%2 are typing"
msgstr[0] "%2 està escrivint"
msgstr[1] "%2 estan escrivint"
#~ msgctxt "@action:button"
#~ msgid "Rich Text"
#~ msgstr "Text enriquit"

View File

@@ -7,7 +7,7 @@ msgstr ""
"Project-Id-Version: neochat\n"
"Report-Msgid-Bugs-To: https://bugs.kde.org\n"
"POT-Creation-Date: 2026-02-27 00:43+0000\n"
"PO-Revision-Date: 2026-02-26 09:10+0200\n"
"PO-Revision-Date: 2026-02-27 09:12+0200\n"
"Last-Translator: Yaron Shahrabani <sh.yaron@gmail.com>\n"
"Language-Team: צוות התרגום של KDE ישראל\n"
"Language: he\n"
@@ -1200,31 +1200,23 @@ msgid "Unlock using Recovery Key"
msgstr "שחרור באמצעות מפתח שחזור"
#: src/app/qml/UnlockSSSSDialog.qml:52
#, fuzzy, kde-format
#| msgctxt "@info"
#| msgid ""
#| "If you have a security key or backup passphrase for this account, enter "
#| "it below or upload it as a file."
#, kde-format
msgctxt "@info"
msgid ""
"If you have a recovery key (also known as a “security key” or “backup "
"passphrase”), enter it below or upload it as a file."
msgstr ""
"אם יש לך מפתח אבטחה או ביטוי צופן לגיבוי לחשבון הזה, יש למלא אותו כאן או "
"להעלות אותו כקובץ."
"אם יש לך מפתח שחזור (ידוע גם בשם „מפתח אבטחה או ביטוי צופן לגיבוי”), יש "
מלא אותו כאן או להעלות אותו כקובץ."
#: src/app/qml/UnlockSSSSDialog.qml:56
#, fuzzy, kde-format
#| msgctxt "@label:textbox"
#| msgid "Security Key:"
#, kde-format
msgctxt "@label:textbox"
msgid "Recovery Key:"
msgstr "מפתח אבטחה:"
msgstr "מפתח שחזור:"
#: src/app/qml/UnlockSSSSDialog.qml:61
#, fuzzy, kde-format
#| msgctxt "@action:button"
#| msgid "Upload from File"
#, kde-format
msgctxt "@action:button"
msgid "Upload From File"
msgstr "העלאה מקובץ"
@@ -1242,23 +1234,16 @@ msgid "Unlock from Cross-Signing"
msgstr "שחרור נעילה מחתימה צולבת"
#: src/app/qml/UnlockSSSSDialog.qml:86
#, fuzzy, kde-format
#| msgctxt "@info"
#| msgid ""
#| "If you have previously verified this device, you can try loading the "
#| "backup key from other devices by clicking the button below."
#, kde-format
msgctxt "@info"
msgid ""
"If you have previously verified this device, you request encryption keys "
"from other verified devices."
msgstr ""
"אם אימתת את המכשיר הזה בעבר, אפשר לנסות לטעון את מפתח הגיבוי ממכשירים אחרים "
"בלחיצה על הכפתור שלהלן."
"אם אימתת את המכשיר הזה בעבר, אפשר לנסות לבקש את מפתחות ההצפנה ממכשירים אחרים."
#: src/app/qml/UnlockSSSSDialog.qml:91
#, fuzzy, kde-format
#| msgctxt "@action:button"
#| msgid "Request from other Devices"
#, kde-format
msgctxt "@action:button"
msgid "Request From Other Devices"
msgstr "בקשה מהתקנים אחרים"
@@ -1441,12 +1426,10 @@ msgid "Mutual Rooms"
msgstr "חדרים משותפים"
#: src/app/qml/UserDetailDialog.qml:424
#, fuzzy, kde-format
#| msgctxt "@info"
#| msgid "No rooms found"
#, kde-format
msgctxt "@info:label"
msgid "No rooms in common"
msgstr "לא נמצאו חדרים"
msgstr "אין חדרים במשותף"
#: src/app/qml/UserDetailDialog.qml:459
#, kde-format
@@ -4812,48 +4795,36 @@ msgid "Space Settings"
msgstr "הגדרות מרחב"
#: src/rooms/SpaceListContextMenu.qml:85 src/spaces/SpaceHomePage.qml:109
#, fuzzy, kde-format
#| msgctxt ""
#| "@action:button 'Report' as in 'Report this user to the administrators'"
#| msgid "Report…"
#, kde-format
msgctxt ""
"@action:button 'Report' as in 'Report this space to the administrators'"
msgid "Report…"
msgstr "דיווח…"
#: src/rooms/SpaceListContextMenu.qml:90 src/spaces/SpaceHomePage.qml:114
#, fuzzy, kde-format
#| msgctxt "@title:dialog"
#| msgid "Report User"
#, kde-format
msgctxt "@title:dialog"
msgid "Report Space"
msgstr "דיווח על משתמש"
msgstr "דיווח על מרחב"
#: src/rooms/SpaceListContextMenu.qml:91 src/spaces/SpaceHomePage.qml:115
#, fuzzy, kde-format
#| msgctxt "@info:placeholder"
#| msgid "Optionally give a reason for reporting this user"
#, kde-format
msgctxt "@info:placeholder"
msgid "Optionally give a reason for reporting this space"
msgstr "הסיבה לדיווח על המשתמש הזה כרשות"
msgstr "הסיבה לדיווח על המרחב הזה כרשות"
#: src/rooms/SpaceListContextMenu.qml:93 src/spaces/SpaceHomePage.qml:117
#, fuzzy, kde-format
#| msgctxt ""
#| "@action:button 'Report' as in 'Report this user to the administrators'"
#| msgid "Report"
#, kde-format
msgctxt ""
"@action:button 'Report' as in 'Report this space to the administrators'"
msgid "Report"
msgstr "דיווח"
#: src/rooms/SpaceListContextMenu.qml:97 src/spaces/SpaceHomePage.qml:121
#, fuzzy, kde-format
#| msgctxt "@title"
#| msgid "Report User"
#, kde-format
msgctxt "@title"
msgid "Report Space"
msgstr "דיווח על משתמש"
msgstr "דיווח על מרחב"
#: src/rooms/SpaceListContextMenu.qml:107
#, kde-format
@@ -6135,9 +6106,7 @@ msgid "Ignored Users"
msgstr "משתמשים מוחרגים"
#: src/settings/NeoChatSecurityPage.qml:43
#, fuzzy, kde-format
#| msgctxt "@title"
#| msgid "Messages"
#, kde-format
msgctxt "@title:group"
msgid "Messages"
msgstr "הודעות"
@@ -6159,8 +6128,7 @@ msgstr ""
"הקישורים המקדימות יושבתו בכל החדרים."
#: src/settings/NeoChatSecurityPage.qml:62
#, fuzzy, kde-format
#| msgid "Send typing notifications"
#, kde-format
msgctxt "@label:checkbox"
msgid "Send typing notifications"
msgstr "לשלוח התראות הקלדה"
@@ -6186,20 +6154,16 @@ msgid "Everyone"
msgstr "כולם"
#: src/settings/NeoChatSecurityPage.qml:93
#, fuzzy, kde-format
#| msgctxt "@option:check"
#| msgid "Anyone can find and join."
#, kde-format
msgctxt "@info:description"
msgid "Anyone can send you invites."
msgstr "כולם יוכלים למצוא ולהצטרף."
msgstr "כולם יכולים לשלוח לך הזמנות."
#: src/settings/NeoChatSecurityPage.qml:98
#, fuzzy, kde-format
#| msgctxt "Room permission type"
#| msgid "Ban users"
#, kde-format
msgctxt "@option:check"
msgid "Known users"
msgstr "חסימת משתמשים"
msgstr "משתמשים מוכרים"
#: src/settings/NeoChatSecurityPage.qml:99
#, kde-format
@@ -6270,12 +6234,10 @@ msgid "Import Keys"
msgstr "ייבוא מפתחות"
#: src/settings/NeoChatSecurityPage.qml:151
#, fuzzy, kde-format
#| msgctxt "@info"
#| msgid "Import encryption keys from a backup."
#, kde-format
msgctxt "@info"
msgid "Import encryption keys from a backup file."
msgstr "ייבוא מפתחות הצפנה מגיבוי."
msgstr "ייבוא מפתחות הצפנה מקובץ גיבוי."
#: src/settings/NeoChatSecurityPage.qml:157
#, kde-format
@@ -6296,12 +6258,10 @@ msgid "Export Keys"
msgstr "ייצוא מפתחות"
#: src/settings/NeoChatSecurityPage.qml:174
#, fuzzy, kde-format
#| msgctxt "@info"
#| msgid "Export this device's encryption keys."
#, kde-format
msgctxt "@info"
msgid "Export this device's encryption keys to a file."
msgstr "ייצוא מפתחות ההצפנה של המכשיר הזה."
msgstr "ייצוא מפתחות ההצפנה של המכשיר הזה לקובץ."
#: src/settings/NeoChatSecurityPage.qml:180
#, kde-format
@@ -7684,12 +7644,11 @@ msgstr[1] "הקלדה מצד %2"
msgstr[2] "הקלדה מצד %2"
msgstr[3] "הקלדה מצד %2"
#, fuzzy
#~| msgctxt "@label:textbox"
#~| msgid "Link Text:"
#~ msgctxt "@action:button"
#~ msgid "Rich Text"
#~ msgstr "טקסט קישור:"
#~ msgstr "טקסט עשיר"
#~ msgctxt "@action:button"
#~ msgid "Enter rich text mode"

View File

@@ -8,7 +8,7 @@ msgstr ""
"Project-Id-Version: neochat\n"
"Report-Msgid-Bugs-To: https://bugs.kde.org\n"
"POT-Creation-Date: 2026-02-27 00:43+0000\n"
"PO-Revision-Date: 2026-02-26 05:48+0100\n"
"PO-Revision-Date: 2026-02-27 05:34+0100\n"
"Last-Translator: Temuri Doghonadze <temuri.doghonadze@gmail.com>\n"
"Language-Team: Georgian <kde-i18n-doc@kde.org>\n"
"Language: ka\n"
@@ -1706,14 +1706,13 @@ msgstr "დატოვება"
#, kde-format
msgctxt "As in enter starts a new line in the chat bar"
msgid "Enter starts a new line"
msgstr ""
msgstr "Enter იწყებს ახალ ხაზს"
#: src/chatbar/ChatBar.qml:85
#, fuzzy, kde-format
#| msgid "%1 sent a message"
#, kde-format
msgctxt "As in enter starts send the chat message"
msgid "Enter sends the message"
msgstr "%1-მა გააგზავნ შეტყობინება"
msgstr "ღილაკი Enter აგზავნის შეტყობინება"
#: src/chatbar/ChatBarCore.qml:79
#, kde-format
@@ -2012,13 +2011,13 @@ msgstr "ხმოვანი შეტყობინების გაგზ
#, kde-format
msgctxt "@action:button"
msgid "Hide Rich Text Controls"
msgstr ""
msgstr "მდიდარი ტექსტის კონტროლის ელემენტების დამალვა"
#: src/chatbar/SendBar.qml:195
#, kde-format
msgctxt "@action:button"
msgid "Show Rich Text Controls"
msgstr ""
msgstr "მდიდარი ტექსტის კონტროლის ელემენტების ჩვენება"
#: src/chatbar/SendBar.qml:209
#, kde-format

View File

@@ -8,7 +8,7 @@ msgstr ""
"Project-Id-Version: neochat\n"
"Report-Msgid-Bugs-To: https://bugs.kde.org\n"
"POT-Creation-Date: 2026-02-27 00:43+0000\n"
"PO-Revision-Date: 2026-02-26 10:03+0100\n"
"PO-Revision-Date: 2026-02-27 10:53+0100\n"
"Last-Translator: Freek de Kruijf <freekdekruijf@kde.nl>\n"
"Language-Team: \n"
"Language: nl\n"
@@ -1729,14 +1729,13 @@ msgstr "Afsluiten"
#, kde-format
msgctxt "As in enter starts a new line in the chat bar"
msgid "Enter starts a new line"
msgstr ""
msgstr "Enter start een nieuwe regel"
#: src/chatbar/ChatBar.qml:85
#, fuzzy, kde-format
#| msgid "%1 sent a message"
#, kde-format
msgctxt "As in enter starts send the chat message"
msgid "Enter sends the message"
msgstr "%1 verzend een bericht"
msgstr "Enter verstuurt het bericht"
#: src/chatbar/ChatBarCore.qml:79
#, kde-format
@@ -2035,13 +2034,13 @@ msgstr "Een stembericht versturen"
#, kde-format
msgctxt "@action:button"
msgid "Hide Rich Text Controls"
msgstr ""
msgstr "Besturingen van opgemaakte tekst verbergen"
#: src/chatbar/SendBar.qml:195
#, kde-format
msgctxt "@action:button"
msgid "Show Rich Text Controls"
msgstr ""
msgstr "Besturingen van opgemaakte tekst tonen"
#: src/chatbar/SendBar.qml:209
#, kde-format

View File

@@ -11,7 +11,7 @@ msgstr ""
"Project-Id-Version: neochat\n"
"Report-Msgid-Bugs-To: https://bugs.kde.org\n"
"POT-Creation-Date: 2026-02-27 00:43+0000\n"
"PO-Revision-Date: 2026-02-26 08:46-0300\n"
"PO-Revision-Date: 2026-02-27 07:41-0300\n"
"Last-Translator: Marcus Gama <marcus.gama@gmail.com>\n"
"Language-Team: Brazilian Portuguese <kde-i18n-pt_BR@kde.org>\n"
"Language: pt_BR\n"
@@ -1731,14 +1731,13 @@ msgstr "Sair"
#, kde-format
msgctxt "As in enter starts a new line in the chat bar"
msgid "Enter starts a new line"
msgstr ""
msgstr "A tecla Enter inicia uma nova linha"
#: src/chatbar/ChatBar.qml:85
#, fuzzy, kde-format
#| msgid "%1 sent a message"
#, kde-format
msgctxt "As in enter starts send the chat message"
msgid "Enter sends the message"
msgstr "%1 enviou uma mensagem"
msgstr "A tecla Enter envia a mensagem"
#: src/chatbar/ChatBarCore.qml:79
#, kde-format
@@ -2037,13 +2036,13 @@ msgstr "Enviar uma mensagem de voz"
#, kde-format
msgctxt "@action:button"
msgid "Hide Rich Text Controls"
msgstr ""
msgstr "Ocultar controles de formatação de texto"
#: src/chatbar/SendBar.qml:195
#, kde-format
msgctxt "@action:button"
msgid "Show Rich Text Controls"
msgstr ""
msgstr "Mostrar controles de formatação de texto"
#: src/chatbar/SendBar.qml:209
#, kde-format

View File

@@ -10,7 +10,7 @@ msgstr ""
"Project-Id-Version: neochat\n"
"Report-Msgid-Bugs-To: https://bugs.kde.org\n"
"POT-Creation-Date: 2026-02-27 00:43+0000\n"
"PO-Revision-Date: 2026-02-26 07:00+0100\n"
"PO-Revision-Date: 2026-02-27 07:39+0100\n"
"Last-Translator: Matjaž Jeran <matjaz.jeran@amis.net>\n"
"Language-Team: Slovenian <lugos-slo@lugos.si>\n"
"Language: sl\n"
@@ -1720,14 +1720,13 @@ msgstr "Zapusti"
#, kde-format
msgctxt "As in enter starts a new line in the chat bar"
msgid "Enter starts a new line"
msgstr ""
msgstr "Tipka enter začenja novo vrstico"
#: src/chatbar/ChatBar.qml:85
#, fuzzy, kde-format
#| msgid "%1 sent a message"
#, kde-format
msgctxt "As in enter starts send the chat message"
msgid "Enter sends the message"
msgstr "%1 je poslal sporočilo"
msgstr "Tipka enter poišilja sporočilo"
#: src/chatbar/ChatBarCore.qml:79
#, kde-format
@@ -2026,13 +2025,13 @@ msgstr "Pošlji glasovno sporočilo"
#, kde-format
msgctxt "@action:button"
msgid "Hide Rich Text Controls"
msgstr ""
msgstr "Skrij kontrole obogatenega besedila"
#: src/chatbar/SendBar.qml:195
#, kde-format
msgctxt "@action:button"
msgid "Show Rich Text Controls"
msgstr ""
msgstr "Pokaži kontrole obogatenega besedila"
#: src/chatbar/SendBar.qml:209
#, kde-format

View File

@@ -9,7 +9,7 @@ msgstr ""
"Project-Id-Version: neochat\n"
"Report-Msgid-Bugs-To: https://bugs.kde.org\n"
"POT-Creation-Date: 2026-02-27 00:43+0000\n"
"PO-Revision-Date: 2026-02-26 07:53+0300\n"
"PO-Revision-Date: 2026-02-27 07:54+0300\n"
"Last-Translator: Emir SARI <emir_sari@icloud.com>\n"
"Language-Team: Turkish <kde-l10n-tr@kde.org>\n"
"Language: tr\n"
@@ -1718,14 +1718,13 @@ msgstr "Çık"
#, kde-format
msgctxt "As in enter starts a new line in the chat bar"
msgid "Enter starts a new line"
msgstr ""
msgstr "Giriş düğmesi yeni bir satır başlatır"
#: src/chatbar/ChatBar.qml:85
#, fuzzy, kde-format
#| msgid "%1 sent a message"
#, kde-format
msgctxt "As in enter starts send the chat message"
msgid "Enter sends the message"
msgstr "%1 bir ileti gönderdi"
msgstr "Giriş düğmesi iletiyi gönderir"
#: src/chatbar/ChatBarCore.qml:79
#, kde-format
@@ -2024,13 +2023,13 @@ msgstr "Ses İletisi Gönder"
#, kde-format
msgctxt "@action:button"
msgid "Hide Rich Text Controls"
msgstr ""
msgstr "Zengin Metin Denetimlerini Gizle"
#: src/chatbar/SendBar.qml:195
#, kde-format
msgctxt "@action:button"
msgid "Show Rich Text Controls"
msgstr ""
msgstr "Zengin Metin Denetimlerini Göster"
#: src/chatbar/SendBar.qml:209
#, kde-format

View File

@@ -9,7 +9,7 @@ msgstr ""
"Project-Id-Version: neochat\n"
"Report-Msgid-Bugs-To: https://bugs.kde.org\n"
"POT-Creation-Date: 2026-02-27 00:43+0000\n"
"PO-Revision-Date: 2026-02-26 09:59+0200\n"
"PO-Revision-Date: 2026-02-27 16:30+0200\n"
"Last-Translator: Yuri Chornoivan <yurchor@ukr.net>\n"
"Language-Team: Ukrainian <trans-uk@lists.fedoraproject.org>\n"
"Language: uk\n"
@@ -1729,14 +1729,13 @@ msgstr "Вийти"
#, kde-format
msgctxt "As in enter starts a new line in the chat bar"
msgid "Enter starts a new line"
msgstr ""
msgstr "Клавіша Enter починає новий рядок"
#: src/chatbar/ChatBar.qml:85
#, fuzzy, kde-format
#| msgid "%1 sent a message"
#, kde-format
msgctxt "As in enter starts send the chat message"
msgid "Enter sends the message"
msgstr "%1 надіслано повідомлення"
msgstr "Клавіша Enter надсилає повідомлення"
#: src/chatbar/ChatBarCore.qml:79
#, kde-format
@@ -2035,13 +2034,13 @@ msgstr "Надіслати голосове повідомлення"
#, kde-format
msgctxt "@action:button"
msgid "Hide Rich Text Controls"
msgstr ""
msgstr "Приховати керування форматованим текстом"
#: src/chatbar/SendBar.qml:195
#, kde-format
msgctxt "@action:button"
msgid "Show Rich Text Controls"
msgstr ""
msgstr "Показати керування форматованим текстом"
#: src/chatbar/SendBar.qml:209
#, kde-format

View File

@@ -1684,12 +1684,10 @@ msgid "Enter starts a new line"
msgstr ""
#: src/chatbar/ChatBar.qml:85
#, fuzzy, kde-format
#| msgctxt "@action:button"
#| msgid "Send message"
#, kde-format
msgctxt "As in enter starts send the chat message"
msgid "Enter sends the message"
msgstr "发送消息"
msgstr ""
#: src/chatbar/ChatBarCore.qml:79
#, kde-format

View File

@@ -135,23 +135,7 @@ QString ChatBarCache::relationMessage() const
return {};
}
if (auto [event, _] = m_room->getEvent(m_relationId); event != nullptr) {
return EventHandler::rawMessageBody(*event);
}
return {};
}
QList<MessageComponent> ChatBarCache::relationComponents() const
{
if (!m_room) {
qCWarning(ChatBar) << "ChatBarCache:" << __FUNCTION__ << "called after room was deleted";
return {};
}
if (m_relationId.isEmpty()) {
return {};
}
if (auto [event, _] = m_room->getEvent(m_relationId); event != nullptr) {
TextHandler handler;
return TextHandler().textComponents(EventHandler::rawMessageBody(*event), EventHandler::messageBodyInputFormat(*event), m_room, event);
return EventHandler::markdownBody(event);
}
return {};
}

View File

@@ -15,7 +15,6 @@ namespace Quotient
class RoomMember;
}
struct MessageComponent;
class NeoChatRoom;
/**
@@ -92,6 +91,13 @@ class ChatBarCache : public QObject
*/
Q_PROPERTY(bool relationAuthorIsPresent READ relationAuthorIsPresent NOTIFY relationAuthorIsPresentChanged)
/**
* @brief The content of the related message.
*
* Will be QString() if no related message.
*/
Q_PROPERTY(QString relationMessage READ relationMessage NOTIFY relationIdChanged)
/**
* @brief Whether the chat bar is replying in a thread.
*/
@@ -141,7 +147,6 @@ public:
bool relationAuthorIsPresent() const;
QString relationMessage() const;
QList<MessageComponent> relationComponents() const;
bool isThreaded() const;
QString threadId() const;

View File

@@ -188,7 +188,7 @@ void ChatMarkdownHelper::checkMarkdown(int position, int charsRemoved, int chars
// This can happen when formatting is applied.
if (charsAdded == charsRemoved) {
return;
} else if (m_textItem->isCompleting || charsRemoved > charsAdded || charsAdded - charsRemoved > 1) {
} else if ((m_textItem->textFormat() && m_textItem->textFormat() == Qt::TextFormat::PlainText) || m_textItem->isCompleting || charsRemoved > charsAdded || charsAdded - charsRemoved > 1) {
updatePosition(std::max(0, position - charsRemoved + charsAdded));
return;
}

View File

@@ -9,6 +9,7 @@
#include <QTextCursor>
#include <Kirigami/Platform/PlatformTheme>
#include <qtextdocument.h>
#include "chatbarsyntaxhighlighter.h"
#include "neochatroom.h"
@@ -164,52 +165,23 @@ void ChatTextItemHelper::initialize()
int finalCursorPos = cursor.position();
if (doc->isEmpty() && !m_initialFragment.isEmpty()) {
cursor.insertFragment(m_initialFragment);
if (cursor.blockFormat().bottomMargin() > 0) {
auto blockFormat = cursor.blockFormat();
blockFormat.setBottomMargin(0);
cursor.setBlockFormat(blockFormat);
}
finalCursorPos = cursor.position();
}
if (!m_fixedStartChars.isEmpty()) {
if (!m_fixedStartChars.isEmpty() && doc->characterAt(0) != m_fixedStartChars) {
cursor.movePosition(QTextCursor::Start);
cursor.movePosition(QTextCursor::NextCharacter, QTextCursor::KeepAnchor, m_fixedStartChars.length());
if (cursor.selectedText() != m_fixedStartChars) {
cursor.movePosition(QTextCursor::Start);
cursor.insertText(m_fixedStartChars);
finalCursorPos += m_fixedStartChars.length();
}
cursor.insertText(m_fixedStartChars);
finalCursorPos += m_fixedStartChars.length();
}
if (!m_fixedStartChars.isEmpty()) {
if (!m_fixedStartChars.isEmpty() && doc->characterAt(doc->characterCount()) != m_fixedStartChars) {
cursor.movePosition(QTextCursor::End);
cursor.movePosition(QTextCursor::PreviousCharacter, QTextCursor::KeepAnchor, m_fixedEndChars.length());
if (cursor.selectedText() != m_fixedEndChars) {
cursor.movePosition(QTextCursor::End);
cursor.insertText(m_fixedEndChars);
}
cursor.keepPositionOnInsert();
cursor.insertText(m_fixedEndChars);
}
setCursorPosition(finalCursorPos);
cursor.endEditBlock();
qWarning() << doc->toRawText();
const auto blockProperties = cursor.blockFormat().properties();
for (const auto &property : blockProperties.keys()) {
qWarning() << static_cast<QTextFormat::Property>(property) << blockProperties[property];
}
const auto textProperties = cursor.charFormat().properties();
for (const auto &property : textProperties.keys()) {
qWarning() << static_cast<QTextFormat::Property>(property) << textProperties[property];
}
const auto currentList = cursor.currentList();
if (currentList) {
const auto listProperties = currentList->format().properties();
for (const auto &property : listProperties.keys()) {
qWarning() << static_cast<QTextFormat::Property>(property) << listProperties[property];
}
}
m_initializingChars = false;
}

View File

@@ -402,9 +402,9 @@ QString TextHandler::stripBlockTags(QString string, const QString &tagType) cons
}
// This is not a normal quotation mark but U+201C
string.insert(startQuotationIndex, u"\""_s);
string.insert(startQuotationIndex, u'');
// This is U+201D
string.insert(endQuotationIndex, u"\""_s);
string.insert(endQuotationIndex, u'');
}
return string;

View File

@@ -13,10 +13,8 @@
#include "enums/chatbartype.h"
#include "enums/messagecomponenttype.h"
#include "enums/richformat.h"
#include "messagecomponent.h"
#include "messagecontentmodel.h"
#include "neochatroom.h"
#include "texthandler.h"
namespace
{
@@ -53,18 +51,6 @@ ChatBarMessageContentModel::ChatBarMessageContentModel(QObject *parent)
textItem->setRoom(m_room);
}
}
// We can't guarantee whether room or type is intialised first so we have to handle.
if (!m_room || !unhandledTypeChange) {
return;
}
connectCache(m_room->cacheForType(*unhandledTypeChange));
unhandledTypeChange = std::nullopt;
const auto newCache = m_room->cacheForType(m_type);
if (newCache && newCache->isEditing()) {
initializeEdit();
return;
}
initializeFromCache();
});
connect(this, &ChatBarMessageContentModel::typeChanged, this, [this](ChatBarType::Type oldType) {
for (const auto &component : std::as_const(m_components)) {
@@ -73,15 +59,9 @@ ChatBarMessageContentModel::ChatBarMessageContentModel(QObject *parent)
}
}
if (!m_room) {
unhandledTypeChange = oldType;
return;
}
connectCache(m_room->cacheForType(oldType));
const auto newCache = m_room->cacheForType(m_type);
if (newCache && newCache->isEditing()) {
initializeEdit();
return;
}
initializeFromCache();
});
connect(m_markdownHelper, &ChatMarkdownHelper::unhandledBlockFormat, this, &ChatBarMessageContentModel::insertStyleAtCursor);
@@ -110,8 +90,9 @@ void ChatBarMessageContentModel::connectCache(ChatBarCache *oldCache)
}
const auto currentCache = m_room->cacheForType(m_type);
updateReplyModel();
refocusCurrentComponent();
if (currentCache->isEditing()) {
initializeEdit();
initializeFromCache();
}
});
connect(m_room->cacheForType(m_type), &ChatBarCache::attachmentPathChanged, this, [this]() {
@@ -171,38 +152,6 @@ void ChatBarMessageContentModel::initializeFromCache()
Q_EMIT focusRowChanged();
}
void ChatBarMessageContentModel::initializeEdit()
{
clearModel();
const auto currentCache = m_room->cacheForType(m_type);
auto components = currentCache->relationComponents();
if (components.isEmpty()) {
initializeModel();
return;
}
beginResetModel();
std::ranges::for_each(components, [this](MessageComponent component) {
if (MessageComponentType::isTextType(component.type)) {
const auto textItemWrapper = new ChatTextItemHelper(this);
const auto initialFragment = component.type == MessageComponentType::Code ? QTextDocumentFragment::fromPlainText(component.display)
: QTextDocumentFragment::fromHtml(component.display);
textItemWrapper->setInitialFragment(initialFragment);
textItemWrapper->setRoom(m_room);
textItemWrapper->setType(m_type);
if (component.type == MessageComponentType::Quote) {
textItemWrapper->setFixedChars(u"\""_s, u"\""_s);
}
component.attributes.insert(TextItemKey, QVariant::fromValue<ChatTextItemHelper *>(textItemWrapper));
connectTextItem(textItemWrapper);
}
m_components += component;
});
endResetModel();
}
ChatBarType::Type ChatBarMessageContentModel::type() const
{
return m_type;

View File

@@ -130,12 +130,10 @@ Q_SIGNALS:
private:
ChatBarType::Type m_type = ChatBarType::None;
std::optional<ChatBarType::Type> unhandledTypeChange = std::nullopt;
void connectCache(ChatBarCache *oldCache = nullptr);
void initializeModel(const QString &initialText = {});
void initializeFromCache();
void initializeEdit();
std::optional<QString> getReplyEventId() override;