From 8133fce9e8bba32a962106d2efbc748a443a2c1a Mon Sep 17 00:00:00 2001 From: Martin Rotter Date: Mon, 31 Jul 2023 08:33:04 +0200 Subject: [PATCH] correctly use RTL text for rtl feeds --- src/librssguard/definitions/definitions.h | 3 ++- src/librssguard/gui/messagesview.cpp | 3 +++ .../gui/reusable/styleditemdelegatewithoutfocus.cpp | 6 ++++++ src/librssguard/services/abstract/feed.cpp | 3 +++ 4 files changed, 14 insertions(+), 1 deletion(-) diff --git a/src/librssguard/definitions/definitions.h b/src/librssguard/definitions/definitions.h index 20b4ac480..a9e846812 100644 --- a/src/librssguard/definitions/definitions.h +++ b/src/librssguard/definitions/definitions.h @@ -50,7 +50,8 @@ #define MSG_SCORE_MIN 0.0 #define LOWER_TITLE_ROLE 64 -#define HIGHLIGHTED_FOREGROUND_TITLE_ROLE 128 +#define HIGHLIGHTED_FOREGROUND_TITLE_ROLE 65 +#define TEXT_DIRECTION_ROLE 66 #define SOUNDS_BUILTIN_DIRECTORY ":/sounds" #define ARGUMENTS_LIST_SEPARATOR "\n" diff --git a/src/librssguard/gui/messagesview.cpp b/src/librssguard/gui/messagesview.cpp index 7a73f68e2..a80b15573 100644 --- a/src/librssguard/gui/messagesview.cpp +++ b/src/librssguard/gui/messagesview.cpp @@ -524,6 +524,9 @@ void MessagesView::loadItem(RootItem* item) { setLayoutDirection(Qt::LayoutDirection::LeftToRight); } } + else { + setLayoutDirection(Qt::LayoutDirection::LeftToRight); + } // Messages are loaded, make sure that previously // active message is not shown in browser. diff --git a/src/librssguard/gui/reusable/styleditemdelegatewithoutfocus.cpp b/src/librssguard/gui/reusable/styleditemdelegatewithoutfocus.cpp index 1b1c09d7c..bf26fbffe 100644 --- a/src/librssguard/gui/reusable/styleditemdelegatewithoutfocus.cpp +++ b/src/librssguard/gui/reusable/styleditemdelegatewithoutfocus.cpp @@ -16,6 +16,12 @@ void StyledItemDelegateWithoutFocus::paint(QPainter* painter, item_option.state = item_option.state ^ QStyle::StateFlag::State_HasFocus; } + bool rtl = index.data(TEXT_DIRECTION_ROLE).value() == Qt::LayoutDirection::RightToLeft; + + if (rtl) { + item_option.direction = Qt::LayoutDirection::RightToLeft; + } + if ((item_option.state & QStyle::StateFlag::State_Selected) == QStyle::StateFlag::State_Selected && index.data(Qt::ItemDataRole::ForegroundRole).isValid()) { item_option.palette.setColor(QPalette::ColorRole::HighlightedText, diff --git a/src/librssguard/services/abstract/feed.cpp b/src/librssguard/services/abstract/feed.cpp index b1d87b36f..0aea35c6a 100644 --- a/src/librssguard/services/abstract/feed.cpp +++ b/src/librssguard/services/abstract/feed.cpp @@ -82,6 +82,9 @@ QVariant Feed::data(int column, int role) const { return QVariant(); } + case TEXT_DIRECTION_ROLE: + return isRtl() ? Qt::LayoutDirection::RightToLeft : Qt::LayoutDirection::LayoutDirectionAuto; + case Qt::ItemDataRole::ForegroundRole: switch (status()) { case Status::NewMessages: