From eaaaf8a708d88f6e7a97cadba09f75d23f28c8f5 Mon Sep 17 00:00:00 2001 From: wurstsalat Date: Mon, 3 Oct 2022 23:19:41 +0200 Subject: imprv: MessageRow: Set text direction for RTL text Fixes #11148 --- gajim/common/i18n.py | 10 ++++------ gajim/gtk/conversation/rows/message.py | 19 +++++++++++++++++++ 2 files changed, 23 insertions(+), 6 deletions(-) diff --git a/gajim/common/i18n.py b/gajim/common/i18n.py index b2026f680..0a71f43fc 100644 --- a/gajim/common/i18n.py +++ b/gajim/common/i18n.py @@ -107,21 +107,19 @@ def get_short_lang_code(lang: Optional[str] = None) -> str: return lang[:2] -def paragraph_direction_mark(text: str) -> str: +def is_rtl_text(text: str) -> bool: ''' Determine paragraph writing direction according to http://www.unicode.org/reports/tr9/#The_Paragraph_Level - - Returns either Unicode LTR mark or RTL mark. ''' for char in text: bidi = unicodedata.bidirectional(char) if bidi == 'L': - return '\u200E' + return False if bidi in ('AL', 'R'): - return '\u200F' + return True - return '\u200E' + return False def Q_(text: str) -> str: diff --git a/gajim/gtk/conversation/rows/message.py b/gajim/gtk/conversation/rows/message.py index b7c12f8be..1da167118 100644 --- a/gajim/gtk/conversation/rows/message.py +++ b/gajim/gtk/conversation/rows/message.py @@ -44,6 +44,7 @@ from gajim.common.helpers import get_muc_context from gajim.common.helpers import message_needs_highlight from gajim.common.helpers import to_user_string from gajim.common.i18n import _ +from gajim.common.i18n import is_rtl_text from gajim.common.i18n import Q_ from gajim.common.modules.contacts import GroupchatContact from gajim.common.types import ChatContactT @@ -194,6 +195,10 @@ class MessageRow(BaseRow): self._bottom_box = Gtk.Box(spacing=6) self._bottom_box.add(self._message_widget) + if is_rtl_text(text): + self._bottom_box.set_halign(Gtk.Align.END) + self._message_widget.set_direction(Gtk.TextDirection.RTL) + more_menu_button = MoreMenuButton(self, self._contact, name) more_menu_button.set_hexpand(True) more_menu_button.set_halign(Gtk.Align.END) @@ -443,6 +448,13 @@ class MessageRow(BaseRow): self._message_widget.destroy() self._message_widget = MessageWidget(self._account) self._bottom_box.pack_start(self._message_widget, True, True, 0) + if is_rtl_text(text): + self._bottom_box.set_halign(Gtk.Align.END) + self._message_widget.set_direction(Gtk.TextDirection.RTL) + else: + self._bottom_box.set_halign(Gtk.Align.FILL) + self._message_widget.set_direction(Gtk.TextDirection.LTR) + self._message_widget.add_with_styling(text) self.get_style_context().add_class('retracted-message') @@ -450,6 +462,13 @@ class MessageRow(BaseRow): if not isinstance(self._message_widget, PreviewWidget): self._message_widget.add_with_styling(text, nickname) + if is_rtl_text(text): + self._bottom_box.set_halign(Gtk.Align.END) + self._message_widget.set_direction(Gtk.TextDirection.RTL) + else: + self._bottom_box.set_halign(Gtk.Align.FILL) + self._message_widget.set_direction(Gtk.TextDirection.LTR) + self._has_receipt = False self._message_icons.set_receipt_icon_visible(False) self._message_icons.set_correction_icon_visible(True) -- cgit v1.2.3