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 {