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:
parent
403edf4cba
commit
05d929cd8a
7 changed files with 76 additions and 27 deletions
8
resources/icons/window_black_24dp.svg
Normal file
8
resources/icons/window_black_24dp.svg
Normal 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 |
|
@ -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")
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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()
|
||||
}
|
||||
}
|
||||
},
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
Loading…
Add table
Reference in a new issue