diff --git a/src/constant/JamiQmlUtils.qml b/src/constant/JamiQmlUtils.qml index a461f1d81451651733ff32507157bb7cd8c00856..fcbed2a001eeda15309eba8c42a618407e569917 100644 --- a/src/constant/JamiQmlUtils.qml +++ b/src/constant/JamiQmlUtils.qml @@ -22,6 +22,8 @@ pragma Singleton import QtQuick 2.14 Item { + property bool callIsFullscreen: false + TextMetrics { id: globalTextMetrics } diff --git a/src/mainview/MainView.qml b/src/mainview/MainView.qml index 3d61b27b15877036a1c8196e6d7f30e0c2218631..3665569dd96b33255ef47eec1cf25aa6c208349a 100644 --- a/src/mainview/MainView.qml +++ b/src/mainview/MainView.qml @@ -201,7 +201,6 @@ Window { callStackView.setLinkedWebview(communicationPageMessageWebView) callStackView.responsibleAccountId = AccountAdapter.currentAccountId callStackView.responsibleConvUid = currentUID - callStackView.updateCorrespondingUI() if (callState === Call.Status.IN_PROGRESS || callState === Call.Status.PAUSED) { UtilsAdapter.setCurrentCall(AccountAdapter.currentAccountId, currentUID) @@ -210,12 +209,12 @@ Window { else callStackView.showVideoCallPage() } else if (callState === Call.Status.INCOMING_RINGING) { - callStackView.showIncomingCallPage(AccountAdapter.currentAccountId, - currentUID) + callStackView.showIncomingCallPage() } else { callStackView.showOutgoingCallPage(callState) } pushCallStackView() + } else if (!inSettingsView) { if (currentConvUID !== currentUID) { callStackView.needToCloseInCallConversationAndPotentialWindow() @@ -250,6 +249,20 @@ Window { } } + Connections { + target: JamiQmlUtils + + function onCallIsFullscreenChanged() { + if (JamiQmlUtils.callIsFullscreen) { + UtilsAdapter.setSystemTrayIconVisible(false) + mainViewWindow.hide() + } else { + UtilsAdapter.setSystemTrayIconVisible(true) + mainViewWindow.show() + } + } + } + StackLayout { id: mainViewStackLayout diff --git a/src/mainview/components/AudioCallPage.qml b/src/mainview/components/AudioCallPage.qml index 74508ac775c2531faa2cdbe80685388d48703bc8..f87a6bf3c2fc9024add3de4c060faec8617d615c 100644 --- a/src/mainview/components/AudioCallPage.qml +++ b/src/mainview/components/AudioCallPage.qml @@ -33,8 +33,6 @@ Rectangle { property var linkedWebview: null - signal showFullScreenReqested - function updateUI(accountId, convUid) { contactImage.updateImage(convUid) bestName = UtilsAdapter.getBestName(accountId, convUid) diff --git a/src/mainview/components/CallOverlay.qml b/src/mainview/components/CallOverlay.qml index 7872497bd7d3740e89abb91ab88f900cd7ccd78d..ae0ee8723a70594989b35256e95cc40fccd82893 100644 --- a/src/mainview/components/CallOverlay.qml +++ b/src/mainview/components/CallOverlay.qml @@ -172,8 +172,9 @@ Rectangle { Layout.leftMargin: JamiTheme.preferredMarginSize - source: callStackView.isFullscreen ? "qrc:/images/icons/round-close-24px.svg" : - "qrc:/images/icons/ic_arrow_back_24px.svg" + source: JamiQmlUtils.callIsFullscreen ? + "qrc:/images/icons/round-close-24px.svg" : + "qrc:/images/icons/ic_arrow_back_24px.svg" pressedColor: JamiTheme.invertedPressedButtonColor hoveredColor: JamiTheme.invertedHoveredButtonColor @@ -183,10 +184,10 @@ Rectangle { toolTipText: qsTr("Toggle to display side panel") - visible: mainViewWindow.sidePanelOnly + visible: true onClicked: { - if (callStackView.isFullscreen) { + if (JamiQmlUtils.callIsFullscreen) { callStackView.toggleFullScreen() } else { mainViewWindow.showWelcomeView() diff --git a/src/mainview/components/CallStackView.qml b/src/mainview/components/CallStackView.qml index a93ce709c86fdf6c35186cd2f542d3baa2b9f6ee..2153a5e1e0cb7bc63cea92fd2367457f3af1575b 100644 --- a/src/mainview/components/CallStackView.qml +++ b/src/mainview/components/CallStackView.qml @@ -29,8 +29,6 @@ import "../js/callfullscreenwindowcontainercreation.js" as CallFullScreenWindowC Rectangle { id: callStackViewWindow - property bool isFullscreen: false - enum StackNumber { IncomingPageStack, OutgoingPageStack, @@ -53,33 +51,34 @@ Rectangle { property string responsibleAccountId: "" function needToCloseInCallConversationAndPotentialWindow() { - audioCallPage.closeInCallConversation() - videoCallPage.closeInCallConversation() - // Close potential window, context menu releated windows. - audioCallPage.closeContextMenuAndRelatedWindows() - - CallFullScreenWindowContainerCreation.closeVideoCallFullScreenWindowContainer() - videoCallPage.closeContextMenuAndRelatedWindows() + if (callStackMainView.currentItem.stackNumber === CallStackView.AudioPageStack) { + audioCallPage.closeInCallConversation() + CallFullScreenWindowContainerCreation.closeVideoCallFullScreenWindowContainer() + audioCallPage.closeContextMenuAndRelatedWindows() + } else if (callStackMainView.currentItem.stackNumber === CallStackView.VideoPageStack) { + videoCallPage.closeInCallConversation() + CallFullScreenWindowContainerCreation.closeVideoCallFullScreenWindowContainer() + videoCallPage.closeContextMenuAndRelatedWindows() + } } function setLinkedWebview(webViewId) { - audioCallPage.setLinkedWebview(webViewId) - videoCallPage.setLinkedWebview(webViewId) + if (callStackMainView.currentItem.stackNumber === CallStackView.AudioPageStack) { + audioCallPage.setLinkedWebview(webViewId) + } else if (callStackMainView.currentItem.stackNumber === CallStackView.VideoPageStack) { + videoCallPage.setLinkedWebview(webViewId) + } } - function updateCorrespondingUI() { - audioCallPage.updateUI(responsibleAccountId, responsibleConvUid) - outgoingCallPage.updateUI(responsibleAccountId, responsibleConvUid) - incomingCallPage.updateUI(responsibleAccountId, responsibleConvUid) - videoCallPage.updateUI(responsibleAccountId, responsibleConvUid) + function getItemFromStack(itemNumber) { + return callStackMainView.find(function (item) { + return item.stackNumber === itemNumber + }) } function showAudioCallPage() { - var itemToFind = callStackMainView.find(function (item) { - return item.stackNumber === CallStackView.AudioPageStack - }) - + var itemToFind = getItemFromStack(CallStackView.AudioPageStack) if (!itemToFind) { callStackMainView.push(audioCallPage, StackView.Immediate) } else { @@ -89,37 +88,27 @@ Rectangle { } function showOutgoingCallPage() { - var itemToFind = callStackMainView.find(function (item) { - return item.stackNumber === CallStackView.OutgoingPageStack - }) - + var itemToFind = getItemFromStack(CallStackView.OutgoingPageStack) if (!itemToFind) { callStackMainView.push(outgoingCallPage, StackView.Immediate) } else { callStackMainView.pop(itemToFind, StackView.Immediate) } + outgoingCallPage.updateUI(responsibleAccountId, responsibleConvUid) } function showIncomingCallPage(accountId, convUid) { - var itemToFind = callStackMainView.find(function (item) { - return item.stackNumber === CallStackView.IncomingPageStack - }) - + var itemToFind = getItemFromStack(CallStackView.IncomingPageStack) if (!itemToFind) { callStackMainView.push(incomingCallPage, StackView.Immediate) } else { callStackMainView.pop(itemToFind, StackView.Immediate) } - responsibleAccountId = accountId - responsibleConvUid = convUid - incomingCallPage.updateUI(accountId, convUid) + incomingCallPage.updateUI(responsibleAccountId, responsibleConvUid) } function showVideoCallPage() { - var itemToFind = callStackMainView.find(function (item) { - return item.stackNumber === CallStackView.VideoPageStack - }) - + var itemToFind = getItemFromStack(CallStackView.VideoPageStack) if (!itemToFind) { callStackMainView.push(videoCallPage, StackView.Immediate) } else { @@ -132,8 +121,10 @@ Rectangle { } function toggleFullScreen() { - isFullscreen = !isFullscreen + JamiQmlUtils.callIsFullscreen = !JamiQmlUtils.callIsFullscreen var callPage = callStackMainView.currentItem + if (!callPage) + return CallFullScreenWindowContainerCreation.createvideoCallFullScreenWindowContainerObject() if (!CallFullScreenWindowContainerCreation.checkIfVisible()) { @@ -144,9 +135,7 @@ Rectangle { CallFullScreenWindowContainerCreation.closeVideoCallFullScreenWindowContainer() } - if (callStackMainView.find(function (item) { - return item.stackNumber === CallStackView.VideoPageStack - })) { + if (callPage.stackNumber === CallStackView.VideoPageStack) { videoCallPage.handleParticipantsInfo(CallAdapter.getConferencesInfos()) } } @@ -155,15 +144,18 @@ Rectangle { target: CallAdapter function onCallStatusChanged(status, accountId, convUid) { - if (responsibleConvUid === convUid && responsibleAccountId === accountId) { + if (callStackMainView.currentItem.stackNumber === CallStackView.OutgoingPageStack + && responsibleConvUid === convUid && responsibleAccountId === accountId) { outgoingCallPage.callStatus = status } } function onUpdateParticipantsInfos(infos, accountId, callId) { - var responsibleCallId = UtilsAdapter.getCallId(responsibleAccountId, responsibleConvUid) - if (responsibleCallId === callId) { - videoCallPage.handleParticipantsInfo(infos) + if (callStackMainView.currentItem.stackNumber === CallStackView.VideoPageStack) { + var responsibleCallId = UtilsAdapter.getCallId(responsibleAccountId, responsibleConvUid) + if (responsibleCallId === callId) { + videoCallPage.handleParticipantsInfo(infos) + } } } } @@ -172,6 +164,8 @@ Rectangle { id: audioCallPage property int stackNumber: CallStackView.AudioPageStack + + visible: callStackMainView.currentItem.stackNumber === stackNumber } OutgoingCallPage { @@ -179,6 +173,8 @@ Rectangle { property int stackNumber: CallStackView.OutgoingPageStack + visible: callStackMainView.currentItem.stackNumber === stackNumber + onCallCancelButtonIsClicked: { CallAdapter.hangUpACall(responsibleAccountId, responsibleConvUid) } @@ -189,6 +185,7 @@ Rectangle { property int stackNumber: CallStackView.VideoPageStack + visible: callStackMainView.currentItem.stackNumber === stackNumber } IncomingCallPage { @@ -205,6 +202,8 @@ Rectangle { onCallCancelButtonIsClicked: { CallAdapter.hangUpACall(responsibleAccountId, responsibleConvUid) } + + visible: callStackMainView.currentItem.stackNumber === stackNumber } StackView { diff --git a/src/mainview/components/CallViewContextMenu.qml b/src/mainview/components/CallViewContextMenu.qml index 7cff8825a767891e30f240886c2127abe51ed589..5ac838d10c3e4894ce4a8cc14759772cf0950409 100644 --- a/src/mainview/components/CallViewContextMenu.qml +++ b/src/mainview/components/CallViewContextMenu.qml @@ -73,24 +73,26 @@ Item { }) if (isAudioOnly && !isPaused) - ContextMenuGenerator.addMenuItem(callStackView.isFullscreen ? JamiStrings.exitFullScreen : - JamiStrings.fullScreen, - callStackView.isFullscreen ? - "qrc:/images/icons/close_fullscreen-24px.svg" : - "qrc:/images/icons/open_in_full-24px.svg", - function (){ - callStackView.toggleFullScreen() - }) + ContextMenuGenerator.addMenuItem( + JamiQmlUtils.callIsFullscreen ? JamiStrings.exitFullScreen : + JamiStrings.fullScreen, + JamiQmlUtils.callIsFullscreen ? + "qrc:/images/icons/close_fullscreen-24px.svg" : + "qrc:/images/icons/open_in_full-24px.svg", + function (){ + callStackView.toggleFullScreen() + }) if (!isAudioOnly && !isPaused) { - ContextMenuGenerator.addMenuItem(callStackView.isFullscreen ? JamiStrings.exitFullScreen : - JamiStrings.fullScreen, - callStackView.isFullscreen ? - "qrc:/images/icons/close_fullscreen-24px.svg" : - "qrc:/images/icons/open_in_full-24px.svg", - function (){ - callStackView.toggleFullScreen() - }) + ContextMenuGenerator.addMenuItem( + JamiQmlUtils.callIsFullscreen ? JamiStrings.exitFullScreen : + JamiStrings.fullScreen, + JamiQmlUtils.callIsFullscreen ? + "qrc:/images/icons/close_fullscreen-24px.svg" : + "qrc:/images/icons/open_in_full-24px.svg", + function (){ + callStackView.toggleFullScreen() + }) ContextMenuGenerator.addMenuSeparator() diff --git a/src/mainview/components/VideoCallPage.qml b/src/mainview/components/VideoCallPage.qml index 93a1ebff28d5fafe3acfd5b2d0a3c9ac666acb46..628def4981671d0ee90ba5fba6943a8dc868774a 100644 --- a/src/mainview/components/VideoCallPage.qml +++ b/src/mainview/components/VideoCallPage.qml @@ -40,8 +40,6 @@ Rectangle { property var linkedWebview: null - signal showFullScreenReqested - function updateUI(accountId, convUid) { videoCallOverlay.handleParticipantsInfo(CallAdapter.getConferencesInfos()) diff --git a/src/utilsadapter.cpp b/src/utilsadapter.cpp index 85a6bd9a959ffb6d304688e55695e57a75558ae5..c0f7e9887c57bfa44d36abb1a06629a592c879bb 100644 --- a/src/utilsadapter.cpp +++ b/src/utilsadapter.cpp @@ -22,6 +22,7 @@ #include "utilsadapter.h" +#include "globalsystemtray.h" #include "lrcinstance.h" #include "utils.h" #include "version.h" @@ -381,3 +382,9 @@ UtilsAdapter::humanFileSize(qint64 fileSize) { return Utils::humanFileSize(fileSize); } + +void +UtilsAdapter::setSystemTrayIconVisible(bool visible) +{ + GlobalSystemTray::instance().setVisible(visible); +} diff --git a/src/utilsadapter.h b/src/utilsadapter.h index 9cf95d9062ee03cad5ca9b7744a21aacaf013d3c..764cc4f6dde5166ee76f367741fe38c58fd8c1a6 100644 --- a/src/utilsadapter.h +++ b/src/utilsadapter.h @@ -80,6 +80,7 @@ public: Q_INVOKABLE QString getExt(const QString& path); Q_INVOKABLE bool isImage(const QString& fileExt); Q_INVOKABLE QString humanFileSize(qint64 fileSize); + Q_INVOKABLE void setSystemTrayIconVisible(bool visible); private: QClipboard* clipboard_;