diff --git a/src/app/MainApplicationWindow.qml b/src/app/MainApplicationWindow.qml index e48281cb..e657b310 100644 --- a/src/app/MainApplicationWindow.qml +++ b/src/app/MainApplicationWindow.qml @@ -37,6 +37,11 @@ import "commoncomponents" ApplicationWindow { id: root + property bool isRTL: UtilsAdapter.isRTL + + LayoutMirroring.enabled: isRTL + LayoutMirroring.childrenInherit: isRTL + enum LoadedSource { WizardView, MainView, diff --git a/src/app/commoncomponents/BackButton.qml b/src/app/commoncomponents/BackButton.qml index 09f6b76f..781bb848 100644 --- a/src/app/commoncomponents/BackButton.qml +++ b/src/app/commoncomponents/BackButton.qml @@ -31,6 +31,8 @@ PushButton { preferredHeight: JamiTheme.wizardViewPageBackButtonHeight hoveredColor: JamiTheme.hoveredButtonColorWizard + mirror: Qt.application.layoutDirection === Qt.RightToLeft + source: JamiResources.ic_arrow_back_24dp_svg toolTipText: JamiStrings.back diff --git a/src/app/commoncomponents/DualPaneView.qml b/src/app/commoncomponents/DualPaneView.qml index 4e4b3a62..fb1eaeff 100644 --- a/src/app/commoncomponents/DualPaneView.qml +++ b/src/app/commoncomponents/DualPaneView.qml @@ -30,8 +30,11 @@ BaseView { property alias splitViewStateKey: splitView.splitViewStateKey - property real leftPaneMinWidth: JamiTheme.mainViewLeftPaneMinWidth - property real rightPaneMinWidth: JamiTheme.mainViewPaneMinWidth + property real minorPaneMinWidth: JamiTheme.mainViewLeftPaneMinWidth + property real majorPaneMinWidth: JamiTheme.mainViewPaneMinWidth + + property real previousMinorPaneWidth: leftPane.width + property real previousMajorPaneWidth: rightPane.width property bool isSinglePane @@ -50,10 +53,9 @@ BaseView { onIsSinglePaneChanged.connect(isSinglePaneChangedHandler); } - property real previousLeftPaneWidth: leftPane.width onWidthChanged: resolvePanes() function resolvePanes() { - isSinglePane = width < rightPaneMinWidth + previousLeftPaneWidth; + isSinglePane = width < majorPaneMinWidth + previousMinorPaneWidth; } // Override this if needed. @@ -65,19 +67,27 @@ BaseView { id: splitView anchors.fill: parent splitViewStateKey: viewNode.objectName + isSinglePane: viewNode.isSinglePane - Item { + SplitPane { id: leftPane - onWidthChanged: if (!isSinglePane) - previousLeftPaneWidth = width - SplitView.minimumWidth: isSinglePane ? viewNode.width : viewNode.leftPaneMinWidth - SplitView.maximumWidth: isSinglePane ? viewNode.width : viewNode.width - rightPaneMinWidth - SplitView.preferredWidth: viewNode.leftPaneMinWidth - clip: true + isMinorPane: true } - Item { + SplitPane { id: rightPane - clip: true + isMinorPane: false } } + + component SplitPane: Item { + clip: true + required property bool isMinorPane + onWidthChanged: { + if (!isSinglePane && isMinorPane) + previousMinorPaneWidth = width; + } + SplitView.minimumWidth: isSinglePane ? viewNode.width : (isMinorPane ? minorPaneMinWidth : majorPaneMinWidth) + SplitView.maximumWidth: isSinglePane ? viewNode.width : viewNode.width - (isMinorPane ? majorPaneMinWidth : minorPaneMinWidth) + SplitView.preferredWidth: isMinorPane ? minorPaneMinWidth : majorPaneMinWidth + } } diff --git a/src/app/commoncomponents/JamiSplitView.qml b/src/app/commoncomponents/JamiSplitView.qml index 9b66dd07..b30f3117 100644 --- a/src/app/commoncomponents/JamiSplitView.qml +++ b/src/app/commoncomponents/JamiSplitView.qml @@ -22,6 +22,13 @@ import net.jami.Constants 1.1 SplitView { id: root + property bool isRTL: UtilsAdapter.isRTL + property bool isSinglePane: false + property bool isSwapped: UtilsAdapter.isRTL + + onIsRTLChanged: swapItems() + onIsSinglePaneChanged: swapItems() + property string splitViewStateKey: objectName property bool autoManageState: !(parent instanceof BaseView) @@ -41,11 +48,26 @@ SplitView { visible ? restoreSplitViewState() : saveSplitViewState(); } + function swapItems() { + if ((isSinglePane && !isSwapped) // Do not swap in isSinglePane mode + || (!isRTL && !isSwapped)) // Do not swap if not RTL + return; + var qqci = children[0]; + if (qqci.children.length > 1) { + // swap the children + var tempPane = qqci.children[0]; + qqci.children[0] = qqci.children[1]; + qqci.children.push(tempPane); + isSwapped = true + } + } + handle: Rectangle { implicitWidth: JamiTheme.splitViewHandlePreferredWidth implicitHeight: root.height color: JamiTheme.primaryBackgroundColor Rectangle { + anchors.left: parent.left implicitWidth: 1 implicitHeight: root.height color: JamiTheme.tabbarBorderColor diff --git a/src/app/commoncomponents/MaterialRadioButton.qml b/src/app/commoncomponents/MaterialRadioButton.qml index dcfd7ba1..410e1229 100644 --- a/src/app/commoncomponents/MaterialRadioButton.qml +++ b/src/app/commoncomponents/MaterialRadioButton.qml @@ -72,8 +72,10 @@ RadioButton { contentItem: Text { text: root.text color: root.color - leftPadding: root.indicator.width + root.spacing + anchors.left: rect.right + anchors.leftMargin: root.spacing verticalAlignment: Text.AlignVCenter + horizontalAlignment: Text.AlignLeft font.pixelSize: JamiTheme.settingsDescriptionPixelSize } diff --git a/src/app/commoncomponents/PushButton.qml b/src/app/commoncomponents/PushButton.qml index 21d32037..19f359b9 100644 --- a/src/app/commoncomponents/PushButton.qml +++ b/src/app/commoncomponents/PushButton.qml @@ -74,6 +74,8 @@ AbstractButton { property alias imagePadding: image.padding property alias imageOffset: image.offset + property alias mirror: image.mirror + width: preferredWidth ? preferredWidth : preferredSize height: preferredHeight ? preferredHeight : preferredSize diff --git a/src/app/commoncomponents/ResponsiveImage.qml b/src/app/commoncomponents/ResponsiveImage.qml index 7bdf33b0..c1fcc63b 100644 --- a/src/app/commoncomponents/ResponsiveImage.qml +++ b/src/app/commoncomponents/ResponsiveImage.qml @@ -32,6 +32,7 @@ Item { property alias source: image.source property alias status: image.status property alias cache: image.cache + property alias mirror: image.mirror property string color: "transparent" property bool hovered: false property bool mirrorHorizontally: false @@ -67,8 +68,6 @@ Item { antialiasing: true asynchronous: true visible: false - mirror: root.mirrorHorizontally - mirrorVertically: root.mirrorVertically function setSourceSize() { sourceSize = undefined; diff --git a/src/app/commoncomponents/SettingParaCombobox.qml b/src/app/commoncomponents/SettingParaCombobox.qml index 82e6e7d6..82dad361 100644 --- a/src/app/commoncomponents/SettingParaCombobox.qml +++ b/src/app/commoncomponents/SettingParaCombobox.qml @@ -85,7 +85,12 @@ ComboBox { } contentItem: Text { - leftPadding: root.indicator.width + + anchors.left: parent.left + anchors.right: parent.right + anchors.leftMargin: root.indicator.width + width: parent.width - root.indicator.width * 2 + anchors.rightMargin: root.indicator.width * 2 font.pixelSize: JamiTheme.settingsDescriptionPixelSize text: root.displayText color: JamiTheme.comboboxTextColor diff --git a/src/app/constant/JamiTheme.qml b/src/app/constant/JamiTheme.qml index 72a96131..161d83d6 100644 --- a/src/app/constant/JamiTheme.qml +++ b/src/app/constant/JamiTheme.qml @@ -455,9 +455,8 @@ Item { property real typingDotsSize: 8 // MessageWebView File Transfer Container - property real filesToSendContainerSpacing: 120 + property real filesToSendContainerSpacing: 25 property real filesToSendContainerPadding: 10 - property real filesToSendDelegateWidth: 100 property real filesToSendDelegateHeight: 100 property real filesToSendDelegateRadius: 7 property real filesToSendDelegateButtonSize: 16 diff --git a/src/app/mainview/components/AccountComboBox.qml b/src/app/mainview/components/AccountComboBox.qml index 9ce9925a..23e09d45 100644 --- a/src/app/mainview/components/AccountComboBox.qml +++ b/src/app/mainview/components/AccountComboBox.qml @@ -139,6 +139,7 @@ Label { font.pointSize: JamiTheme.textFontSize color: JamiTheme.textColor elide: Text.ElideRight + horizontalAlignment: Text.AlignLeft } Text { @@ -155,6 +156,7 @@ Label { font.pointSize: JamiTheme.textFontSize color: JamiTheme.faddedLastInteractionFontColor elide: Text.ElideRight + horizontalAlignment: Text.AlignLeft } } diff --git a/src/app/mainview/components/AccountItemDelegate.qml b/src/app/mainview/components/AccountItemDelegate.qml index d6af09c0..917b9841 100644 --- a/src/app/mainview/components/AccountItemDelegate.qml +++ b/src/app/mainview/components/AccountItemDelegate.qml @@ -72,6 +72,7 @@ ItemDelegate { font.pointSize: JamiTheme.textFontSize color: JamiTheme.textColor elide: Text.ElideRight + horizontalAlignment: Text.AlignLeft } Text { @@ -86,6 +87,7 @@ ItemDelegate { font.pointSize: JamiTheme.textFontSize color: JamiTheme.faddedLastInteractionFontColor elide: Text.ElideRight + horizontalAlignment: Text.AlignLeft } } diff --git a/src/app/mainview/components/BackupTipBox.qml b/src/app/mainview/components/BackupTipBox.qml index e20434e3..43407d47 100644 --- a/src/app/mainview/components/BackupTipBox.qml +++ b/src/app/mainview/components/BackupTipBox.qml @@ -72,6 +72,7 @@ Item { Layout.leftMargin: root.margin Layout.preferredWidth: root.prefWidth - 2 * root.margin - root.iconSize font.pixelSize: JamiTheme.tipBoxTitleFontSize + horizontalAlignment: Text.AlignLeft elide: Qt.ElideRight } } @@ -87,6 +88,7 @@ Item { font.weight: Font.Normal text: JamiStrings.whyBackupAccount color: JamiTheme.textColor + horizontalAlignment: Text.AlignLeft } Text { @@ -98,6 +100,7 @@ Item { wrapMode: Text.WordWrap text: JamiStrings.backupAccountInfos color: JamiTheme.textColor + horizontalAlignment: Text.AlignLeft } MaterialButton { diff --git a/src/app/mainview/components/ChatView.qml b/src/app/mainview/components/ChatView.qml index 6873132b..9c3c3d6b 100644 --- a/src/app/mainview/components/ChatView.qml +++ b/src/app/mainview/components/ChatView.qml @@ -250,6 +250,9 @@ Rectangle { StackLayout { id: chatViewStack + LayoutMirroring.enabled: false + LayoutMirroring.childrenInherit: true + Layout.alignment: Qt.AlignHCenter Layout.fillWidth: true Layout.fillHeight: true diff --git a/src/app/mainview/components/ChatViewFooter.qml b/src/app/mainview/components/ChatViewFooter.qml index 325e9651..9b235728 100644 --- a/src/app/mainview/components/ChatViewFooter.qml +++ b/src/app/mainview/components/ChatViewFooter.qml @@ -221,8 +221,8 @@ Rectangle { objectName: "dataTransferSendContainer" Layout.alignment: Qt.AlignHCenter - Layout.preferredWidth: footerColumnLayout.width - Layout.maximumWidth: JamiTheme.chatViewMaximumWidth + Layout.fillWidth: true + Layout.rightMargin: 10 Layout.preferredHeight: filesToSendCount ? JamiTheme.filesToSendDelegateHeight : 0 } } diff --git a/src/app/mainview/components/ChatViewHeader.qml b/src/app/mainview/components/ChatViewHeader.qml index ad50f6c9..b8b72e8a 100644 --- a/src/app/mainview/components/ChatViewHeader.qml +++ b/src/app/mainview/components/ChatViewHeader.qml @@ -83,6 +83,8 @@ Rectangle { preferredSize: 24 + mirror: UtilsAdapter.isRTL + source: JamiResources.back_24dp_svg toolTipText: CurrentConversation.inCall ? JamiStrings.backCall : JamiStrings.hideChat diff --git a/src/app/mainview/components/CustomizeTipBox.qml b/src/app/mainview/components/CustomizeTipBox.qml index 836717ec..aed02194 100644 --- a/src/app/mainview/components/CustomizeTipBox.qml +++ b/src/app/mainview/components/CustomizeTipBox.qml @@ -61,6 +61,7 @@ ColumnLayout { visible: !opened Layout.alignment: Qt.AlignLeft Layout.leftMargin: column.margin + horizontalAlignment: Text.AlignLeft font.pixelSize: JamiTheme.tipBoxTitleFontSize elide: Qt.ElideRight } @@ -71,6 +72,7 @@ ColumnLayout { Layout.leftMargin: 20 Layout.topMargin: 8 Layout.bottomMargin: 15 + horizontalAlignment: Text.AlignLeft font.pixelSize: JamiTheme.tipBoxContentFontSize visible: !opened wrapMode: Text.WordWrap diff --git a/src/app/mainview/components/DocumentPreview.qml b/src/app/mainview/components/DocumentPreview.qml index 98cc6a0f..04f61837 100644 --- a/src/app/mainview/components/DocumentPreview.qml +++ b/src/app/mainview/components/DocumentPreview.qml @@ -107,13 +107,11 @@ Item { anchors.fill: parent anchors.margins: 8 source: { - if(mediaInfo.isVideo) - return JamiResources.video_file_svg - - if(mediaInfo.isAudio) - return JamiResources.audio_file_svg - - return JamiResources.attached_file_svg + if (mediaInfo.isVideo) + return JamiResources.video_file_svg; + if (mediaInfo.isAudio) + return JamiResources.audio_file_svg; + return JamiResources.attached_file_svg; } cache: false color: JamiTheme.textColor @@ -163,6 +161,7 @@ Item { color: JamiTheme.chatviewTextColor text: TransferName elide: Text.ElideRight + horizontalAlignment: Text.AlignLeft } RowLayout { diff --git a/src/app/mainview/components/FilesToSendContainer.qml b/src/app/mainview/components/FilesToSendContainer.qml index 83932eb7..e2e7a526 100644 --- a/src/app/mainview/components/FilesToSendContainer.qml +++ b/src/app/mainview/components/FilesToSendContainer.qml @@ -19,6 +19,7 @@ import QtQuick import QtQuick.Controls import net.jami.Models 1.1 import net.jami.Constants 1.1 +import net.jami.Adapters 1.1 import "../../commoncomponents" Rectangle { @@ -28,6 +29,9 @@ Rectangle { property alias filesToSendCount: repeater.count color: JamiTheme.primaryBackgroundColor + LayoutMirroring.enabled: UtilsAdapter.isRTL + LayoutMirroring.childrenInherit: true + JamiFlickable { id: filesToSendContainerScrollView @@ -44,6 +48,8 @@ Rectangle { anchors.centerIn: parent + layoutDirection: UtilsAdapter.isRTL ? Qt.RightToLeft : Qt.LeftToRight + spacing: JamiTheme.filesToSendContainerSpacing padding: JamiTheme.filesToSendContainerPadding @@ -53,7 +59,6 @@ Rectangle { delegate: FilesToSendDelegate { anchors.verticalCenter: filesToSendContainerRow.verticalCenter - width: JamiTheme.filesToSendDelegateWidth height: JamiTheme.filesToSendDelegateHeight onRemoveFileButtonClicked: function (index) { diff --git a/src/app/mainview/components/FilesToSendDelegate.qml b/src/app/mainview/components/FilesToSendDelegate.qml index 6506d12f..ed45400a 100644 --- a/src/app/mainview/components/FilesToSendDelegate.qml +++ b/src/app/mainview/components/FilesToSendDelegate.qml @@ -29,6 +29,8 @@ Item { property real margin: 5 signal removeFileButtonClicked(int index) + width: JamiTheme.layoutWidthFileTransfer * 2 + RowLayout { anchors.fill: root @@ -158,6 +160,7 @@ Item { font.bold: true text: FileName elide: Text.ElideRight + horizontalAlignment: Text.AlignLeft } RowLayout { diff --git a/src/app/mainview/components/InformativeTipBox.qml b/src/app/mainview/components/InformativeTipBox.qml index fdf7617e..44818696 100644 --- a/src/app/mainview/components/InformativeTipBox.qml +++ b/src/app/mainview/components/InformativeTipBox.qml @@ -62,6 +62,7 @@ ColumnLayout { Layout.leftMargin: 8 Layout.preferredWidth: column.prefWidth - 2 * column.margin - column.iconSize font.pixelSize: JamiTheme.tipBoxTitleFontSize + horizontalAlignment: Text.AlignLeft elide: Qt.ElideRight } } @@ -75,6 +76,7 @@ ColumnLayout { wrapMode: Text.WordWrap font.weight: opened ? Font.Medium : Font.Normal text: root.title + horizontalAlignment: Text.AlignLeft color: JamiTheme.textColor } @@ -85,6 +87,7 @@ ColumnLayout { visible: opened wrapMode: Text.WordWrap text: root.description + horizontalAlignment: Text.AlignLeft color: JamiTheme.textColor } } diff --git a/src/app/mainview/components/MainOverlay.qml b/src/app/mainview/components/MainOverlay.qml index 7d6daf51..0b76cf77 100644 --- a/src/app/mainview/components/MainOverlay.qml +++ b/src/app/mainview/components/MainOverlay.qml @@ -144,6 +144,7 @@ Item { Layout.preferredHeight: 50 leftPadding: 16 + rightPadding: 16 horizontalAlignment: Text.AlignLeft verticalAlignment: Text.AlignVCenter diff --git a/src/app/mainview/components/MessageBar.qml b/src/app/mainview/components/MessageBar.qml index 0765f184..da1f45a7 100644 --- a/src/app/mainview/components/MessageBar.qml +++ b/src/app/mainview/components/MessageBar.qml @@ -189,6 +189,7 @@ ColumnLayout { id: messageBarRowLayout spacing: JamiTheme.chatViewFooterRowSpacing + anchors.left: parent.left Row { @@ -843,6 +844,8 @@ ColumnLayout { toolTipText: JamiStrings.send + mirror: UtilsAdapter.isRTL + source: JamiResources.send_black_24dp_svg normalColor: JamiTheme.chatViewFooterSendButtonColor diff --git a/src/app/mainview/components/MessageBarTextArea.qml b/src/app/mainview/components/MessageBarTextArea.qml index d3edc569..75702f96 100644 --- a/src/app/mainview/components/MessageBarTextArea.qml +++ b/src/app/mainview/components/MessageBarTextArea.qml @@ -87,6 +87,7 @@ JamiFlickable { selectByMouse: true textFormat: TextEdit.PlainText placeholderTextColor: JamiTheme.placeholderTextColor + horizontalAlignment: Text.AlignLeft background: Rectangle { border.width: 0 diff --git a/src/app/mainview/components/OngoingCallPage.qml b/src/app/mainview/components/OngoingCallPage.qml index 4564e904..76a7bb8c 100644 --- a/src/app/mainview/components/OngoingCallPage.qml +++ b/src/app/mainview/components/OngoingCallPage.qml @@ -119,7 +119,7 @@ Rectangle { } } - SplitView { + JamiSplitView { id: mainColumnLayout anchors.fill: parent @@ -127,12 +127,6 @@ Rectangle { property bool isHorizontal: false // Calculated when showing the stack view orientation: isHorizontal ? Qt.Horizontal : Qt.Vertical - handle: Rectangle { - implicitWidth: isHorizontal ? JamiTheme.splitViewHandlePreferredWidth : root.width - implicitHeight: isHorizontal ? root.height : JamiTheme.splitViewHandlePreferredWidth - color: SplitHandle.pressed ? JamiTheme.pressColor : (SplitHandle.hovered ? JamiTheme.hoverColor : JamiTheme.tabbarBorderColor) - } - Rectangle { id: callPageMainRect diff --git a/src/app/mainview/components/SmartListItemDelegate.qml b/src/app/mainview/components/SmartListItemDelegate.qml index 1559855d..9911ca20 100644 --- a/src/app/mainview/components/SmartListItemDelegate.qml +++ b/src/app/mainview/components/SmartListItemDelegate.qml @@ -135,6 +135,7 @@ ItemDelegate { Layout.fillWidth: true Layout.minimumHeight: 20 Layout.alignment: Qt.AlignVCenter + horizontalAlignment: Text.AlignLeft elide: Text.ElideMiddle text: Title === undefined ? "" : Title textFormat: TextEdit.PlainText @@ -166,6 +167,7 @@ ItemDelegate { elide: Text.ElideRight Layout.fillWidth: true Layout.alignment: Qt.AlignVCenter + horizontalAlignment: Text.AlignLeft text: Draft ? Draft : (LastInteraction === undefined ? "" : LastInteraction) diff --git a/src/app/mainview/components/WelcomePage.qml b/src/app/mainview/components/WelcomePage.qml index 432a0401..9afe6952 100644 --- a/src/app/mainview/components/WelcomePage.qml +++ b/src/app/mainview/components/WelcomePage.qml @@ -178,6 +178,7 @@ ListSelectionView { Flow { id: flow spacing: 13 + layoutDirection: UtilsAdapter.isRTL ? Qt.RightToLeft : Qt.LeftToRight Repeater { id: tipsRepeater diff --git a/src/app/settingsview/components/ContactItemDelegate.qml b/src/app/settingsview/components/ContactItemDelegate.qml index 18c5be5e..5aac6ebe 100644 --- a/src/app/settingsview/components/ContactItemDelegate.qml +++ b/src/app/settingsview/components/ContactItemDelegate.qml @@ -50,6 +50,7 @@ ItemDelegate { Layout.rightMargin: JamiTheme.preferredMarginSize Layout.preferredWidth: JamiTheme.preferredFieldHeight Layout.preferredHeight: JamiTheme.preferredFieldHeight + horizontalAlignment: Text.AlignLeft background: Avatar { id: avatar diff --git a/src/app/settingsview/components/DeviceItemDelegate.qml b/src/app/settingsview/components/DeviceItemDelegate.qml index e2251da4..ba85c666 100644 --- a/src/app/settingsview/components/DeviceItemDelegate.qml +++ b/src/app/settingsview/components/DeviceItemDelegate.qml @@ -116,9 +116,10 @@ ItemDelegate { Layout.alignment: Qt.AlignLeft Layout.fillWidth: true Layout.leftMargin: editDeviceName.leftPadding + Layout.rightMargin: editDeviceName.leftPadding Layout.bottomMargin: 10 - - elide: Text.ElideRight + horizontalAlignment: Text.AlignLeft + elide: Text.ElideMiddle font.pointSize: JamiTheme.textFontSize color: JamiTheme.textColor text: deviceId === "" ? JamiStrings.deviceId : deviceId diff --git a/src/app/settingsview/components/LevelMeter.qml b/src/app/settingsview/components/LevelMeter.qml index acf3910b..2ebb9691 100644 --- a/src/app/settingsview/components/LevelMeter.qml +++ b/src/app/settingsview/components/LevelMeter.qml @@ -26,6 +26,8 @@ ProgressBar { property real rmsLevel: 0 + LayoutMirroring.enabled: false + value: { return clamp(rmsLevel * 300.0, 0.0, 100.0); } diff --git a/src/app/settingsview/components/SettingSpinBox.qml b/src/app/settingsview/components/SettingSpinBox.qml index 6c45ced5..0c2a60cb 100644 --- a/src/app/settingsview/components/SettingSpinBox.qml +++ b/src/app/settingsview/components/SettingSpinBox.qml @@ -63,6 +63,8 @@ RowLayout { Layout.alignment: Qt.AlignCenter font.pointSize: JamiTheme.settingsFontSize font.kerning: true + LayoutMirroring.enabled: false + LayoutMirroring.childrenInherit: true onValueChanged: newValue() diff --git a/src/app/settingsview/components/SystemSettingsPage.qml b/src/app/settingsview/components/SystemSettingsPage.qml index 9e426d66..2a85be47 100644 --- a/src/app/settingsview/components/SystemSettingsPage.qml +++ b/src/app/settingsview/components/SystemSettingsPage.qml @@ -139,6 +139,7 @@ SettingsPageBase { Layout.fillWidth: true Layout.preferredHeight: JamiTheme.preferredFieldHeight + LayoutMirroring.enabled: false labelText: JamiStrings.language tipText: JamiStrings.language diff --git a/src/app/utilsadapter.cpp b/src/app/utilsadapter.cpp index 6ecb9807..2fc06a92 100644 --- a/src/app/utilsadapter.cpp +++ b/src/app/utilsadapter.cpp @@ -48,6 +48,7 @@ UtilsAdapter::UtilsAdapter(AppSettingsManager* settingsManager, if (lrcInstance_->avModel().getRecordPath().isEmpty()) { lrcInstance_->avModel().setRecordPath(getDefaultRecordPath()); } + set_isRTL(isRTL()); } QVariant @@ -80,6 +81,7 @@ UtilsAdapter::setAppValue(const Settings::Key key, const QVariant& value) if (key == Settings::Key::LANG) { settingsManager_->loadTranslations(); Q_EMIT changeLanguage(); + set_isRTL(isRTL()); } else if (key == Settings::Key::BaseZoom) Q_EMIT changeFontSize(); else if (key == Settings::Key::EnableExperimentalSwarm) @@ -808,3 +810,11 @@ UtilsAdapter::getVideoPlayer(const QString& resource, const QString& bgColor) {"html", htmlVideo.arg(resource, bgColor)}, }; } + +bool +UtilsAdapter::isRTL() +{ + auto pref = getAppValue(Settings::Key::LANG).toString(); + pref == "SYSTEM" ? QLocale::system().name() : pref; + return pref == "ar" || pref == "he" || pref == "fa" || pref == "ur"; +} \ No newline at end of file diff --git a/src/app/utilsadapter.h b/src/app/utilsadapter.h index 496a136b..d53bd9f3 100644 --- a/src/app/utilsadapter.h +++ b/src/app/utilsadapter.h @@ -66,6 +66,7 @@ class UtilsAdapter final : public QmlAdapterBase { Q_OBJECT QML_PROPERTY(QStringList, logList) + QML_RO_PROPERTY(bool, isRTL) public: explicit UtilsAdapter(AppSettingsManager* settingsManager, SystemTray* systemTray, @@ -149,6 +150,8 @@ public: Q_INVOKABLE QVariantMap getVideoPlayer(const QString& resource, const QString& bgColor); + Q_INVOKABLE bool isRTL(); + Q_SIGNALS: void debugMessageReceived(const QString& message); void changeFontSize();