1
0
Fork 0
mirror of https://git.jami.net/savoirfairelinux/jami-client-qt.git synced 2025-04-21 21:52:03 +02:00

call: add window share button

This adds a windows sharing button in addition to the sharing options.
This button is only available for linux systems and must be enabled
for others (MacOS, Windows) once their windows sharing are functional.

Change-Id: If378a23bc504fd3813382e84a41d914448707616
GitLab: #668
This commit is contained in:
Aline Gondim Santos 2022-02-02 16:39:57 -05:00
parent 403edf4cba
commit 05d929cd8a
7 changed files with 76 additions and 27 deletions

View file

@ -0,0 +1,8 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 24.3.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
viewBox="0 0 24 24" style="enable-background:new 0 0 24 24;" xml:space="preserve">
<path d="M20.5,0.8h-17C2,0.8,0.8,2,0.8,3.5v17c0,1.5,1.2,2.7,2.7,2.7h17c1.5,0,2.7-1.2,2.7-2.7v-17C23.2,2,22,0.8,20.5,0.8z
M3.5,2.2h17c0.7,0,1.3,0.6,1.3,1.3v0.1H2.2V3.5C2.2,2.8,2.8,2.2,3.5,2.2z M7.7,21.8H3.5c-0.7,0-1.3-0.6-1.3-1.3V5h5.5h1.4h12.7
v15.5c0,0.7-0.6,1.3-1.3,1.3H9.1H7.7z"/>
</svg>

After

Width:  |  Height:  |  Size: 639 B

View file

@ -256,6 +256,7 @@ Item {
property string exitFullScreen: qsTr("Exit full screen")
property string fullScreen: qsTr("View full screen")
property string shareScreen: qsTr("Share screen")
property string shareWindow: qsTr("Share window")
property string stopSharing: qsTr("Stop sharing screen or file")
property string shareScreenArea: qsTr("Share screen area")
property string shareFile: qsTr("Share file")

View file

@ -45,6 +45,7 @@ Control {
signal resumePauseCallClicked
signal showInputPanelClicked
signal shareScreenClicked
signal shareWindowClicked
signal stopSharingClicked
signal shareScreenAreaClicked
signal shareFileClicked
@ -118,6 +119,10 @@ Control {
Component.onCompleted: {
shareModel.append({"Name": JamiStrings.shareScreen,
"IconSource": JamiResources.laptop_black_24dp_svg})
if (Qt.platform.os == "linux") {
shareModel.append({"Name": JamiStrings.shareWindow,
"IconSource" : JamiResources.window_black_24dp_svg})
}
shareModel.append({"Name": JamiStrings.shareScreenArea,
"IconSource" : JamiResources.share_area_black_24dp_svg})
shareModel.append({"Name": JamiStrings.shareFile,
@ -129,6 +134,9 @@ Control {
case JamiStrings.shareScreen:
shareScreenClicked()
break
case JamiStrings.shareWindow:
shareWindowClicked()
break
case JamiStrings.shareScreenArea:
shareScreenAreaClicked()
break
@ -258,17 +266,17 @@ Control {
Action {
id: shareAction
onTriggered: {
if (AvAdapter.currentRenderingDeviceType === Video.DeviceType.DISPLAY || AvAdapter.currentRenderingDeviceType === Video.DeviceType.FILE)
if (sharingActive)
root.stopSharingClicked()
else
root.shareScreenClicked()
}
icon.source: AvAdapter.currentRenderingDeviceType === Video.DeviceType.DISPLAY || AvAdapter.currentRenderingDeviceType === Video.DeviceType.FILE ?
icon.source: sharingActive ?
JamiResources.share_stop_black_24dp_svg :
JamiResources.share_screen_black_24dp_svg
icon.color: AvAdapter.currentRenderingDeviceType === Video.DeviceType.DISPLAY || AvAdapter.currentRenderingDeviceType === Video.DeviceType.FILE ?
icon.color: sharingActive ?
"red" : "white"
text: AvAdapter.currentRenderingDeviceType === Video.DeviceType.DISPLAY || AvAdapter.currentRenderingDeviceType === Video.DeviceType.FILE ?
text: sharingActive ?
JamiStrings.stopSharing :
JamiStrings.shareScreen
property real size: 34

View file

@ -47,6 +47,7 @@ Item {
property bool isConferenceCall
property bool isGrid
property bool localHandRaised
property bool sharingActive: AvAdapter.currentRenderingDeviceType === Video.DeviceType.DISPLAY || AvAdapter.currentRenderingDeviceType === Video.DeviceType.FILE
signal chatButtonClicked
signal fullScreenClicked
@ -130,9 +131,7 @@ Item {
mode: JamiFileDialog.Mode.OpenFile
onAccepted: {
if (AvAdapter.currentRenderingDeviceType !== Video.DeviceType.DISPLAY && AvAdapter.currentRenderingDeviceType !== Video.DeviceType.FILE) {
AvAdapter.muteCamera = root.isVideoMuted
}
AvAdapter.muteCamera = !sharingActive && root.isVideoMuted
AvAdapter.shareFile(jamiFileDialog.file)
}
}
@ -157,22 +156,26 @@ Item {
}
function openShareScreen() {
if (AvAdapter.currentRenderingDeviceType !== Video.DeviceType.DISPLAY && AvAdapter.currentRenderingDeviceType !== Video.DeviceType.FILE) {
AvAdapter.muteCamera = root.isVideoMuted
}
AvAdapter.getListWindows()
if (Qt.application.screens.length + AvAdapter.windowsNames.length === 1) {
AvAdapter.muteCamera = !sharingActive && root.isVideoMuted
if (Qt.application.screens.length === 1) {
AvAdapter.shareEntireScreen(0)
} else {
SelectScreenWindowCreation.createSelectScreenWindowObject()
SelectScreenWindowCreation.showSelectScreenWindow(callPreviewId)
SelectScreenWindowCreation.showSelectScreenWindow(callPreviewId, false)
}
}
function openShareWindow() {
AvAdapter.muteCamera = !sharingActive && root.isVideoMuted
AvAdapter.getListWindows()
if (AvAdapter.windowsNames.length >= 1) {
SelectScreenWindowCreation.createSelectScreenWindowObject()
SelectScreenWindowCreation.showSelectScreenWindow(callPreviewId, true)
}
}
function openShareScreenArea() {
if (AvAdapter.currentRenderingDeviceType !== Video.DeviceType.DISPLAY && AvAdapter.currentRenderingDeviceType !== Video.DeviceType.FILE) {
AvAdapter.muteCamera = root.isVideoMuted
}
AvAdapter.muteCamera = !sharingActive && root.isVideoMuted
if (Qt.platform.os !== "windows") {
AvAdapter.shareScreenArea(0, 0, 0, 0)
} else {
@ -206,6 +209,7 @@ Item {
function onResumePauseCallClicked() { CallAdapter.holdThisCallToggle() }
function onShowInputPanelClicked() { sipInputPanel.open() }
function onShareScreenClicked() { openShareScreen() }
function onShareWindowClicked() { openShareWindow() }
function onStopSharingClicked() { AvAdapter.stopSharing() }
function onShareScreenAreaClicked() { openShareScreenArea() }
function onRecordCallClicked() { recordClicked() }
@ -225,5 +229,9 @@ Item {
onTransferCallButtonClicked: openContactPicker(ContactList.TRANSFER)
onPluginItemClicked: openPluginsMenu()
onRecordCallClicked: root.recordClicked()
onOpenSelectionWindow: {
SelectScreenWindowCreation.createSelectScreenWindowObject()
SelectScreenWindowCreation.showSelectScreenWindow(callPreviewId, windowSelection)
}
}
}

View file

@ -26,7 +26,6 @@ import net.jami.Constants 1.1
import "../../commoncomponents"
import "../../commoncomponents/contextmenu"
import "../js/selectscreenwindowcreation.js" as SelectScreenWindowCreation
import "../js/screenrubberbandcreation.js" as ScreenRubberBandCreation
ContextMenuAutoLoader {
@ -37,9 +36,12 @@ ContextMenuAutoLoader {
property bool isVideoMuted: false
property bool isRecording: false
property bool windowSelection: false
signal pluginItemClicked
signal transferCallButtonClicked
signal recordCallClicked
signal openSelectionWindow
property list<GeneralMenuItem> menuItems: [
GeneralMenuItem {
@ -101,7 +103,7 @@ ContextMenuAutoLoader {
GeneralMenuItem {
id: stopSharing
canTrigger: (AvAdapter.currentRenderingDeviceType === Video.DeviceType.DISPLAY || AvAdapter.currentRenderingDeviceType === Video.DeviceType.FILE)
canTrigger: sharingActive
&& !isSIP && !isVideoMuted
itemName: JamiStrings.stopSharing
iconSource: JamiResources.share_stop_black_24dp_svg
@ -119,12 +121,29 @@ ContextMenuAutoLoader {
if (AvAdapter.currentRenderingDeviceType !== Video.DeviceType.DISPLAY && AvAdapter.currentRenderingDeviceType !== Video.DeviceType.FILE) {
AvAdapter.muteCamera = root.isVideoMuted
}
AvAdapter.getListWindows()
if (Qt.application.screens.length + AvAdapter.windowsNames().length === 1) {
if (Qt.application.screens.length === 1) {
AvAdapter.shareEntireScreen(0)
} else {
SelectScreenWindowCreation.createSelectScreenWindowObject()
SelectScreenWindowCreation.showSelectScreenWindow(callPreviewId)
windowSelection = false
openSelectionWindow()
}
}
},
GeneralMenuItem {
id: shareWindow
canTrigger: Qt.platform.os === "linux" && CurrentAccount.videoEnabled_Video && AvAdapter.currentRenderingDeviceType !== Video.DeviceType.DISPLAY
&& !isSIP
itemName: JamiStrings.shareWindow
iconSource: JamiResources.window_black_24dp_svg
onClicked: {
if (AvAdapter.currentRenderingDeviceType !== Video.DeviceType.DISPLAY && AvAdapter.currentRenderingDeviceType !== Video.DeviceType.FILE) {
AvAdapter.muteCamera = root.isVideoMuted
}
AvAdapter.getListWindows()
if (AvAdapter.windowsNames.length >= 1) {
windowSelection = true
openSelectionWindow()
}
}
},

View file

@ -37,6 +37,8 @@ Window {
property int minWidth: 650
property int minHeight: 500
property bool window: false
property int selectedScreenNumber: -1
property bool selectAllScreens: false
property string currentPreview: ""
@ -68,7 +70,7 @@ Window {
calculateRepeaterModel()
screenInfo.model = screens.length
screenInfo2.model = screens.length
windowsText.visible = screens.length > Qt.application.screens.length
windowsText.visible = root.window
}
minimumWidth: minWidth
minimumHeight: minHeight
@ -118,6 +120,7 @@ Window {
text: JamiStrings.screens
verticalAlignment: Text.AlignBottom
color: JamiTheme.textColor
visible: !root.window
}
Repeater {
@ -135,7 +138,7 @@ Window {
height: 3 * width / 4
border.color: selectedScreenNumber === index ? JamiTheme.screenSelectionBorderColor : JamiTheme.tabbarBorderColor
visible: JamiStrings.selectScreen !== screens[index] && index < Qt.application.screens.length
visible: !root.window && JamiStrings.selectScreen !== screens[index] && index < Qt.application.screens.length
Text {
id: screenName
@ -210,7 +213,7 @@ Window {
border.color: selectAllScreens ? JamiTheme.screenSelectionBorderColor : JamiTheme.tabbarBorderColor
visible: Qt.application.screens.length > 1
visible: !root.window && Qt.application.screens.length > 1
Text {
id: screenNameAll
@ -269,6 +272,7 @@ Window {
text: JamiStrings.windows
verticalAlignment: Text.AlignBottom
color: JamiTheme.textColor
visible: root.window
}
Repeater {
@ -286,7 +290,7 @@ Window {
height: 3 * width / 4
border.color: selectedScreenNumber === index ? JamiTheme.screenSelectionBorderColor : JamiTheme.tabbarBorderColor
visible: JamiStrings.selectScreen !== screens[index] && index >= Qt.application.screens.length
visible: root.window && JamiStrings.selectScreen !== screens[index] && index >= Qt.application.screens.length
Text {
id: screenName2

View file

@ -43,9 +43,10 @@ function finishCreation() {
selectScreenWindowObject.onClosing.connect(destroySelectScreenWindow)
}
function showSelectScreenWindow(previewId) {
function showSelectScreenWindow(previewId, window) {
console.log("previewId", previewId)
selectScreenWindowObject.currentPreview = previewId
selectScreenWindowObject.window = window
selectScreenWindowObject.show()
var screen = selectScreenWindowObject.screen