diff --git a/assets/languages/ar.ts b/assets/languages/ar.ts
index 0f10b6276..0a71a7ab2 100644
--- a/assets/languages/ar.ts
+++ b/assets/languages/ar.ts
@@ -1236,6 +1236,10 @@
outgoingCallsEnabledLabel
+
+ showTelKeypadAutomaticallyLabel
+
+
SettingsNetwork
diff --git a/assets/languages/az.ts b/assets/languages/az.ts
index f8e8b7345..fc392ec4b 100644
--- a/assets/languages/az.ts
+++ b/assets/languages/az.ts
@@ -1236,6 +1236,10 @@
outgoingCallsEnabledLabel
+
+ showTelKeypadAutomaticallyLabel
+
+
SettingsNetwork
diff --git a/assets/languages/az@latin.ts b/assets/languages/az@latin.ts
index 4f8bc463d..192e020f4 100644
--- a/assets/languages/az@latin.ts
+++ b/assets/languages/az@latin.ts
@@ -1236,6 +1236,10 @@
outgoingCallsEnabledLabel
+
+ showTelKeypadAutomaticallyLabel
+
+
SettingsNetwork
diff --git a/assets/languages/cs.ts b/assets/languages/cs.ts
index f787902da..84c1e3af9 100644
--- a/assets/languages/cs.ts
+++ b/assets/languages/cs.ts
@@ -1236,6 +1236,10 @@
outgoingCallsEnabledLabel
+
+ showTelKeypadAutomaticallyLabel
+
+
SettingsNetwork
diff --git a/assets/languages/de.ts b/assets/languages/de.ts
index 97fbd4d90..7c2dfc8fb 100644
--- a/assets/languages/de.ts
+++ b/assets/languages/de.ts
@@ -1247,6 +1247,10 @@ Server URL ist nicht konfiguriert.
automaticallyRecordCallsLabel
+
+ keepCallsWindowInBackgroundLabel
+
+
SettingsNetwork
diff --git a/assets/languages/en.ts b/assets/languages/en.ts
index 388d9bf95..3226086ca 100644
--- a/assets/languages/en.ts
+++ b/assets/languages/en.ts
@@ -1252,6 +1252,10 @@ your friend's SIP address or username.
automaticallyRecordCallsLabel
Automatically record calls
+
+ keepCallsWindowInBackgroundLabel
+ Keep calls window in background
+
SettingsNetwork
diff --git a/assets/languages/fr_FR.ts b/assets/languages/fr_FR.ts
index f69ee13a3..b460a7f45 100644
--- a/assets/languages/fr_FR.ts
+++ b/assets/languages/fr_FR.ts
@@ -1250,6 +1250,10 @@ Cliquez ici : <a href="%1">%1</a>
automaticallyRecordCallsLabel
Enregister auto. les appels
+
+ keepCallsWindowInBackgroundLabel
+ Fenêtre d'appels en tâche de fond
+
SettingsNetwork
diff --git a/assets/languages/ja.ts b/assets/languages/ja.ts
index 038286206..e0930a73d 100644
--- a/assets/languages/ja.ts
+++ b/assets/languages/ja.ts
@@ -1247,6 +1247,10 @@
automaticallyRecordCallsLabel
+
+ keepCallsWindowInBackgroundLabel
+
+
SettingsNetwork
diff --git a/assets/languages/lt.ts b/assets/languages/lt.ts
index bdf6844b6..ef795bcf4 100644
--- a/assets/languages/lt.ts
+++ b/assets/languages/lt.ts
@@ -1249,6 +1249,10 @@ Tiesiog, įveskite savo draugo SIP adresą ar naudotojo vardą.
automaticallyRecordCallsLabel
+
+ keepCallsWindowInBackgroundLabel
+
+
SettingsNetwork
diff --git a/assets/languages/pt_BR.ts b/assets/languages/pt_BR.ts
index 4b121fb3e..7f1abf09f 100644
--- a/assets/languages/pt_BR.ts
+++ b/assets/languages/pt_BR.ts
@@ -1252,6 +1252,10 @@ o endereço SIP ou nome de usuário do seu amigo.
automaticallyRecordCallsLabel
+
+ keepCallsWindowInBackgroundLabel
+
+
SettingsNetwork
diff --git a/assets/languages/ru.ts b/assets/languages/ru.ts
index 434f8366f..dc46f41a3 100644
--- a/assets/languages/ru.ts
+++ b/assets/languages/ru.ts
@@ -1250,6 +1250,10 @@
automaticallyRecordCallsLabel
+
+ keepCallsWindowInBackgroundLabel
+
+
SettingsNetwork
diff --git a/assets/languages/sv.ts b/assets/languages/sv.ts
index 29b450f3e..0c758f09a 100644
--- a/assets/languages/sv.ts
+++ b/assets/languages/sv.ts
@@ -1249,6 +1249,10 @@ Klicka här: <a href="%1">%1</a>
automaticallyRecordCallsLabel
+
+ keepCallsWindowInBackgroundLabel
+
+
SettingsNetwork
diff --git a/assets/languages/tr.ts b/assets/languages/tr.ts
index 9e9900057..32697d44a 100644
--- a/assets/languages/tr.ts
+++ b/assets/languages/tr.ts
@@ -1249,6 +1249,10 @@ arkadaşınızın SIP adresini veya kullanıcı adını girin.
automaticallyRecordCallsLabel
+
+ keepCallsWindowInBackgroundLabel
+
+
SettingsNetwork
diff --git a/src/app/cli/Cli.cpp b/src/app/cli/Cli.cpp
index 296ebae28..ce77c3e78 100644
--- a/src/app/cli/Cli.cpp
+++ b/src/app/cli/Cli.cpp
@@ -22,12 +22,15 @@
#include
+#include
+
#include "config.h"
#include "app/App.hpp"
#include "components/calls/CallsListModel.hpp"
#include "components/core/CoreHandlers.hpp"
#include "components/core/CoreManager.hpp"
+#include "components/settings/SettingsModel.hpp"
#include "utils/Utils.hpp"
#include "Cli.hpp"
@@ -121,13 +124,20 @@ static void cliInitiateConference (QHash &args) {
shared_ptr conference = core->getConference();
const QString id = args["conference-id"];
+ auto updateCallsWindow = []() {
+ // TODO: Set the view to the "waiting call view".
+ QQuickWindow *callsWindow = App::getInstance()->getCallsWindow();
+ if (CoreManager::getInstance()->getSettingsModel()->getKeepCallsWindowInBackground()) {
+ if (!callsWindow->isVisible())
+ callsWindow->showMinimized();
+ } else
+ App::smartShowWindow(callsWindow);
+ };
- App *app = App::getInstance();
if (conference) {
if (conference->getId() == Utils::appStringToCoreString(id)) {
qInfo() << QStringLiteral("Conference `%1` already exists.").arg(id);
- // TODO: Set the view to the "waiting call view".
- app->smartShowWindow(app->getCallsWindow());
+ updateCallsWindow();
return;
}
@@ -144,8 +154,8 @@ static void cliInitiateConference (QHash &args) {
qWarning() << QStringLiteral("Unable to join created conference: `%1`.").arg(id);
return;
}
- // TODO: Set the view to the "waiting call view".
- app->smartShowWindow(app->getCallsWindow());
+
+ updateCallsWindow();
}
// =============================================================================
diff --git a/src/components/call/CallModel.cpp b/src/components/call/CallModel.cpp
index 23d796850..327ca2227 100644
--- a/src/components/call/CallModel.cpp
+++ b/src/components/call/CallModel.cpp
@@ -21,6 +21,7 @@
*/
#include
+#include
#include
#include "app/App.hpp"
@@ -151,27 +152,11 @@ void CallModel::notifyCameraFirstFrameReceived (unsigned int width, unsigned int
// -----------------------------------------------------------------------------
void CallModel::accept () {
- stopAutoAnswerTimer();
-
- shared_ptr core = CoreManager::getInstance()->getCore();
- shared_ptr params = core->createCallParams(mCall);
- params->enableVideo(false);
- setRecordFile(params);
-
- App::smartShowWindow(App::getInstance()->getCallsWindow());
- mCall->acceptWithParams(params);
+ accept(false);
}
void CallModel::acceptWithVideo () {
- stopAutoAnswerTimer();
-
- shared_ptr core = CoreManager::getInstance()->getCore();
- shared_ptr params = core->createCallParams(mCall);
- params->enableVideo(true);
- setRecordFile(params);
-
- App::smartShowWindow(App::getInstance()->getCallsWindow());
- mCall->acceptWithParams(params);
+ accept(true);
}
void CallModel::terminate () {
@@ -307,7 +292,6 @@ void CallModel::handleCallStateChanged (const shared_ptr &call,
mCall->deferUpdate();
emit videoRequested();
}
-
break;
case linphone::CallStateIdle:
@@ -329,6 +313,28 @@ void CallModel::handleCallStateChanged (const shared_ptr &call,
// -----------------------------------------------------------------------------
+void CallModel::accept (bool withVideo) {
+ stopAutoAnswerTimer();
+
+ CoreManager *coreManager = CoreManager::getInstance();
+
+ shared_ptr core = coreManager->getCore();
+ shared_ptr params = core->createCallParams(mCall);
+ params->enableVideo(withVideo);
+ setRecordFile(params);
+
+ QQuickWindow *callsWindow = App::getInstance()->getCallsWindow();
+ if (coreManager->getSettingsModel()->getKeepCallsWindowInBackground()) {
+ if (!callsWindow->isVisible())
+ callsWindow->showMinimized();
+ } else
+ App::smartShowWindow(callsWindow);
+
+ mCall->acceptWithParams(params);
+}
+
+// -----------------------------------------------------------------------------
+
void CallModel::updateIsInConference () {
if (mIsInConference != mCall->getParams()->getLocalConferenceMode()) {
mIsInConference = !mIsInConference;
@@ -496,7 +502,6 @@ void CallModel::setPausedByUser (bool status) {
if (status) {
if (!mPausedByUser)
mCall->pause();
-
return;
}
diff --git a/src/components/call/CallModel.hpp b/src/components/call/CallModel.hpp
index 13f9ce1e6..2290434d7 100644
--- a/src/components/call/CallModel.hpp
+++ b/src/components/call/CallModel.hpp
@@ -140,6 +140,8 @@ private:
void handleCallEncryptionChanged (const std::shared_ptr &call);
void handleCallStateChanged (const std::shared_ptr &call, linphone::CallState state);
+ void accept (bool withVideo);
+
void stopAutoAnswerTimer () const;
CallStatus getStatus () const;
diff --git a/src/components/calls/CallsListModel.cpp b/src/components/calls/CallsListModel.cpp
index f5f117945..4d64a5a66 100644
--- a/src/components/calls/CallsListModel.cpp
+++ b/src/components/calls/CallsListModel.cpp
@@ -20,8 +20,9 @@
* Author: Ronan Abhamon
*/
-#include
#include
+#include
+#include
#include "app/App.hpp"
#include "components/call/CallModel.hpp"
@@ -29,6 +30,7 @@
#include "components/conference/ConferenceHelperModel.hpp"
#include "components/core/CoreHandlers.hpp"
#include "components/core/CoreManager.hpp"
+#include "components/settings/SettingsModel.hpp"
#include "utils/Utils.hpp"
#include "CallsListModel.hpp"
@@ -226,8 +228,14 @@ bool CallsListModel::removeRows (int row, int count, const QModelIndex &parent)
// -----------------------------------------------------------------------------
void CallsListModel::addCall (const shared_ptr &call) {
- if (call->getDir() == linphone::CallDirOutgoing)
- App::smartShowWindow(App::getInstance()->getCallsWindow());
+ if (call->getDir() == linphone::CallDirOutgoing) {
+ QQuickWindow *callsWindow = App::getInstance()->getCallsWindow();
+ if (CoreManager::getInstance()->getSettingsModel()->getKeepCallsWindowInBackground()) {
+ if (!callsWindow->isVisible())
+ callsWindow->showMinimized();
+ } else
+ App::smartShowWindow(callsWindow);
+ }
CallModel *callModel = new CallModel(call);
qInfo() << QStringLiteral("Add call:") << callModel;
diff --git a/src/components/settings/SettingsModel.cpp b/src/components/settings/SettingsModel.cpp
index 2b0a271f0..098740a4f 100644
--- a/src/components/settings/SettingsModel.cpp
+++ b/src/components/settings/SettingsModel.cpp
@@ -365,6 +365,17 @@ void SettingsModel::setShowTelKeypadAutomatically (bool status) {
// -----------------------------------------------------------------------------
+bool SettingsModel::getKeepCallsWindowInBackground () const {
+ return !!mConfig->getInt(UiSection, "keep_calls_window_in_background", 0);
+}
+
+void SettingsModel::setKeepCallsWindowInBackground (bool status) {
+ mConfig->setInt(UiSection, "keep_calls_window_in_background", status);
+ emit keepCallsWindowInBackgroundChanged(status);
+}
+
+// -----------------------------------------------------------------------------
+
bool SettingsModel::getOutgoingCallsEnabled () const {
return !!mConfig->getInt(UiSection, "outgoing_calls_enabled", 1);
}
diff --git a/src/components/settings/SettingsModel.hpp b/src/components/settings/SettingsModel.hpp
index 3ed713c99..b194a3826 100644
--- a/src/components/settings/SettingsModel.hpp
+++ b/src/components/settings/SettingsModel.hpp
@@ -84,6 +84,8 @@ class SettingsModel : public QObject {
Q_PROPERTY(bool showTelKeypadAutomatically READ getShowTelKeypadAutomatically WRITE setShowTelKeypadAutomatically NOTIFY showTelKeypadAutomaticallyChanged);
+ Q_PROPERTY(bool keepCallsWindowInBackground READ getKeepCallsWindowInBackground WRITE setKeepCallsWindowInBackground NOTIFY keepCallsWindowInBackgroundChanged);
+
Q_PROPERTY(bool outgoingCallsEnabled READ getOutgoingCallsEnabled WRITE setOutgoingCallsEnabled NOTIFY outgoingCallsEnabledChanged);
Q_PROPERTY(bool callRecorderEnabled READ getCallRecorderEnabled WRITE setCallRecorderEnabled NOTIFY callRecorderEnabledChanged);
@@ -266,6 +268,9 @@ public:
bool getShowTelKeypadAutomatically () const;
void setShowTelKeypadAutomatically (bool status);
+ bool getKeepCallsWindowInBackground () const;
+ void setKeepCallsWindowInBackground (bool status);
+
bool getOutgoingCallsEnabled () const;
void setOutgoingCallsEnabled (bool status);
@@ -461,6 +466,8 @@ signals:
void showTelKeypadAutomaticallyChanged (bool status);
+ void keepCallsWindowInBackgroundChanged (bool status);
+
void outgoingCallsEnabledChanged (bool status);
void callRecorderEnabledChanged (bool status);
diff --git a/ui/modules/Common/Form/Placements/FormHGroup.qml b/ui/modules/Common/Form/Placements/FormHGroup.qml
index fbe93ff2e..f325aa428 100644
--- a/ui/modules/Common/Form/Placements/FormHGroup.qml
+++ b/ui/modules/Common/Form/Placements/FormHGroup.qml
@@ -1,6 +1,7 @@
import QtQuick 2.7
import QtQuick.Layouts 1.3
+import Common 1.0
import Common.Styles 1.0
// =============================================================================
@@ -28,6 +29,12 @@ RowLayout {
horizontalAlignment: Text.AlignRight
verticalAlignment: Text.AlignVCenter
+
+ TooltipArea {
+ delay: 0
+ text: parent.text
+ visible: parent.truncated
+ }
}
// ---------------------------------------------------------------------------
diff --git a/ui/modules/Common/Form/Placements/FormVGroup.qml b/ui/modules/Common/Form/Placements/FormVGroup.qml
index 91e49500f..df28e7368 100644
--- a/ui/modules/Common/Form/Placements/FormVGroup.qml
+++ b/ui/modules/Common/Form/Placements/FormVGroup.qml
@@ -1,6 +1,7 @@
import QtQuick 2.7
import QtQuick.Layouts 1.3
+import Common 1.0
import Common.Styles 1.0
// =============================================================================
@@ -26,6 +27,12 @@ ColumnLayout {
elide: Text.ElideRight
font.pointSize: FormVGroupStyle.legend.pointSize
verticalAlignment: Text.AlignVCenter
+
+ TooltipArea {
+ delay: 0
+ text: parent.text
+ visible: parent.truncated
+ }
}
// ---------------------------------------------------------------------------
diff --git a/ui/modules/Common/Tooltip/TooltipArea.qml b/ui/modules/Common/Tooltip/TooltipArea.qml
index 2f0180f08..1f25fae12 100644
--- a/ui/modules/Common/Tooltip/TooltipArea.qml
+++ b/ui/modules/Common/Tooltip/TooltipArea.qml
@@ -1,9 +1,14 @@
import QtQuick 2.7
+import Common.Styles 1.0
+
// =============================================================================
MouseArea {
+ id: tooltipArea
+
property alias text: tooltip.text
+ property int delay: TooltipStyle.delay
property bool force: false
property var tooltipParent: parent
@@ -23,6 +28,7 @@ MouseArea {
Tooltip {
id: tooltip
+ delay: tooltipArea.delay
parent: tooltipParent
visible: _visible || force
diff --git a/ui/views/App/Settings/SettingsCallsChat.qml b/ui/views/App/Settings/SettingsCallsChat.qml
index 763cf5f3d..ba23a39b3 100644
--- a/ui/views/App/Settings/SettingsCallsChat.qml
+++ b/ui/views/App/Settings/SettingsCallsChat.qml
@@ -111,6 +111,16 @@ TabContainer {
onClicked: SettingsModel.showTelKeypadAutomatically = !checked
}
}
+
+ FormGroup {
+ label: qsTr('keepCallsWindowInBackgroundLabel')
+
+ Switch {
+ checked: SettingsModel.keepCallsWindowInBackground
+
+ onClicked: SettingsModel.keepCallsWindowInBackground = !checked
+ }
+ }
}
FormLine {