diff --git a/resources/icons/window_black_24dp.svg b/resources/icons/window_black_24dp.svg
new file mode 100644
index 00000000..37db909f
--- /dev/null
+++ b/resources/icons/window_black_24dp.svg
@@ -0,0 +1,8 @@
+
+
+
diff --git a/src/constant/JamiStrings.qml b/src/constant/JamiStrings.qml
index 8080aca8..4c5d17df 100644
--- a/src/constant/JamiStrings.qml
+++ b/src/constant/JamiStrings.qml
@@ -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")
diff --git a/src/mainview/components/CallActionBar.qml b/src/mainview/components/CallActionBar.qml
index e6a08e16..4ef3937e 100644
--- a/src/mainview/components/CallActionBar.qml
+++ b/src/mainview/components/CallActionBar.qml
@@ -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
diff --git a/src/mainview/components/CallOverlay.qml b/src/mainview/components/CallOverlay.qml
index 46a4abd6..d24ddddb 100644
--- a/src/mainview/components/CallOverlay.qml
+++ b/src/mainview/components/CallOverlay.qml
@@ -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)
+ }
}
}
diff --git a/src/mainview/components/CallViewContextMenu.qml b/src/mainview/components/CallViewContextMenu.qml
index baf4565c..355fe9b8 100644
--- a/src/mainview/components/CallViewContextMenu.qml
+++ b/src/mainview/components/CallViewContextMenu.qml
@@ -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 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()
}
}
},
diff --git a/src/mainview/components/SelectScreen.qml b/src/mainview/components/SelectScreen.qml
index 332c3c17..377cb035 100644
--- a/src/mainview/components/SelectScreen.qml
+++ b/src/mainview/components/SelectScreen.qml
@@ -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
diff --git a/src/mainview/js/selectscreenwindowcreation.js b/src/mainview/js/selectscreenwindowcreation.js
index 6be4c2b3..1ae7394d 100644
--- a/src/mainview/js/selectscreenwindowcreation.js
+++ b/src/mainview/js/selectscreenwindowcreation.js
@@ -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