diff --git a/CMakeLists.txt b/CMakeLists.txt index 5646aabf6..41879cd52 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -235,6 +235,7 @@ if (APPLE) src/components/core/event-count-notifier/EventCountNotifierMacOs.m src/components/other/desktop-tools/DesktopToolsMacOs.cpp src/components/other/desktop-tools/screen-saver/ScreenSaverMacOs.m + src/components/other/desktop-tools/state-process/StateProcessMacOs.mm ) list(APPEND HEADERS src/app/single-application/SingleApplicationPrivate.hpp @@ -326,6 +327,15 @@ execute_process(COMMAND ${CMAKE_COMMAND} -E copy "${CMAKE_CURRENT_SOURCE_DIR}/tools/private/pre-commit" "${CMAKE_CURRENT_SOURCE_DIR}/.git/hooks/pre-commit" ) +set(_QML_IMPORT_PATHS "") +list(APPEND _QML_IMPORT_PATHS "${CMAKE_CURRENT_SOURCE_DIR}/ui/modules") +list(APPEND _QML_IMPORT_PATHS "${CMAKE_CURRENT_SOURCE_DIR}/ui/dev-modules") +list(APPEND _QML_IMPORT_PATHS "${CMAKE_CURRENT_SOURCE_DIR}/ui/scripts") +list(APPEND _QML_IMPORT_PATHS "${CMAKE_CURRENT_SOURCE_DIR}/ui/views") + + +set(QML_IMPORT_PATH ${_QML_IMPORT_PATHS} CACHE STRING "Path used to locate CMake modules by Qt Creator" FORCE) + # ------------------------------------------------------------------------------ # Create config.h file @@ -432,7 +442,7 @@ if (UNIX AND NOT APPLE) RENAME "${EXECUTABLE_NAME}.svg" ) - set(ICON_DIRS 16x16 22x22 24x24 32x32 64x64 128x128) + set(ICON_DIRS 16x16 22x22 24x24 32x32 64x64 128x128 256x256) foreach (DIR ${ICON_DIRS}) install(FILES "${ASSETS_DIR}/icons/hicolor/${DIR}/apps/icon.png" DESTINATION "${CMAKE_INSTALL_DATADIR}/icons/hicolor/${DIR}/apps/" diff --git a/resources.qrc b/resources.qrc index 58a27a6c0..d85bde972 100644 --- a/resources.qrc +++ b/resources.qrc @@ -404,7 +404,6 @@ ui/views/App/Calls/IncomingCall.qml ui/views/App/Calls/OutgoingCall.qml ui/views/App/Calls/ZrtpTokenAuthentication.qml - ui/views/App/Main/+5.9/MainWindowMenuBar.qml ui/views/App/Main/Assistant/ActivateAppSipAccountWithEmail.qml ui/views/App/Main/Assistant/ActivateAppSipAccountWithPhoneNumber.qml ui/views/App/Main/Assistant/AssistantAbstractView.qml @@ -430,7 +429,6 @@ ui/views/App/Main/Dialogs/ManageAccounts.qml ui/views/App/Main/Home.qml ui/views/App/Main/InviteFriends.qml - ui/views/App/Main/+mac/MainWindowMenuBar.qml ui/views/App/Main/MainWindow.js ui/views/App/Main/MainWindowMenuBar.qml ui/views/App/Main/MainWindow.qml @@ -479,5 +477,6 @@ ui/views/App/Styles/Settings/SettingsAudioStyle.qml ui/views/App/Styles/Settings/SettingsWindowStyle.qml assets/images/linphone_logo.svg + ui/views/App/Main/MainWindowTopMenuBar.qml diff --git a/src/app/App.cpp b/src/app/App.cpp index 72886dbbe..e145727c6 100644 --- a/src/app/App.cpp +++ b/src/app/App.cpp @@ -47,6 +47,7 @@ #include "translator/DefaultTranslator.hpp" #include "utils/LinphoneUtils.hpp" #include "utils/Utils.hpp" +#include "components/other/desktop-tools/DesktopTools.hpp" #include "App.hpp" @@ -173,6 +174,9 @@ static inline shared_ptr getConfigIfExists (const QCommandLine // ----------------------------------------------------------------------------- App::App (int &argc, char *argv[]) : SingleApplication(argc, argv, true, Mode::User | Mode::ExcludeAppPath | Mode::ExcludeAppVersion) { + + connect(this, SIGNAL(applicationStateChanged(Qt::ApplicationState)), this, SLOT(stateChanged(Qt::ApplicationState))); + setWindowIcon(QIcon(LinphoneUtils::WindowIconPath)); createParser(); @@ -405,11 +409,12 @@ void App::smartShowWindow (QQuickWindow *window) { } // ----------------------------------------------------------------------------- - bool App::hasFocus () const { return getMainWindow()->isActive() || (mCallsWindow && mCallsWindow->isActive()); } - +void App::stateChanged(Qt::ApplicationState pState) { + DesktopTools::applicationStateChanged(pState); +} // ----------------------------------------------------------------------------- void App::createParser () { diff --git a/src/app/App.hpp b/src/app/App.hpp index f57c8db75..f499fdc7f 100644 --- a/src/app/App.hpp +++ b/src/app/App.hpp @@ -103,6 +103,9 @@ public: Q_INVOKABLE static void smartShowWindow (QQuickWindow *window); +public slots: + void stateChanged(Qt::ApplicationState); + signals: void configLocaleChanged (const QString &locale); diff --git a/src/components/other/desktop-tools/DesktopToolsLinux.hpp b/src/components/other/desktop-tools/DesktopToolsLinux.hpp index fb0385174..14abc158b 100644 --- a/src/components/other/desktop-tools/DesktopToolsLinux.hpp +++ b/src/components/other/desktop-tools/DesktopToolsLinux.hpp @@ -40,6 +40,8 @@ public: bool getScreenSaverStatus () const; void setScreenSaverStatus (bool status); + static void applicationStateChanged(Qt::ApplicationState){}; + signals: void screenSaverStatusChanged (bool status); diff --git a/src/components/other/desktop-tools/DesktopToolsMacOs.hpp b/src/components/other/desktop-tools/DesktopToolsMacOs.hpp index a61655d4c..935ba9ea3 100644 --- a/src/components/other/desktop-tools/DesktopToolsMacOs.hpp +++ b/src/components/other/desktop-tools/DesktopToolsMacOs.hpp @@ -24,7 +24,6 @@ #define DESKTOP_TOOLS_MAC_OS_H_ #include - // ============================================================================= class DesktopTools : public QObject { @@ -39,6 +38,8 @@ public: bool getScreenSaverStatus () const; void setScreenSaverStatus (bool status); + static void applicationStateChanged(Qt::ApplicationState currentState); + signals: void screenSaverStatusChanged (bool status); diff --git a/src/components/other/desktop-tools/DesktopToolsWindows.hpp b/src/components/other/desktop-tools/DesktopToolsWindows.hpp index 7f5fe28cc..8dcce6ad9 100644 --- a/src/components/other/desktop-tools/DesktopToolsWindows.hpp +++ b/src/components/other/desktop-tools/DesktopToolsWindows.hpp @@ -39,6 +39,8 @@ public: bool getScreenSaverStatus () const; void setScreenSaverStatus (bool status); + static void applicationStateChanged(Qt::ApplicationState){}; + signals: void screenSaverStatusChanged (bool status); diff --git a/src/components/other/desktop-tools/state-process/StaeProcessMacOs.m b/src/components/other/desktop-tools/state-process/StaeProcessMacOs.m new file mode 100644 index 000000000..e69de29bb diff --git a/src/components/other/desktop-tools/state-process/StateProcessMacOs.mm b/src/components/other/desktop-tools/state-process/StateProcessMacOs.mm new file mode 100644 index 000000000..cb536ba5a --- /dev/null +++ b/src/components/other/desktop-tools/state-process/StateProcessMacOs.mm @@ -0,0 +1,20 @@ +#include "../DesktopToolsMacOs.hpp" +#import +#import + +// Store a unique global instance of Activity to avoid App Nap of MacOs +static id g_backgroundActivity =0; + +void DesktopTools::applicationStateChanged(Qt::ApplicationState p_currentState) +{ + if( p_currentState == Qt::ApplicationActive && g_backgroundActivity != 0 ) + {// Entering Foreground + [[NSProcessInfo processInfo] endActivity:g_backgroundActivity]; + [g_backgroundActivity release]; + g_backgroundActivity = 0; + }else if( g_backgroundActivity == 0 ) + {// Doesn't begin activity if it is already started + g_backgroundActivity = [[NSProcessInfo processInfo] beginActivityWithOptions:NSActivityUserInitiatedAllowingIdleSystemSleep reason:@"Linphone : Continue to receive requests while in Background"]; + [g_backgroundActivity retain]; + } +} diff --git a/src/native/mac.mm b/src/native/mac.mm new file mode 100644 index 000000000..e69de29bb diff --git a/ui/views/App/Main/MainWindow.qml b/ui/views/App/Main/MainWindow.qml index 9661c6a0f..f0c062472 100644 --- a/ui/views/App/Main/MainWindow.qml +++ b/ui/views/App/Main/MainWindow.qml @@ -1,6 +1,7 @@ import QtQuick 2.7 import QtQuick.Controls 2.2 import QtQuick.Layouts 1.3 +import Qt.labs.platform 1.0 import Common 1.0 import Linphone 1.0 @@ -192,14 +193,14 @@ ApplicationWindow { visible: Qt.platform.os !== 'osx' onClicked: menuBar.open() - MainWindowMenuBar { id: menuBar } + } } } - + MainWindowTopMenuBar{} // ----------------------------------------------------------------------- // Content. // ----------------------------------------------------------------------- diff --git a/ui/views/App/Main/MainWindowMenuBar.qml b/ui/views/App/Main/MainWindowMenuBar.qml index e32b8fe31..8acb0faec 100644 --- a/ui/views/App/Main/MainWindowMenuBar.qml +++ b/ui/views/App/Main/MainWindowMenuBar.qml @@ -1,5 +1,6 @@ import QtQuick 2.7 import QtQuick.Controls 2.3 +import Qt.labs.platform 1.0 import Linphone 1.0 @@ -48,6 +49,7 @@ Item { Menu { id: menu + title: qsTr('Settings') MenuItem { text: qsTr('settings')