diff --git a/Linphone/core/App.cpp b/Linphone/core/App.cpp index 52dc27e0e..833077219 100644 --- a/Linphone/core/App.cpp +++ b/Linphone/core/App.cpp @@ -261,7 +261,7 @@ App::App(int &argc, char *argv[]) : SingleApplication(argc, argv, true, Mode::User | Mode::ExcludeAppPath | Mode::ExcludeAppVersion) { // Do not use APPLICATION_NAME here. // The EXECUTABLE_NAME will be used in qt standard paths. It's our goal. - + QThread::currentThread()->setPriority(QThread::HighPriority); QCoreApplication::setApplicationName(EXECUTABLE_NAME); QApplication::setOrganizationDomain(EXECUTABLE_NAME); QCoreApplication::setApplicationVersion(APPLICATION_SEMVER); diff --git a/Linphone/core/notifier/Notifier.cpp b/Linphone/core/notifier/Notifier.cpp index 6bfa7f506..e7a147bb6 100644 --- a/Linphone/core/notifier/Notifier.cpp +++ b/Linphone/core/notifier/Notifier.cpp @@ -153,20 +153,11 @@ bool Notifier::createNotification(Notifier::NotificationType type, QVariantMap d // Use QQuickView to create a visual root object that is // independant from current application Window QScreen *screen = allScreens[i]; - // auto engine = App::getInstance()->mEngine; - auto engine = new QQmlApplicationEngine(); - engine->addImageProvider(ImageProvider::ProviderId, new ImageProvider()); - engine->addImageProvider(AvatarProvider::ProviderId, new AvatarProvider()); - engine->addImportPath(":/"); - // if(showAsTool) window->setProperty("showAsTool",true); - engine->setInitialProperties(data); - // engine->rootContext()->setContextProperty("applicationDirPath",QGuiApplication::applicationDirPath()); - // engine->setInitialProperties({{"screenIndex", i}}); - //, {"x", screen->geometry().x()}, {"y", screen->geometry().y()}}); + auto engine = App::getInstance()->mEngine; const QUrl url(QString(NotificationsPath) + Notifier::Notifications[type].filename); QObject::connect( engine, &QQmlApplicationEngine::objectCreated, this, - [this, url, screen, engine, type](QObject *obj, const QUrl &objUrl) { + [this, url, screen, engine, type, data](QObject *obj, const QUrl &objUrl) { if (!obj && url == objUrl) { lCritical() << "[App] Notifier.qml couldn't be load."; engine->deleteLater(); @@ -175,6 +166,9 @@ bool Notifier::createNotification(Notifier::NotificationType type, QVariantMap d lDebug() << engine->rootObjects()[0]; auto window = qobject_cast(obj); if (window) { + window->setProperty(NotificationPropertyData, data); + // for (auto it = data.begin(); it != data.end(); ++it) + // window->setProperty(it.key().toLatin1(), it.value()); int *screenHeightOffset = &mScreenHeightOffset[screen->name()]; // Access optimization QRect availableGeometry = screen->availableGeometry(); int heightOffset = @@ -195,7 +189,8 @@ bool Notifier::createNotification(Notifier::NotificationType type, QVariantMap d } } }, - Qt::QueuedConnection); + static_cast(Qt::QueuedConnection | Qt::SingleShotConnection)); + lDebug() << log().arg("Engine loading notification"); engine->load(url); } } diff --git a/Linphone/view/Control/Button/Button.qml b/Linphone/view/Control/Button/Button.qml index 6a762df53..82c10f0ba 100644 --- a/Linphone/view/Control/Button/Button.qml +++ b/Linphone/view/Control/Button/Button.qml @@ -21,6 +21,7 @@ Control.Button { property bool shadowEnabled: enabled && (activeFocus || containsMouse) property var contentImageColor property alias containsMouse: mouseArea.containsMouse + property bool asynchronous: true hoverEnabled: true activeFocusOnTab: true // leftPadding: 20 * DefaultStyle.dp @@ -38,7 +39,7 @@ Control.Button { } background: Loader{ - asynchronous: true + asynchronous: mainItem.asynchronous anchors.fill: parent sourceComponent: diff --git a/Linphone/view/Control/Popup/DesktopPopup.qml b/Linphone/view/Control/Popup/DesktopPopup.qml index f90a6756b..2ad569c8b 100644 --- a/Linphone/view/Control/Popup/DesktopPopup.qml +++ b/Linphone/view/Control/Popup/DesktopPopup.qml @@ -40,21 +40,21 @@ import Qt.labs.platform */ // --------------------------------------------------------------------------- - objectName: '__internalWindow' - property bool isFrameLess : false; - property bool showAsTool : false - // Don't use Popup for flags : it could lead to error in geometry. On Mac, Using Tool ensure to have the Window on Top and fullscreen independant - flags: Qt.BypassWindowManagerHint | (showAsTool?Qt.Tool:Qt.WindowStaysOnTopHint) | Qt.Window | Qt.FramelessWindowHint; - opacity: 1.0 - height: _content[0] != null ? _content[0].height : 0 - width: _content[0] != null ? _content[0].width : 0 - visible:true - Item { + objectName: '__internalWindow' + property bool isFrameLess : false; + property bool showAsTool : false + // Don't use Popup for flags : it could lead to error in geometry. On Mac, Using Tool ensure to have the Window on Top and fullscreen independant + flags: Qt.BypassWindowManagerHint | (showAsTool?Qt.Tool:Qt.WindowStaysOnTopHint) | Qt.Window | Qt.FramelessWindowHint; + opacity: 1.0 + height: _content[0] != null ? _content[0].height : 0 + width: _content[0] != null ? _content[0].width : 0 + visible:true + Item { id: content anchors.fill:parent property var $parent: mainItem - } + } // --------------------------------------------------------------------------- /* diff --git a/Linphone/view/Control/Popup/Notification/Notification.qml b/Linphone/view/Control/Popup/Notification/Notification.qml index c5ca1482a..624b0950a 100644 --- a/Linphone/view/Control/Popup/Notification/Notification.qml +++ b/Linphone/view/Control/Popup/Notification/Notification.qml @@ -17,6 +17,8 @@ DesktopPopup { default property alias _content: content.data signal deleteNotification (var notification) + width: mainItem.overriddenWidth + height: mainItem.overriddenHeight // Use as an intermediate between signal/slot without propagate the notification var : last signal parameter will be the last notification instance function deleteNotificationSlot(){ @@ -29,42 +31,46 @@ DesktopPopup { } deleteNotificationSlot(); } - Rectangle { - id: background + anchors.fill: parent + visible: backgroundLoader.status != Loader.Ready color: DefaultStyle.grey_0 - height: mainItem.overriddenHeight - width: mainItem.overriddenWidth radius: mainItem.radius - border { color: DefaultStyle.grey_400 width: 1 * DefaultStyle.dp } - - Item { - id: content - - anchors.fill: parent - } - - Image { - id: iconSign - - anchors { - left: parent.left - top: parent.top + } + + Loader{ + id: backgroundLoader + asynchronous: true + sourceComponent: Item{ + width: mainItem.overriddenWidth + height: mainItem.overriddenHeight + Rectangle { + id: background + anchors.fill: parent + visible: backgroundLoader.status != Loader.Ready + color: DefaultStyle.grey_0 + radius: mainItem.radius + border { + color: DefaultStyle.grey_400 + width: 1 * DefaultStyle.dp + } + } + MultiEffect { + source: background + anchors.fill: background + shadowEnabled: true + shadowColor: DefaultStyle.grey_1000 + shadowOpacity: 0.1 + shadowBlur: 0.1 } - - } } - MultiEffect { - source: background - anchors.fill: background - shadowEnabled: true - shadowColor: DefaultStyle.grey_1000 - shadowOpacity: 0.1 - shadowBlur: 0.1 + Item { + id: content + anchors.fill: parent } } diff --git a/Linphone/view/Control/Popup/Notification/NotificationReceivedCall.qml b/Linphone/view/Control/Popup/Notification/NotificationReceivedCall.qml index 48337e002..60896c334 100644 --- a/Linphone/view/Control/Popup/Notification/NotificationReceivedCall.qml +++ b/Linphone/view/Control/Popup/Notification/NotificationReceivedCall.qml @@ -9,6 +9,7 @@ Notification { radius: 20 * DefaultStyle.dp overriddenWidth: content.implicitWidth//101 * DefaultStyle.dp overriddenHeight: content.implicitHeight//422 * DefaultStyle.dp + readonly property var call: notificationData && notificationData.call property var state: call.core.state property var status: call.core.status @@ -20,7 +21,7 @@ Notification { onStatusChanged:{ console.log("status", status) } - + Popup { id: content visible: mainItem.visible @@ -86,6 +87,7 @@ Notification { color: DefaultStyle.success_500main Layout.preferredWidth: 75 * DefaultStyle.dp Layout.preferredHeight: 55 * DefaultStyle.dp + asynchronous: false contentItem: EffectImage { colorizationColor: DefaultStyle.grey_0 imageSource: AppIcons.phone @@ -93,6 +95,7 @@ Notification { imageHeight: 32 * DefaultStyle.dp } onClicked: { + console.debug("[NotificationReceivedCall] Accept click") UtilsCpp.openCallsWindow(mainItem.call) mainItem.call.core.lAccept(false) } @@ -101,6 +104,7 @@ Notification { color: DefaultStyle.danger_500main Layout.preferredWidth: 75 * DefaultStyle.dp Layout.preferredHeight: 55 * DefaultStyle.dp + asynchronous: false contentItem: EffectImage { colorizationColor: DefaultStyle.grey_0 imageSource: AppIcons.endCall @@ -108,10 +112,12 @@ Notification { imageHeight: 32 * DefaultStyle.dp } onClicked: { + console.debug("[NotificationReceivedCall] Decline click") mainItem.call.core.lDecline() } } } } } + } diff --git a/Linphone/view/Page/Window/Call/CallsWindow.qml b/Linphone/view/Page/Window/Call/CallsWindow.qml index dae436e32..51bd561c7 100644 --- a/Linphone/view/Page/Window/Call/CallsWindow.qml +++ b/Linphone/view/Page/Window/Call/CallsWindow.qml @@ -287,6 +287,7 @@ AbstractWindow { } /************************* CONTENT ********************************/ + Rectangle { anchors.fill: parent color: DefaultStyle.grey_900 @@ -533,7 +534,9 @@ AbstractWindow { } } } + } + RowLayout { Layout.fillWidth: true Layout.fillHeight: true @@ -561,6 +564,8 @@ AbstractWindow { headerValidateButtonText: qsTr("Ajouter") } } + + Component { id: contactsListPanel Item { @@ -1352,18 +1357,24 @@ AbstractWindow { } Component { id: inCallItem - Item { - property string objectName: "inCallItem" - CallLayout{ - anchors.fill: parent - anchors.leftMargin: 20 * DefaultStyle.dp - anchors.rightMargin: (rightPanel.visible ? 0 : 10) * DefaultStyle.dp // Grid and AS have 10 in right margin (so apply -10 here) - anchors.topMargin: 10 * DefaultStyle.dp - call: mainWindow.call - callTerminatedByUser: mainWindow.callTerminatedByUser + Loader{ + asynchronous: true + sourceComponent: Item { + property string objectName: "inCallItem" + CallLayout{ + anchors.fill: parent + anchors.leftMargin: 20 * DefaultStyle.dp + anchors.rightMargin: (rightPanel.visible ? 0 : 10) * DefaultStyle.dp // Grid and AS have 10 in right margin (so apply -10 here) + anchors.topMargin: 10 * DefaultStyle.dp + call: mainWindow.call + callTerminatedByUser: mainWindow.callTerminatedByUser + } } } } + + + RowLayout { id: bottomButtonsLayout Layout.alignment: Qt.AlignHCenter @@ -1723,6 +1734,8 @@ AbstractWindow { } } } + } } + }