diff --git a/linphone-desktop/assets/languages/en.ts b/linphone-desktop/assets/languages/en.ts
index 3aff6defd..b46ff46f2 100644
--- a/linphone-desktop/assets/languages/en.ts
+++ b/linphone-desktop/assets/languages/en.ts
@@ -443,6 +443,14 @@ Server url not configured.
conferenceTitle
CONFERENCE
+
+ leaveConf
+ Temporarily leave the conference
+
+
+ joinBackConf
+ Join back the conference
+
ConferenceControls
diff --git a/linphone-desktop/assets/languages/fr.ts b/linphone-desktop/assets/languages/fr.ts
index 9e9cc2578..f2818ba89 100644
--- a/linphone-desktop/assets/languages/fr.ts
+++ b/linphone-desktop/assets/languages/fr.ts
@@ -443,6 +443,14 @@ Url du serveur non configurée.
conferenceTitle
CONFÉRENCE
+
+ leaveConf
+ Quitter temporairement la conférence
+
+
+ joinBackConf
+ Rejoindre la conférence
+
ConferenceControls
diff --git a/linphone-desktop/src/components/conference/ConferenceModel.cpp b/linphone-desktop/src/components/conference/ConferenceModel.cpp
index 565a345a0..aa7738857 100644
--- a/linphone-desktop/src/components/conference/ConferenceModel.cpp
+++ b/linphone-desktop/src/components/conference/ConferenceModel.cpp
@@ -40,7 +40,12 @@ ConferenceModel::ConferenceModel (QObject *parent) : QSortFilterProxyModel(paren
});
setSourceModel(CoreManager::getInstance()->getCallsListModel());
- emit conferenceChanged(true);
+ emit conferenceChanged();
+
+ QObject::connect(
+ CoreManager::getInstance()->getHandlers().get(), &CoreHandlers::callStateChanged,
+ this, &ConferenceModel::handleCallStateChanged
+ );
}
bool ConferenceModel::filterAcceptsRow (int sourceRow, const QModelIndex &sourceParent) const {
@@ -143,16 +148,23 @@ float ConferenceModel::getMicroVu () const {
void ConferenceModel::leave() {
shared_ptr core = CoreManager::getInstance()->getCore();
core->leaveConference();
- emit conferenceChanged(false);
+ emit conferenceChanged();
}
void ConferenceModel::join() {
shared_ptr core = CoreManager::getInstance()->getCore();
core->enterConference();
- emit conferenceChanged(true);
+ emit conferenceChanged();
}
bool ConferenceModel::isInConference () const {
shared_ptr core = CoreManager::getInstance()->getCore();
+ qInfo() << QStringLiteral("Is in conf:") << core->isInConference();
return core->isInConference();
+}
+
+// -----------------------------------------------------------------------------
+
+void ConferenceModel::handleCallStateChanged (const shared_ptr &call, linphone::CallState state) {
+ emit conferenceChanged();
}
\ No newline at end of file
diff --git a/linphone-desktop/src/components/conference/ConferenceModel.hpp b/linphone-desktop/src/components/conference/ConferenceModel.hpp
index b500e532f..4427a3cb2 100644
--- a/linphone-desktop/src/components/conference/ConferenceModel.hpp
+++ b/linphone-desktop/src/components/conference/ConferenceModel.hpp
@@ -60,9 +60,11 @@ signals:
void microMutedChanged (bool status);
void recordingChanged (bool status);
- void conferenceChanged(bool status);
+ void conferenceChanged();
private:
+ void handleCallStateChanged (const std::shared_ptr &call, linphone::CallState state);
+
int getCount () const {
return rowCount();
}
diff --git a/linphone-desktop/ui/views/App/Calls/Conference.qml b/linphone-desktop/ui/views/App/Calls/Conference.qml
index bea56b368..e4aebcee7 100644
--- a/linphone-desktop/ui/views/App/Calls/Conference.qml
+++ b/linphone-desktop/ui/views/App/Calls/Conference.qml
@@ -216,6 +216,7 @@ Rectangle {
ActionSwitch {
id: micro
+ enabled: !conference.conferenceModel.microMuted
icon: 'micro'
iconSize: CallStyle.actionArea.iconSize
@@ -235,10 +236,15 @@ Rectangle {
ActionSwitch {
icon: 'pause'
+ enabled: conference.conferenceModel.isInConf
onClicked: {
conference.conferenceModel.isInConf ? conference.conferenceModel.leave() : conference.conferenceModel.join()
}
+
+ TooltipArea {
+ text: conference.conferenceModel.isInConf ? qsTr('leaveConf') : qsTr('joinBackConf')
+ }
}
ActionButton {