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 exitFullScreen: qsTr("Exit full screen")
|
||||||
property string fullScreen: qsTr("View full screen")
|
property string fullScreen: qsTr("View full screen")
|
||||||
property string shareScreen: qsTr("Share screen")
|
property string shareScreen: qsTr("Share screen")
|
||||||
|
property string shareWindow: qsTr("Share window")
|
||||||
property string stopSharing: qsTr("Stop sharing screen or file")
|
property string stopSharing: qsTr("Stop sharing screen or file")
|
||||||
property string shareScreenArea: qsTr("Share screen area")
|
property string shareScreenArea: qsTr("Share screen area")
|
||||||
property string shareFile: qsTr("Share file")
|
property string shareFile: qsTr("Share file")
|
||||||
|
|
|
@ -45,6 +45,7 @@ Control {
|
||||||
signal resumePauseCallClicked
|
signal resumePauseCallClicked
|
||||||
signal showInputPanelClicked
|
signal showInputPanelClicked
|
||||||
signal shareScreenClicked
|
signal shareScreenClicked
|
||||||
|
signal shareWindowClicked
|
||||||
signal stopSharingClicked
|
signal stopSharingClicked
|
||||||
signal shareScreenAreaClicked
|
signal shareScreenAreaClicked
|
||||||
signal shareFileClicked
|
signal shareFileClicked
|
||||||
|
@ -118,6 +119,10 @@ Control {
|
||||||
Component.onCompleted: {
|
Component.onCompleted: {
|
||||||
shareModel.append({"Name": JamiStrings.shareScreen,
|
shareModel.append({"Name": JamiStrings.shareScreen,
|
||||||
"IconSource": JamiResources.laptop_black_24dp_svg})
|
"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,
|
shareModel.append({"Name": JamiStrings.shareScreenArea,
|
||||||
"IconSource" : JamiResources.share_area_black_24dp_svg})
|
"IconSource" : JamiResources.share_area_black_24dp_svg})
|
||||||
shareModel.append({"Name": JamiStrings.shareFile,
|
shareModel.append({"Name": JamiStrings.shareFile,
|
||||||
|
@ -129,6 +134,9 @@ Control {
|
||||||
case JamiStrings.shareScreen:
|
case JamiStrings.shareScreen:
|
||||||
shareScreenClicked()
|
shareScreenClicked()
|
||||||
break
|
break
|
||||||
|
case JamiStrings.shareWindow:
|
||||||
|
shareWindowClicked()
|
||||||
|
break
|
||||||
case JamiStrings.shareScreenArea:
|
case JamiStrings.shareScreenArea:
|
||||||
shareScreenAreaClicked()
|
shareScreenAreaClicked()
|
||||||
break
|
break
|
||||||
|
@ -258,17 +266,17 @@ Control {
|
||||||
Action {
|
Action {
|
||||||
id: shareAction
|
id: shareAction
|
||||||
onTriggered: {
|
onTriggered: {
|
||||||
if (AvAdapter.currentRenderingDeviceType === Video.DeviceType.DISPLAY || AvAdapter.currentRenderingDeviceType === Video.DeviceType.FILE)
|
if (sharingActive)
|
||||||
root.stopSharingClicked()
|
root.stopSharingClicked()
|
||||||
else
|
else
|
||||||
root.shareScreenClicked()
|
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_stop_black_24dp_svg :
|
||||||
JamiResources.share_screen_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"
|
"red" : "white"
|
||||||
text: AvAdapter.currentRenderingDeviceType === Video.DeviceType.DISPLAY || AvAdapter.currentRenderingDeviceType === Video.DeviceType.FILE ?
|
text: sharingActive ?
|
||||||
JamiStrings.stopSharing :
|
JamiStrings.stopSharing :
|
||||||
JamiStrings.shareScreen
|
JamiStrings.shareScreen
|
||||||
property real size: 34
|
property real size: 34
|
||||||
|
|
|
@ -47,6 +47,7 @@ Item {
|
||||||
property bool isConferenceCall
|
property bool isConferenceCall
|
||||||
property bool isGrid
|
property bool isGrid
|
||||||
property bool localHandRaised
|
property bool localHandRaised
|
||||||
|
property bool sharingActive: AvAdapter.currentRenderingDeviceType === Video.DeviceType.DISPLAY || AvAdapter.currentRenderingDeviceType === Video.DeviceType.FILE
|
||||||
|
|
||||||
signal chatButtonClicked
|
signal chatButtonClicked
|
||||||
signal fullScreenClicked
|
signal fullScreenClicked
|
||||||
|
@ -130,9 +131,7 @@ Item {
|
||||||
mode: JamiFileDialog.Mode.OpenFile
|
mode: JamiFileDialog.Mode.OpenFile
|
||||||
|
|
||||||
onAccepted: {
|
onAccepted: {
|
||||||
if (AvAdapter.currentRenderingDeviceType !== Video.DeviceType.DISPLAY && AvAdapter.currentRenderingDeviceType !== Video.DeviceType.FILE) {
|
AvAdapter.muteCamera = !sharingActive && root.isVideoMuted
|
||||||
AvAdapter.muteCamera = root.isVideoMuted
|
|
||||||
}
|
|
||||||
AvAdapter.shareFile(jamiFileDialog.file)
|
AvAdapter.shareFile(jamiFileDialog.file)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -157,22 +156,26 @@ Item {
|
||||||
}
|
}
|
||||||
|
|
||||||
function openShareScreen() {
|
function openShareScreen() {
|
||||||
if (AvAdapter.currentRenderingDeviceType !== Video.DeviceType.DISPLAY && AvAdapter.currentRenderingDeviceType !== Video.DeviceType.FILE) {
|
AvAdapter.muteCamera = !sharingActive && root.isVideoMuted
|
||||||
AvAdapter.muteCamera = root.isVideoMuted
|
if (Qt.application.screens.length === 1) {
|
||||||
}
|
|
||||||
AvAdapter.getListWindows()
|
|
||||||
if (Qt.application.screens.length + AvAdapter.windowsNames.length === 1) {
|
|
||||||
AvAdapter.shareEntireScreen(0)
|
AvAdapter.shareEntireScreen(0)
|
||||||
} else {
|
} else {
|
||||||
SelectScreenWindowCreation.createSelectScreenWindowObject()
|
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() {
|
function openShareScreenArea() {
|
||||||
if (AvAdapter.currentRenderingDeviceType !== Video.DeviceType.DISPLAY && AvAdapter.currentRenderingDeviceType !== Video.DeviceType.FILE) {
|
AvAdapter.muteCamera = !sharingActive && root.isVideoMuted
|
||||||
AvAdapter.muteCamera = root.isVideoMuted
|
|
||||||
}
|
|
||||||
if (Qt.platform.os !== "windows") {
|
if (Qt.platform.os !== "windows") {
|
||||||
AvAdapter.shareScreenArea(0, 0, 0, 0)
|
AvAdapter.shareScreenArea(0, 0, 0, 0)
|
||||||
} else {
|
} else {
|
||||||
|
@ -206,6 +209,7 @@ Item {
|
||||||
function onResumePauseCallClicked() { CallAdapter.holdThisCallToggle() }
|
function onResumePauseCallClicked() { CallAdapter.holdThisCallToggle() }
|
||||||
function onShowInputPanelClicked() { sipInputPanel.open() }
|
function onShowInputPanelClicked() { sipInputPanel.open() }
|
||||||
function onShareScreenClicked() { openShareScreen() }
|
function onShareScreenClicked() { openShareScreen() }
|
||||||
|
function onShareWindowClicked() { openShareWindow() }
|
||||||
function onStopSharingClicked() { AvAdapter.stopSharing() }
|
function onStopSharingClicked() { AvAdapter.stopSharing() }
|
||||||
function onShareScreenAreaClicked() { openShareScreenArea() }
|
function onShareScreenAreaClicked() { openShareScreenArea() }
|
||||||
function onRecordCallClicked() { recordClicked() }
|
function onRecordCallClicked() { recordClicked() }
|
||||||
|
@ -225,5 +229,9 @@ Item {
|
||||||
onTransferCallButtonClicked: openContactPicker(ContactList.TRANSFER)
|
onTransferCallButtonClicked: openContactPicker(ContactList.TRANSFER)
|
||||||
onPluginItemClicked: openPluginsMenu()
|
onPluginItemClicked: openPluginsMenu()
|
||||||
onRecordCallClicked: root.recordClicked()
|
onRecordCallClicked: root.recordClicked()
|
||||||
|
onOpenSelectionWindow: {
|
||||||
|
SelectScreenWindowCreation.createSelectScreenWindowObject()
|
||||||
|
SelectScreenWindowCreation.showSelectScreenWindow(callPreviewId, windowSelection)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -26,7 +26,6 @@ import net.jami.Constants 1.1
|
||||||
|
|
||||||
import "../../commoncomponents"
|
import "../../commoncomponents"
|
||||||
import "../../commoncomponents/contextmenu"
|
import "../../commoncomponents/contextmenu"
|
||||||
import "../js/selectscreenwindowcreation.js" as SelectScreenWindowCreation
|
|
||||||
import "../js/screenrubberbandcreation.js" as ScreenRubberBandCreation
|
import "../js/screenrubberbandcreation.js" as ScreenRubberBandCreation
|
||||||
|
|
||||||
ContextMenuAutoLoader {
|
ContextMenuAutoLoader {
|
||||||
|
@ -37,9 +36,12 @@ ContextMenuAutoLoader {
|
||||||
property bool isVideoMuted: false
|
property bool isVideoMuted: false
|
||||||
property bool isRecording: false
|
property bool isRecording: false
|
||||||
|
|
||||||
|
property bool windowSelection: false
|
||||||
|
|
||||||
signal pluginItemClicked
|
signal pluginItemClicked
|
||||||
signal transferCallButtonClicked
|
signal transferCallButtonClicked
|
||||||
signal recordCallClicked
|
signal recordCallClicked
|
||||||
|
signal openSelectionWindow
|
||||||
|
|
||||||
property list<GeneralMenuItem> menuItems: [
|
property list<GeneralMenuItem> menuItems: [
|
||||||
GeneralMenuItem {
|
GeneralMenuItem {
|
||||||
|
@ -101,7 +103,7 @@ ContextMenuAutoLoader {
|
||||||
GeneralMenuItem {
|
GeneralMenuItem {
|
||||||
id: stopSharing
|
id: stopSharing
|
||||||
|
|
||||||
canTrigger: (AvAdapter.currentRenderingDeviceType === Video.DeviceType.DISPLAY || AvAdapter.currentRenderingDeviceType === Video.DeviceType.FILE)
|
canTrigger: sharingActive
|
||||||
&& !isSIP && !isVideoMuted
|
&& !isSIP && !isVideoMuted
|
||||||
itemName: JamiStrings.stopSharing
|
itemName: JamiStrings.stopSharing
|
||||||
iconSource: JamiResources.share_stop_black_24dp_svg
|
iconSource: JamiResources.share_stop_black_24dp_svg
|
||||||
|
@ -119,12 +121,29 @@ ContextMenuAutoLoader {
|
||||||
if (AvAdapter.currentRenderingDeviceType !== Video.DeviceType.DISPLAY && AvAdapter.currentRenderingDeviceType !== Video.DeviceType.FILE) {
|
if (AvAdapter.currentRenderingDeviceType !== Video.DeviceType.DISPLAY && AvAdapter.currentRenderingDeviceType !== Video.DeviceType.FILE) {
|
||||||
AvAdapter.muteCamera = root.isVideoMuted
|
AvAdapter.muteCamera = root.isVideoMuted
|
||||||
}
|
}
|
||||||
AvAdapter.getListWindows()
|
if (Qt.application.screens.length === 1) {
|
||||||
if (Qt.application.screens.length + AvAdapter.windowsNames().length === 1) {
|
|
||||||
AvAdapter.shareEntireScreen(0)
|
AvAdapter.shareEntireScreen(0)
|
||||||
} else {
|
} else {
|
||||||
SelectScreenWindowCreation.createSelectScreenWindowObject()
|
windowSelection = false
|
||||||
SelectScreenWindowCreation.showSelectScreenWindow(callPreviewId)
|
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 minWidth: 650
|
||||||
property int minHeight: 500
|
property int minHeight: 500
|
||||||
|
|
||||||
|
property bool window: false
|
||||||
|
|
||||||
property int selectedScreenNumber: -1
|
property int selectedScreenNumber: -1
|
||||||
property bool selectAllScreens: false
|
property bool selectAllScreens: false
|
||||||
property string currentPreview: ""
|
property string currentPreview: ""
|
||||||
|
@ -68,7 +70,7 @@ Window {
|
||||||
calculateRepeaterModel()
|
calculateRepeaterModel()
|
||||||
screenInfo.model = screens.length
|
screenInfo.model = screens.length
|
||||||
screenInfo2.model = screens.length
|
screenInfo2.model = screens.length
|
||||||
windowsText.visible = screens.length > Qt.application.screens.length
|
windowsText.visible = root.window
|
||||||
}
|
}
|
||||||
minimumWidth: minWidth
|
minimumWidth: minWidth
|
||||||
minimumHeight: minHeight
|
minimumHeight: minHeight
|
||||||
|
@ -118,6 +120,7 @@ Window {
|
||||||
text: JamiStrings.screens
|
text: JamiStrings.screens
|
||||||
verticalAlignment: Text.AlignBottom
|
verticalAlignment: Text.AlignBottom
|
||||||
color: JamiTheme.textColor
|
color: JamiTheme.textColor
|
||||||
|
visible: !root.window
|
||||||
}
|
}
|
||||||
|
|
||||||
Repeater {
|
Repeater {
|
||||||
|
@ -135,7 +138,7 @@ Window {
|
||||||
height: 3 * width / 4
|
height: 3 * width / 4
|
||||||
|
|
||||||
border.color: selectedScreenNumber === index ? JamiTheme.screenSelectionBorderColor : JamiTheme.tabbarBorderColor
|
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 {
|
Text {
|
||||||
id: screenName
|
id: screenName
|
||||||
|
@ -210,7 +213,7 @@ Window {
|
||||||
|
|
||||||
border.color: selectAllScreens ? JamiTheme.screenSelectionBorderColor : JamiTheme.tabbarBorderColor
|
border.color: selectAllScreens ? JamiTheme.screenSelectionBorderColor : JamiTheme.tabbarBorderColor
|
||||||
|
|
||||||
visible: Qt.application.screens.length > 1
|
visible: !root.window && Qt.application.screens.length > 1
|
||||||
|
|
||||||
Text {
|
Text {
|
||||||
id: screenNameAll
|
id: screenNameAll
|
||||||
|
@ -269,6 +272,7 @@ Window {
|
||||||
text: JamiStrings.windows
|
text: JamiStrings.windows
|
||||||
verticalAlignment: Text.AlignBottom
|
verticalAlignment: Text.AlignBottom
|
||||||
color: JamiTheme.textColor
|
color: JamiTheme.textColor
|
||||||
|
visible: root.window
|
||||||
}
|
}
|
||||||
|
|
||||||
Repeater {
|
Repeater {
|
||||||
|
@ -286,7 +290,7 @@ Window {
|
||||||
height: 3 * width / 4
|
height: 3 * width / 4
|
||||||
|
|
||||||
border.color: selectedScreenNumber === index ? JamiTheme.screenSelectionBorderColor : JamiTheme.tabbarBorderColor
|
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 {
|
Text {
|
||||||
id: screenName2
|
id: screenName2
|
||||||
|
|
|
@ -43,9 +43,10 @@ function finishCreation() {
|
||||||
selectScreenWindowObject.onClosing.connect(destroySelectScreenWindow)
|
selectScreenWindowObject.onClosing.connect(destroySelectScreenWindow)
|
||||||
}
|
}
|
||||||
|
|
||||||
function showSelectScreenWindow(previewId) {
|
function showSelectScreenWindow(previewId, window) {
|
||||||
console.log("previewId", previewId)
|
console.log("previewId", previewId)
|
||||||
selectScreenWindowObject.currentPreview = previewId
|
selectScreenWindowObject.currentPreview = previewId
|
||||||
|
selectScreenWindowObject.window = window
|
||||||
selectScreenWindowObject.show()
|
selectScreenWindowObject.show()
|
||||||
|
|
||||||
var screen = selectScreenWindowObject.screen
|
var screen = selectScreenWindowObject.screen
|
||||||
|
|
Loading…
Add table
Reference in a new issue