From 05f3885227d69f9ce0f834084900108a11d43c57 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Blin?= <sebastien.blin@savoirfairelinux.com> Date: Thu, 24 Mar 2022 12:06:28 -0400 Subject: [PATCH] video-split: fix maximize/minimize Change-Id: I7e6093e26546d8207261689069505f1afea2bfbf GitLab: #476 --- src/calladapter.cpp | 22 +++++++++++++------ .../components/ParticipantOverlay.qml | 5 ++++- 2 files changed, 19 insertions(+), 8 deletions(-) diff --git a/src/calladapter.cpp b/src/calladapter.cpp index 58f33f780..c57c3e5e6 100644 --- a/src/calladapter.cpp +++ b/src/calladapter.cpp @@ -739,16 +739,18 @@ CallAdapter::maximizeParticipant(const QString& uri) if (confId.isEmpty()) confId = convInfo.callId; try { + const auto call = callModel->getCall(confId); auto participants = getConferencesInfos(); for (auto part : participants) { auto participant = part.toJsonObject(); if (participant["uri"].toString() == uri) { - participant["active"] = !participant["active"].toBool(); - if (participant["active"].toBool()) { + auto active = participant["active"].toBool(); + // Else, continue. + if (!active) { callModel->setActiveParticipant(confId, uri); callModel->setConferenceLayout(confId, lrc::api::call::Layout::ONE_WITH_SMALL); - } else { - callModel->setConferenceLayout(confId, lrc::api::call::Layout::GRID); + } else if (call.layout == lrc::api::call::Layout::ONE_WITH_SMALL) { + callModel->setConferenceLayout(confId, lrc::api::call::Layout::ONE); } return; } @@ -768,13 +770,19 @@ CallAdapter::minimizeParticipant(const QString& uri) if (confId.isEmpty()) confId = convInfo.callId; try { + const auto call = callModel->getCall(confId); auto participants = getConferencesInfos(); for (auto& part : participants) { auto participant = part.toJsonObject(); if (participant["uri"].toString() == uri) { - if (participant["active"].toBool()) { - participant["active"] = !participant["active"].toBool(); - callModel->setConferenceLayout(confId, lrc::api::call::Layout::GRID); + auto active = participant["active"].toBool(); + if (active) { + if (call.layout == lrc::api::call::Layout::ONE) { + callModel->setConferenceLayout(confId, + lrc::api::call::Layout::ONE_WITH_SMALL); + } else { + callModel->setConferenceLayout(confId, lrc::api::call::Layout::GRID); + } } return; } diff --git a/src/mainview/components/ParticipantOverlay.qml b/src/mainview/components/ParticipantOverlay.qml index 62b9bbe38..406763003 100644 --- a/src/mainview/components/ParticipantOverlay.qml +++ b/src/mainview/components/ParticipantOverlay.qml @@ -46,6 +46,9 @@ Item { property string bestName: "" property string sinkId: "" property bool participantIsActive: false + property bool canMaximize: root.meModerator && + (!root.participantIsActive + || CallParticipantsModel.conferenceLayout === CallParticipantsModel.ONE_WITH_SMALL) property bool participantIsHost: CallAdapter.participantIsHost(uri) property bool participantIsModerator: false property bool participantIsMuted: isLocalMuted || participantIsModeratorMuted @@ -166,7 +169,7 @@ Item { showUnsetModerator: root.meHost && !root.isMe && root.participantIsModerator showModeratorMute: root.meModerator && !root.participantIsModeratorMuted showModeratorUnmute: (root.meModerator || root.isMe) && root.participantIsModeratorMuted - showMaximize: root.meModerator && !root.participantIsActive + showMaximize: root.canMaximize showMinimize: root.meModerator && root.participantIsActive showHangup: root.meModerator && !root.isMe && !root.participantIsHost } -- GitLab