{forwardedUsers.map((user, index) => (
No access data available
From ac920166754309a2de58f05d1c4026870ec0f2b2 Mon Sep 17 00:00:00 2001
From: souravson1
Date: Tue, 24 Feb 2026 10:48:15 +0530
Subject: [PATCH 3/3] Styling FileAccessStatusList Dialog and Buttons
merged conflicts
Bug: #55
Test: Verified above desktop changes with android device
---
_locales/ar.xml | 4 +-
_locales/az.xml | 22 +++---
_locales/bg.xml | 22 +++---
_locales/en.xml | 38 ++++-----
.../dialogs/FileAccessStatusDialog.tsx | 11 ++-
.../src/components/message/Message.tsx | 78 +------------------
6 files changed, 54 insertions(+), 121 deletions(-)
diff --git a/_locales/ar.xml b/_locales/ar.xml
index 07b1eb1b..d1c335f9 100644
--- a/_locales/ar.xml
+++ b/_locales/ar.xml
@@ -1,7 +1,7 @@
- Delta Chat
+ Privitty Chatموافقإلغاءنعم
@@ -186,7 +186,7 @@
السمةاللغةاستخدام الرموز التعبيرية بالنظام
- Delta Chat تعطيل الرموز التعبيرية المدمجة في
+ Privitty Chat تعطيل الرموز التعبيرية المدمجة في المحادثاتأصوات خلال الدردشأخرى
diff --git a/_locales/az.xml b/_locales/az.xml
index c3127d11..d44bade3 100644
--- a/_locales/az.xml
+++ b/_locales/az.xml
@@ -1,7 +1,7 @@
- Delta Chat
+ Privitty ChatOKImtinaBəli
@@ -202,7 +202,7 @@
%d yeni messaj%d yeni messaj
- Başqalarının bu qrup daxilində cavab verməsinə imkan verən ilk mesajı yaradın. \n\n• Bütün üzvlər Delta Chat istifadə etsələr daha yaxşıdır. \n\n• İlk mesajı çatdırmaq bir müddət ala bilər.
+ Başqalarının bu qrup daxilində cavab verməsinə imkan verən ilk mesajı yaradın. \n\n• Bütün üzvlər Privitty Chat istifadə etsələr daha yaxşıdır. \n\n• İlk mesajı çatdırmaq bir müddət ala bilər.Ləğv etmək üçün sürüşdürünBir səsli mesajı yazmaq üçün toxunun və saxlayın, göndərmək üçün buraxınQutu boşdur.\nYeni çata başlamaq üçün \"+\" işarəsinə toxunun.
@@ -245,7 +245,7 @@
Serverinə daxil olMövcud e-mail hesabı ilə daxil olunMəlum elektron poçt provayderləri üçün əlavə parametrlər avtomatik olaraq quraşdırılır. Bəzən IMAP-ın web məkanında aktiv olması lazımdır. Yardım üçün e-poçt provayderinizə və ya dostlarınıza müraciət edin.
- Delta Chat serverləri yoxdur, məlumatlarınız cihazınızda qalır!
+ Privitty Chat serverləri yoxdur, məlumatlarınız cihazınızda qalır!GələnIMAP loginiIMAP server
@@ -259,7 +259,7 @@
SMTP təhlükəsizliyiYetkiləndirmə metoduSadələşdirilmiş tənzimləmə ilə davam edirsiniz?
- Daxil edilmiş e-poçt ünvanı sadələşdirilmiş bir quraşdırma (OAuth2) dəstəkləyir. \n\nNövbəti addımda Delta Chat e-poçt tətbiqinizlə söhbət etməyə icazə verin. \n\n Delta Chat serverləri, cihazınızda qalır!
+ Daxil edilmiş e-poçt ünvanı sadələşdirilmiş bir quraşdırma (OAuth2) dəstəkləyir. \n\nNövbəti addımda Privitty Chat e-poçt tətbiqinizlə söhbət etməyə icazə verin. \n\n Privitty Chat serverləri, cihazınızda qalır!Sertifikat yoxlanmalarıXahiş edirik düzgün bir e-poçt ünvanı daxil etXahiş edirik, düzgün bir server / IP ünvanı daxil et
@@ -316,7 +316,7 @@
Bildirişlər aradan qaldırılırsa, başqalarının oxuduğu bildirişləri görə bilməyəcəksiniz.Açar edarəetməsiSistem emojisini istifadə edin
- Emoji Delta chat üçün daxili dəstəyi bağlayın.
+ Emoji Privitty chat üçün daxili dəstəyi bağlayın. ÇatlarÇatda olan səslərLog-a bax
@@ -343,7 +343,7 @@
Bu seçimi ləğv etsəniz, serverinizin və digər müştərilərinizin müvafiq olaraq konfiqurasiya olunduğundan əmin olun. \n\nAyrıca şeylər işləməyəcəkdir.Göndərilmişlərin qovluğunu izləyinÖzünə kopya göndər
- DeltaChat qovluğuna avtomatik keçid
+ PrivittyChat qovluğuna avtomatik keçidÇat söhbətləri Daxil olanlar qovluğunun yığılmaması üçün taşınırKlassik e-poçtları göstərXeyir, ancaq çatlar
@@ -413,11 +413,11 @@
İzin tələb olunurDavam edin
- Delta Chat şəkillər və ya video çəkmək üçün kamera icazə tələb edir, lakin bu, əbədi imtina edilmişdir. Proqramın sistem ayarlarına gedib \"İcazələr\"-i seçin və \"kamera\" izni verin.
+ Privitty Chat şəkillər və ya video çəkmək üçün kamera icazə tələb edir, lakin bu, əbədi imtina edilmişdir. Proqramın sistem ayarlarına gedib \"İcazələr\"-i seçin və \"kamera\" izni verin.
- Delta Chat yer əlavə etmək üçün yer icazə tələb edir, lakin daimi olaraq rədd edilmişdir. \"İcazələr\"-i seçin və\"Yerləşmə\" izni verin.
- Delta Chat, fotoşəkilləri, videoları və ya səsləri əlavə etmək və ya ixrac etmək üçün saxlama icazəsini tələb edir, lakin bu daimi olaraq rədd edildi. Xahiş edirik tətbiq ayarları menyusuna davam edin, \"İzinlər\" seçin və \"Yaddaş\" funksiyasını aktivləşdirin.
- Delta Chat yer əlavə etmək üçün yer icazə tələb edir, lakin daimi olaraq rədd edilmişdir. \"İcazələr\"-i seçin və\"Yerləşmə\" izni verin.
+ Privitty Chat yer əlavə etmək üçün yer icazə tələb edir, lakin daimi olaraq rədd edilmişdir. \"İcazələr\"-i seçin və\"Yerləşmə\" izni verin.
+ Privitty Chat, fotoşəkilləri, videoları və ya səsləri əlavə etmək və ya ixrac etmək üçün saxlama icazəsini tələb edir, lakin bu daimi olaraq rədd edildi. Xahiş edirik tətbiq ayarları menyusuna davam edin, \"İzinlər\" seçin və \"Yaddaş\" funksiyasını aktivləşdirin.
+ Privitty Chat yer əlavə etmək üçün yer icazə tələb edir, lakin daimi olaraq rədd edilmişdir. \"İcazələr\"-i seçin və\"Yerləşmə\" izni verin. Şifrələnmiş mesaj
@@ -454,5 +454,5 @@
Loq mələfini açınLoq-faylı açın
- Delta Chat arxa fonda mesajları almaq üçün bura toxunun.
+ Privitty Chat arxa fonda mesajları almaq üçün bura toxunun.
diff --git a/_locales/bg.xml b/_locales/bg.xml
index 43fe5dc0..cab4b630 100644
--- a/_locales/bg.xml
+++ b/_locales/bg.xml
@@ -1,7 +1,7 @@
- Delta Chat
+ Privitty ChatOKОтказИзчистване на търсенето
@@ -42,7 +42,7 @@
ДеархивиранеИзключване на звукаИзчезващи съобщения
- Приложимо за всички членове на този чат, ако използват Delta Chat; в противен случай те пак могат да копират, записват и препращат съобщения или да използват други клиенти за електронна поща.
+ Приложимо за всички членове на този чат, ако използват Privitty Chat; в противен случай те пак могат да копират, записват и препращат съобщения или да използват други клиенти за електронна поща.ЗаписванеЧатМедия
@@ -318,7 +318,7 @@
Докоснете, за да отворитеСървър за видеочатВашият сървър за видеочат
-
+
Примери: https://meet.jit.si/$ROOM или basicwebrtc:https://вашият-сървърАко настройката е разрешена, можете да започвате видеочат от всеки чат. Изисква съвместимо приложение или браузър и от двете страни.Да се използва ли \"%1$s\" за поканване на други към видеочатове?\n\nСлед като тази настройка бъде зададена, ще можете да започвате видеочат от всеки чат. Тя ще замени предишната настройка за видеочатове, ако има такава.
@@ -482,9 +482,9 @@
Добавяне на допълнително устройствоУверете се, че и двете устройства са свързани към една и съща Wi-Fi или друга мрежаЩе бъде създаден QR код, чрез сканиране на който другото устройство може да копира акаунта.
- Инсталирайте Delta Chat на другото Ви устройство (https://get.delta.chat)
+ Инсталирайте Privitty Chat на другото Ви устройство (https://get.Privitty.chat)
- Стартирайте Delta Chat, докоснете \"Добавяне като допълнително устройство\" и сканирайте кода, показан тук
+ Стартирайте Privitty Chat, докоснете \"Добавяне като допълнително устройство\" и сканирайте кода, показан тукСканирайте, за да установите допълнително устройство за %1$sДобавяне като допълнително устройство
@@ -557,7 +557,7 @@
Влизане във Вашия акаунт за електронна пощаВлизане със съществуващ акаунт за електронна пощаЗа известните доставчици на електронна поща допълнителните настройки се попълват автоматично. Понякога е необходимо да се разреши IMAP в уеб настройките. Потърсете помощ от Вашия доставчик на електронна поща или приятели.
- Delta Chat няма сървъри, Вашите данни стоят на Вашето устройство.
+ Privitty Chat няма сървъри, Вашите данни стоят на Вашето устройство.Входящи Име за влизане на IMAPIMAP сървър
@@ -571,7 +571,7 @@
Сигурност на SMTP връзкатаМетод за оторизацияДа се продължи ли с опростената настройка?
- Въведеният адрес за електронна поща поддържа опростена настройка (OAuth 2.0).\n\nНа следващата стъпка, моля позволете на Delta Chat да действа в качеството си на избраното от Вас приложение за чат върху електронна поща.\n\nDelta Chat няма сървъри, Вашите данни стоят на Вашето устройство.
+ Въведеният адрес за електронна поща поддържа опростена настройка (OAuth 2.0).\n\nНа следващата стъпка, моля позволете на Privitty Chat да действа в качеството си на избраното от Вас приложение за чат върху електронна поща.\n\nPrivitty Chat няма сървъри, Вашите данни стоят на Вашето устройство.Проверки на сертификатитеМоля, въведете валиден адрес за електронна пощаМоля, въведете валиден адрес / IP адрес на сървър
@@ -653,7 +653,7 @@
КриптиранеУправление на ключовеДа се използва Emoji на системата
- Изключване на вградената поддръжка за Emoji на Delta Chat
+ Изключване на вградената поддръжка за Emoji на Privitty ChatПрочитане на системната адресна книгаДа се предлага създаване на чатове с контакти от адресната книга. За някои доставчици е необходимо първо да се настрои криптиране от край до край.Чатове
@@ -688,10 +688,10 @@
Да бъде наблюдавана папката \"Изпратени\"Изпращане на копие до себе сиИзисква се, когато този акант се използва на повече от едно устройство.
- Автоматично преместване в папката DeltaChat
+ Автоматично преместване в папката PrivittyChatРазговорите са преместени, за да се избегне претрупване на папката \"Входящи\"
- Да се извлича само от папката DeltaChat
- Другите папки да не бъдат взимани под внимание. Изисква Вашият сървър да премества чат съобщенията в папката DeltaChat.
+ Да се извлича само от папката PrivittyChat
+ Другите папки да не бъдат взимани под внимание. Изисква Вашият сървър да премества чат съобщенията в папката PrivittyChat.Да се показват класически e-mail съобщенияНе, само чатовеЗа приетите контакти
diff --git a/_locales/en.xml b/_locales/en.xml
index baf71cfd..28efd9cf 100644
--- a/_locales/en.xml
+++ b/_locales/en.xml
@@ -363,7 +363,7 @@
Tap to OpenVideo Chat InstanceYour Video Chat Instance
-
+
Example: https://your-server.org/$ROOMIf enabled, you can start a video chat from each chat. Requires a compatible app or a browser on both ends.Use \"%1$s\" to invite others to video chats?\n\nOnce set, you can start a video chat from each chat. This replaces any previous setting for video chats.
@@ -547,9 +547,9 @@
Add Second DeviceMake sure both devices are on the same Wi-Fi or networkThis creates a QR code that the second device can scan to copy the profile.\n\nMake sure no unwanted observer or camera can see the following screen.
- Install Delta Chat on your other device (https://get.delta.chat)
+ Install Privitty Chat on your other device (https://get.Privitty.chat)
- Start Delta Chat, tap “I Already Have a Profile / Add as Second Device” and scan the code shown here
+ Start Privitty Chat, tap “I Already Have a Profile / Add as Second Device” and scan the code shown hereScan to set up second device for %1$sAdd as Second Device
@@ -943,7 +943,7 @@
Messages are guaranteed to be end-to-end encrypted from now on. Tap to learn more.It is now guaranteed that all messages in this chat are end-to-end encrypted.\n\nEnd-to-end encryption keeps messages private between you and your chat partners. Not even servers, providers or relays can read them.%1$s sent a message from another device. Tap to learn more.
- End-to-end encryption cannot be guaranteed anymore, likely because %1$s reinstalled Delta Chat or sent a message from another device.\n\nYou may meet them in person and scan their QR code again to reestablish guaranteed end-to-end encryption.
+ End-to-end encryption cannot be guaranteed anymore, likely because %1$s reinstalled Privitty Chat or sent a message from another device.\n\nYou may meet them in person and scan their QR code again to reestablish guaranteed end-to-end encryption.⚠️ %1$s requires end-to-end encryption which is not setup for this chat yet. Tap to learn more.To establish end-to-end-encryption, you may meet contacts in person and scan their QR Code to introduce them.Learn More
@@ -953,7 +953,7 @@
⚠️ Your provider\'s storage is about to run out: %1$s%% are already used.\n\nYou may not be able to receive messages if storage is full.\n\n👉 Please check if you can delete old data in the provider\'s web interface and consider enabling \"Settings / Chats and Media / Delete Old Messages\". You can check your current storage usage anytime at \"Settings / Connectivity\".⚠️ Date or time on your device seems to be inaccurate (%1$s).\n\nAdjust your clock ⏰🔧 to ensure your messages are received correctly.
- ⚠️ Your Delta Chat version might be outdated.\n\nThis may cause problems because your chat partners use newer versions - and you are missing the latest features 😳\nPlease check https://get.delta.chat or your app store for updates.
+ ⚠️ Your Privitty Chat version might be outdated.\n\nThis may cause problems because your chat partners use newer versions - and you are missing the latest features 😳\nPlease check https://get.Privitty.chat or your app store for updates.Unlock to continue
@@ -1042,7 +1042,7 @@
To send audio messages, go to system or app settings, select "Permissions" or "Privacy & Security", and enable \"Microphone\".To receive or send files, go to the app settings, select \"Permissions\", and enable \"Storage\".To attach a location, go to the app settings, select \"Permissions\", and enable \"Location\".
- To receive notifications, go to \"System Settings / Apps / Delta Chat\" and enable \"Notifications\".
+ To receive notifications, go to \"System Settings / Apps / Privitty Chat\" and enable \"Notifications\".Draw anywhere to blur
@@ -1141,7 +1141,7 @@
Import device contactsTo chat with contacts from your device open Settings and enable \"Contacts\".
- Disabled in Delta Chat
+ Disabled in Privitty ChatDisabled in system settings\"Background App Refresh\" disabled in system settings
@@ -1156,20 +1156,20 @@
Shortcuts
- Use Delta Chat\'s \"Add to Widget\" to add items
+ Use Privitty Chat\'s \"Add to Widget\" to add itemsRemove from WidgetAdd to Widget
- Delta Chat uses your camera to take and send photos and videos and to scan QR codes.
- Delta Chat uses your contacts to show a list of addresses you can write to. Delta Chat has no server, your contacts are not sent anywhere.
- Delta Chat needs permission to share your location for the timespan you have enabled location sharing.
- Delta Chat needs permission to share your location for the timespan you have enabled location sharing.
- Delta Chat uses your microphone to record and send voice messages and videos with sound.
- Delta Chat will let you choose which photos from your library to send.
- Delta Chat wants to save images to your photo library.
- Delta Chat can use Face ID to protect your local profile, backup creation and second device setup.
+ Privitty Chat uses your camera to take and send photos and videos and to scan QR codes.
+ Privitty Chat uses your contacts to show a list of addresses you can write to. Privitty Chat has no server, your contacts are not sent anywhere.
+ Privitty Chat needs permission to share your location for the timespan you have enabled location sharing.
+ Privitty Chat needs permission to share your location for the timespan you have enabled location sharing.
+ Privitty Chat uses your microphone to record and send voice messages and videos with sound.
+ Privitty Chat will let you choose which photos from your library to send.
+ Privitty Chat wants to save images to your photo library.
+ Privitty Chat can use Face ID to protect your local profile, backup creation and second device setup.
@@ -1179,10 +1179,10 @@
Force Background ConnectionCauses a permanent notification
- To maintain connection and receive messages in the background, ignore battery optimizations in the next step.\n\nDelta Chat uses few resources and takes care not to drain your battery.
+ To maintain connection and receive messages in the background, ignore battery optimizations in the next step.\n\nPrivitty Chat uses few resources and takes care not to drain your battery.
- Tap here to receive messages while Delta Chat is in the background.
- You already allowed Delta Chat to receive messages in the background.\n\nIf messages still do not arrive in background, please also check your system settings.
+ Tap here to receive messages while Privitty Chat is in the background.
+ You already allowed Privitty Chat to receive messages in the background.\n\nIf messages still do not arrive in background, please also check your system settings.What\'s new?\n\n❤️🔥 New emojis picker with more emoji\n\n🎮 Enhanced in-chat apps: Get notifications and open supporting apps in context, i.e. open an added calendar entry directly\n\n👍 Get notified about reactions to your messages\n\n... 🛠️ FIXES and EVEN MORE at %1$s
diff --git a/packages/frontend/src/components/dialogs/FileAccessStatusDialog.tsx b/packages/frontend/src/components/dialogs/FileAccessStatusDialog.tsx
index 2f71144f..d13e91ae 100644
--- a/packages/frontend/src/components/dialogs/FileAccessStatusDialog.tsx
+++ b/packages/frontend/src/components/dialogs/FileAccessStatusDialog.tsx
@@ -390,8 +390,15 @@ export default function FileAccessStatusDialog({
}
const getDisplayFileName = (): string => {
- const name = fileName || (filePath ? basename(filePath) : 'File')
- return name.replace(/\.prv$/, '')
+ let rawName = 'File'
+
+ if (typeof fileName === 'string' && fileName.trim()) {
+ rawName = fileName
+ } else if (filePath) {
+ rawName = basename(filePath)
+ }
+
+ return rawName.replace(/\.prv$/, '')
}
const UserCard = ({
diff --git a/packages/frontend/src/components/message/Message.tsx b/packages/frontend/src/components/message/Message.tsx
index 2cc14532..5ff1223d 100644
--- a/packages/frontend/src/components/message/Message.tsx
+++ b/packages/frontend/src/components/message/Message.tsx
@@ -13,8 +13,6 @@ import { C, T } from '@deltachat/jsonrpc-client'
import MessageBody from './MessageBody'
import MessageMetaData, { isMediaWithoutText } from './MessageMetaData'
import {
- onDownload,
- openAttachmentInShell,
openForwardDialog,
openMessageInfo,
setQuoteInDraft,
@@ -25,7 +23,6 @@ import {
enterEditMessageMode,
} from './messageFunctions'
import Attachment from '../attachment/messageAttachment'
-import { isGenericAttachment, isImage } from '../attachment/Attachment'
import { runtime } from '@deltachat-desktop/runtime-interface'
import { AvatarFromContact } from '../Avatar'
import { ConversationType } from './MessageList'
@@ -246,32 +243,6 @@ const ForwardedTitle = ({
)
}
-async function showFileRecall(message: T.Message): Promise {
- if (
- message.file &&
- message.fileName &&
- message.fromId === C.DC_CONTACT_ID_SELF &&
- !message.isForwarded
- ) {
- const response = await runtime.PrivittySendMessage('sendEvent', {
- event_type: 'getFileAccessStatus',
- event_data: {
- chat_id: String(message.chatId),
- file_path: message.file,
- },
- })
- const jsonresp = JSON.parse(response)
- if (jsonresp?.result?.data?.status === 'active') {
- return Promise.resolve(true)
- } else {
- console.log('file cannot be recalled:')
- }
- return Promise.resolve(false)
- } else {
- return Promise.resolve(false)
- }
-}
-
async function showFileForward(message: T.Message): Promise {
if (message.file && message.fileName) {
if (message.fromId === C.DC_CONTACT_ID_SELF) {
@@ -384,9 +355,7 @@ async function buildContextMenu(
copy_item = false
}
- const showAttachmentOptions = !!message.file
const showCopyImage = !!message.file && message.viewType === 'Image'
- const showResend = message.sender.id === C.DC_CONTACT_ID_SELF
// Do not show "reply" in read-only chats
const showReply = chat.canSend
@@ -403,7 +372,6 @@ async function buildContextMenu(
// Do not show "react" for system messages
const showSendReaction = showReactionsUi(message, chat)
const showForward: boolean = await showFileForward(message)
- const showRecallMsg: boolean = await showFileRecall(message)
// Only show in groups, don't show on info messages or outgoing messages
const showReplyPrivately =
@@ -466,7 +434,7 @@ async function buildContextMenu(
rightIcon: 'bookmark-filled',
},
// copy link
- link !== '' &&
+ link !== '' && !message.file &&
isLink && {
label: tx('menu_copy_link_to_clipboard'),
action: () => runtime.writeClipboardText(link),
@@ -737,47 +705,6 @@ async function getPrivittyReplacementTextForFirstTwo(
}
function getPrivittyReplacementText(message: T.Message): string {
- if (message.isPrivittyMessage) {
- if (message.subject.indexOf('new_peer_add') !== -1) {
- message.text =
- 'Establishing guaranteed full control over your shared data, please wait ...'
- } else if (
- message.subject.indexOf('new_group_add') !== -1 ||
- message.subject.indexOf('new_group_concluded') !== -1
- ) {
- message.text =
- 'This group is Privitty secure—take control and revoke data anytime.'
- } else if (
- message.subject.indexOf('new_peer_complete') !== -1 ||
- message.subject.indexOf('new_peer_conclude') !== -1
- ) {
- message.text =
- 'You are Privitty secure—take control and revoke data anytime.'
- } else if (message.subject.indexOf('forward_add_request') !== -1) {
- message.text = 'A file has been forwarded to you.'
- } else if (message.subject.indexOf('OTSP_SENT') !== -1) {
- message.text = 'You granted viewing access.'
- } else if (
- message.subject.indexOf('SPLITKEYS_REQUEST') !== -1 ||
- message.subject.indexOf('SPLITKEYS_REQUESTING') !== -1
- ) {
- message.text = 'Requesting access from the owner ...'
- } else if (message.subject.indexOf('SPLITKEYS_RESPONSE') !== -1) {
- message.text = 'Granted access.'
- } else if (message.subject.indexOf('SPLITKEYS_REVOKED') !== -1) {
- message.text = 'You revoked access'
- } else if (message.subject.indexOf('SPLITKEYS_DELETED') !== -1) {
- message.text = 'Requesting for a deleted message'
- } else if (message.subject.indexOf('SPLITKEYS_UNDO_REVOKED') !== -1) {
- message.text = 'You Undo revoke'
- } else if (
- message.subject.indexOf('relay_message') !== -1 ||
- message.subject.indexOf('relay_request') !== -1 ||
- message.subject.indexOf('relay_response') !== -1
- ) {
- message.text = 'relay_message'
- }
- }
return message.text || ''
}
@@ -1013,7 +940,6 @@ export default function Message(props: {
MouseEvent
>
) => {
- if (message.isPrivittyMessage) return
event.preventDefault() // prevent default runtime context menu from opening
const chat = await BackendRemote.rpc.getFullChatById(
accountId,
@@ -1142,7 +1068,7 @@ export default function Message(props: {
// set message width which is used by reaction component
// to adapt the number of visible reactions
if (
- (message.fileMime && isImage(message.fileMime)) ||
+ (message.fileMime) ||
window.innerWidth < 900
) {
// image messages have a defined width