Welcome to mirror list, hosted at ThFree Co, Russian Federation.

dev.gajim.org/gajim/gajim.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorwurstsalat <mailtrash@posteo.de>2022-10-04 00:19:41 +0300
committerwurstsalat <mailtrash@posteo.de>2022-10-04 00:20:55 +0300
commiteaaaf8a708d88f6e7a97cadba09f75d23f28c8f5 (patch)
tree3d1b742ce6922f8c1611cee53a352f7fdd86bdf5
parent1ad0cafb052dfb7741bdd69ccd98feed4fc0e393 (diff)
imprv: MessageRow: Set text direction for RTL texti18n-bidi
Fixes #11148
-rw-r--r--gajim/common/i18n.py10
-rw-r--r--gajim/gtk/conversation/rows/message.py19
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)