UI fixes:

fix initials function

fix translation and text weight warnings

fix meeting detail layout

fix crash when adding invalid participant to conference

cancel button on conference update loading popup
This commit is contained in:
Gaelle Braud 2026-02-17 10:54:49 +01:00
parent 1d2eefe729
commit a9c7e1f8cc
6 changed files with 266 additions and 256 deletions

View file

@ -181,7 +181,6 @@ win64-ninja-vs2022-scheduled-windows:
rules: rules:
- !reference [.rules-merge-request-manual, rules] - !reference [.rules-merge-request-manual, rules]
- if: $NIGHTLY_RELEASE - if: $NIGHTLY_RELEASE
- if: $NIGHTLY_MASTER
- if: $PACKAGE_WINDOWS - if: $PACKAGE_WINDOWS
variables: variables:
CMAKE_OPTIONS: -DENABLE_APP_PACKAGING=YES -DENABLE_G729=ON -DENABLE_PQCRYPTO=ON -DENABLE_GPL_THIRD_PARTIES=OFF -DENABLE_BUGSPLAT_SYMBOLS_UPLOAD=ON -DBUGSPLAT_CLIENT_ID=$BUGSPLAT_CLIENT_ID -DBUGSPLAT_CLIENT_SECRET=$BUGSPLAT_CLIENT_SECRET -DBUGSPLAT_DATABASE=$BUGSPLAT_DATABASE CMAKE_OPTIONS: -DENABLE_APP_PACKAGING=YES -DENABLE_G729=ON -DENABLE_PQCRYPTO=ON -DENABLE_GPL_THIRD_PARTIES=OFF -DENABLE_BUGSPLAT_SYMBOLS_UPLOAD=ON -DBUGSPLAT_CLIENT_ID=$BUGSPLAT_CLIENT_ID -DBUGSPLAT_CLIENT_SECRET=$BUGSPLAT_CLIENT_SECRET -DBUGSPLAT_DATABASE=$BUGSPLAT_DATABASE

View file

@ -551,9 +551,11 @@ void ConferenceInfoCore::writeIntoModel(std::shared_ptr<ConferenceInfoModel> mod
auto map = p.toMap(); auto map = p.toMap();
auto address = map["address"].toString(); auto address = map["address"].toString();
auto linAddr = ToolModel::interpretUrl(address); auto linAddr = ToolModel::interpretUrl(address);
if (linAddr) {
auto infos = linphone::Factory::get()->createParticipantInfo(linAddr); auto infos = linphone::Factory::get()->createParticipantInfo(linAddr);
participantInfos.push_back(infos); participantInfos.push_back(infos);
} }
}
model->setParticipantInfos(participantInfos); model->setParticipantInfos(participantInfos);
} }

View file

@ -141,12 +141,13 @@ QString Utils::getInitials(const QString &username, int letterCount) {
#if QT_VERSION < QT_VERSION_CHECK(6, 9, 0) #if QT_VERSION < QT_VERSION_CHECK(6, 9, 0)
return Utils::encodeEmojiToQmlRichFormat(QString::fromStdU32String(char32)); return Utils::encodeEmojiToQmlRichFormat(QString::fromStdU32String(char32));
#else #else
QString::fromStdU32String(char32); return QString::fromStdU32String(char32);
#endif #endif
} }
QStringList initials; QStringList initials;
initials << QString::fromStdU32String(char32); initials << QString::fromStdU32String(char32);
if (initials.count() < letterCount) {
for (int i = 1; i < words.size() && initials.size() <= 1; ++i) { for (int i = 1; i < words.size() && initials.size() <= 1; ++i) {
if (words[i].size() > 0) { if (words[i].size() > 0) {
str32 = words[i].toStdU32String(); str32 = words[i].toStdU32String();
@ -159,6 +160,7 @@ QString Utils::getInitials(const QString &username, int letterCount) {
} }
} }
} }
}
return QLocale().toUpper(initials.join("")); return QLocale().toUpper(initials.join(""));
} }

View file

@ -60,7 +60,7 @@ Button {
text: mainItem.text text: mainItem.text
font { font {
pixelSize: mainItem.textSize pixelSize: mainItem.textSize
weight: mainItem.textWeight * 2 weight: mainItem.textWeight
family: DefaultStyle.defaultFont family: DefaultStyle.defaultFont
capitalization: mainItem.capitalization capitalization: mainItem.capitalization
underline: mainItem.underline underline: mainItem.underline

View file

@ -12,7 +12,6 @@ ColumnLayout {
spacing: Utils.getSizeWithScreenRatio(15) spacing: Utils.getSizeWithScreenRatio(15)
property alias content: contentLayout.data property alias content: contentLayout.data
property alias contentLayout: contentLayout property alias contentLayout: contentLayout
implicitHeight: contentLayout.implicitHeight + Utils.getSizeWithScreenRatio(1) + spacing
ColumnLayout { ColumnLayout {
id: contentLayout id: contentLayout
spacing: Utils.getSizeWithScreenRatio(8) spacing: Utils.getSizeWithScreenRatio(8)

View file

@ -499,17 +499,17 @@ AbstractMainPage {
} }
} }
Connections { Connections {
enabled: conferenceEdit.conferenceInfoGui enabled: conferenceEdit && conferenceEdit.conferenceInfoGui
target: conferenceEdit.conferenceInfoGui ? conferenceEdit.conferenceInfoGui.core : null target: conferenceEdit.conferenceInfoGui ? conferenceEdit.conferenceInfoGui.core : null
ignoreUnknownSignals: true ignoreUnknownSignals: true
function onSaveFailed() { function onSaveFailed() {
UtilsCpp.getMainWindow().closeLoadingPopup() UtilsCpp.getMainWindow().closeLoadingPopup()
} }
function onSchedulerStateChanged() { function onSchedulerStateChanged() {
editFocusScope.enabled = conferenceInfoGui.core.schedulerState != LinphoneEnums.ConferenceSchedulerState.AllocationPending editFocusScope.enabled = conferenceEdit.conferenceInfoGui.core.schedulerState != LinphoneEnums.ConferenceSchedulerState.AllocationPending
if (conferenceEdit.conferenceInfoGui.core.schedulerState == LinphoneEnums.ConferenceSchedulerState.Ready) { if (conferenceEdit.conferenceInfoGui.core.schedulerState == LinphoneEnums.ConferenceSchedulerState.Ready) {
rightPanelStackView.pop()
UtilsCpp.getMainWindow().closeLoadingPopup() UtilsCpp.getMainWindow().closeLoadingPopup()
rightPanelStackView.pop()
//: "Enregistré" //: "Enregistré"
UtilsCpp.showInformationPopup(qsTr("saved"), UtilsCpp.showInformationPopup(qsTr("saved"),
//: "Réunion mise à jour" //: "Réunion mise à jour"
@ -518,7 +518,9 @@ AbstractMainPage {
else if (conferenceEdit.conferenceInfoGui.core.schedulerState == LinphoneEnums.ConferenceSchedulerState.AllocationPending else if (conferenceEdit.conferenceInfoGui.core.schedulerState == LinphoneEnums.ConferenceSchedulerState.AllocationPending
|| conferenceEdit.conferenceInfoGui.core.schedulerState == LinphoneEnums.ConferenceSchedulerState.Updating) { || conferenceEdit.conferenceInfoGui.core.schedulerState == LinphoneEnums.ConferenceSchedulerState.Updating) {
//: "Modification de la réunion en cours" //: "Modification de la réunion en cours"
UtilsCpp.getMainWindow().showLoadingPopup(qsTr("meeting_schedule_edit_in_progress")) UtilsCpp.getMainWindow().showLoadingPopup(qsTr("meeting_schedule_edit_in_progress"), true, function(){
conferenceEdit.conferenceInfoGui.core.undo()
})
} else if (conferenceEdit.conferenceInfoGui.core.schedulerState == LinphoneEnums.ConferenceSchedulerState.Error) { } else if (conferenceEdit.conferenceInfoGui.core.schedulerState == LinphoneEnums.ConferenceSchedulerState.Error) {
UtilsCpp.showInformationPopup(qsTr("information_popup_error_title"), UtilsCpp.showInformationPopup(qsTr("information_popup_error_title"),
//: "Échec de la modification de la réunion !" //: "Échec de la modification de la réunion !"
@ -621,7 +623,7 @@ AbstractMainPage {
FocusScope{ FocusScope{
width: Utils.getSizeWithScreenRatio(393) width: Utils.getSizeWithScreenRatio(393)
anchors.horizontalCenter: parent?.horizontalCenter anchors.horizontalCenter: parent?.horizontalCenter
RowLayout { ColumnLayout {
id: meetingDetailsLayout id: meetingDetailsLayout
visible: mainItem.selectedConference visible: mainItem.selectedConference
anchors.top: parent.top anchors.top: parent.top
@ -629,8 +631,11 @@ AbstractMainPage {
anchors.horizontalCenter: parent.horizontalCenter anchors.horizontalCenter: parent.horizontalCenter
anchors.bottomMargin: Utils.getSizeWithScreenRatio(30) anchors.bottomMargin: Utils.getSizeWithScreenRatio(30)
width: Utils.getSizeWithScreenRatio(393) width: Utils.getSizeWithScreenRatio(393)
uniformCellSizes: true
// direction: FlexboxLayout.Column // direction: FlexboxLayout.Column
// alignContent: FlexboxLayout.AlignSpaceBetween // alignContent: FlexboxLayout.AlignSpaceBetween
ColumnLayout{
Layout.alignment: Qt.AlignTop
spacing: Utils.getSizeWithScreenRatio(16) spacing: Utils.getSizeWithScreenRatio(16)
Section { Section {
visible: mainItem.selectedConference visible: mainItem.selectedConference
@ -742,7 +747,7 @@ AbstractMainPage {
KeyNavigation.left: linkButton KeyNavigation.left: linkButton
KeyNavigation.right: linkButton KeyNavigation.right: linkButton
KeyNavigation.up: deletePopup KeyNavigation.up: deletePopup
KeyNavigation.down: calendarPlusButton KeyNavigation.down: joinButton
onClicked: { onClicked: {
var success = UtilsCpp.copyToClipboard(mainItem.selectedConference.core.uri) var success = UtilsCpp.copyToClipboard(mainItem.selectedConference.core.uri)
if (success) UtilsCpp.showInformationPopup(qsTr("saved"), if (success) UtilsCpp.showInformationPopup(qsTr("saved"),
@ -771,18 +776,6 @@ AbstractMainPage {
capitalization: Font.Capitalize capitalization: Font.Capitalize
} }
} }
RoundButton {
id: calendarPlusButton
style: ButtonStyle.noBackground
icon.source: AppIcons.calendarPlus
KeyNavigation.left: calendarPlusButton
KeyNavigation.right: calendarPlusButton
KeyNavigation.up: shareNetworkButton
KeyNavigation.down: joinButton
onClicked: {
mainItem.selectedConference.core.exportConferenceToICS()
}
}
} }
RowLayout { RowLayout {
spacing: Utils.getSizeWithScreenRatio(8) spacing: Utils.getSizeWithScreenRatio(8)
@ -822,6 +815,18 @@ AbstractMainPage {
pixelSize: Utils.getSizeWithScreenRatio(14) pixelSize: Utils.getSizeWithScreenRatio(14)
} }
} }
RoundButton {
id: calendarPlusButton
style: ButtonStyle.noBackground
icon.source: AppIcons.calendarPlus
KeyNavigation.left: calendarPlusButton
KeyNavigation.right: calendarPlusButton
KeyNavigation.up: shareNetworkButton
KeyNavigation.down: joinButton
onClicked: {
mainItem.selectedConference.core.exportConferenceToICS()
}
}
} }
} }
Section { Section {
@ -854,7 +859,8 @@ AbstractMainPage {
Layout.fillWidth: true Layout.fillWidth: true
Layout.fillHeight: true Layout.fillHeight: true
Layout.maximumHeight: participantList.contentHeight + Utils.getSizeWithScreenRatio(1) + spacing Layout.maximumHeight: participantList.contentHeight + Utils.getSizeWithScreenRatio(1) + spacing
content: RowLayout { content:
RowLayout {
width: Utils.getSizeWithScreenRatio(393) width: Utils.getSizeWithScreenRatio(393)
spacing: Utils.getSizeWithScreenRatio(8) spacing: Utils.getSizeWithScreenRatio(8)
EffectImage { EffectImage {
@ -870,6 +876,7 @@ AbstractMainPage {
// Layout.preferredHeight: contentHeight // Layout.preferredHeight: contentHeight
Layout.fillWidth: true Layout.fillWidth: true
Layout.fillHeight: true Layout.fillHeight: true
height: contentHeight
model: mainItem.selectedConference && mainItem.selectedConference.core ? mainItem.selectedConference.core.participants : [] model: mainItem.selectedConference && mainItem.selectedConference.core ? mainItem.selectedConference.core.participants : []
clip: true clip: true
Control.ScrollBar.vertical: ScrollBar { Control.ScrollBar.vertical: ScrollBar {
@ -934,5 +941,6 @@ AbstractMainPage {
} }
} }
} }
}
} }