diff --git a/ScreenPlay/app.cpp b/ScreenPlay/app.cpp index 58ac9123..b648c9ea 100644 --- a/ScreenPlay/app.cpp +++ b/ScreenPlay/app.cpp @@ -205,7 +205,7 @@ void App::init() // Must be called last to display a error message on startup by the qml engine m_screenPlayManager->init(m_globalVariables, m_monitorListModel, m_telemetry, m_settings); - QObject::connect(m_monitorListModel.get(), &MonitorListModel::monitorConfigurationChanged, m_screenPlayManager.get(), &ScreenPlayManager::closeAllWallpapers); + QObject::connect(m_monitorListModel.get(), &MonitorListModel::monitorConfigurationChanged, m_screenPlayManager.get(), &ScreenPlayManager::removeAllWallpapers); } QString App::version() const diff --git a/ScreenPlay/main.cpp b/ScreenPlay/main.cpp index 18b535c5..ba4163b2 100644 --- a/ScreenPlay/main.cpp +++ b/ScreenPlay/main.cpp @@ -76,7 +76,6 @@ int main(int argc, char* argv[]) ScreenPlay::App app; - if (app.m_isAnotherScreenPlayInstanceRunning) { return 0; } else { diff --git a/ScreenPlay/src/monitorlistmodel.cpp b/ScreenPlay/src/monitorlistmodel.cpp index 4ed25ec0..36b92993 100644 --- a/ScreenPlay/src/monitorlistmodel.cpp +++ b/ScreenPlay/src/monitorlistmodel.cpp @@ -223,9 +223,10 @@ QRect MonitorListModel::getAbsoluteDesktopSize() const } /*! - \brief Sets the previewImage and appID for a list item. + \brief Sets a shared_ptr to the monitor list. This should be used to set and + remove the shared_ptr. */ -void MonitorListModel::setWallpaperActiveMonitor(const std::shared_ptr& wallpaper, const QVector monitors) +void MonitorListModel::setWallpaperMonitor(const std::shared_ptr& wallpaper, const QVector monitors) { for (const int monitor : monitors) { diff --git a/ScreenPlay/src/monitorlistmodel.h b/ScreenPlay/src/monitorlistmodel.h index f3bea917..311ec59e 100644 --- a/ScreenPlay/src/monitorlistmodel.h +++ b/ScreenPlay/src/monitorlistmodel.h @@ -99,7 +99,8 @@ public: int rowCount(const QModelIndex& parent = QModelIndex()) const override; QVariant data(const QModelIndex& index, int role = Qt::DisplayRole) const override; - void setWallpaperActiveMonitor(const std::shared_ptr& wallpaper, + void setWallpaperMonitor( + const std::shared_ptr& wallpaper, const QVector monitors); std::optional getAppIDByMonitorIndex(const int index) const; diff --git a/ScreenPlay/src/screenplaymanager.cpp b/ScreenPlay/src/screenplaymanager.cpp index b2614381..afd1fdec 100644 --- a/ScreenPlay/src/screenplaymanager.cpp +++ b/ScreenPlay/src/screenplaymanager.cpp @@ -146,7 +146,7 @@ bool ScreenPlayManager::createWallpaper( fillMode, type, m_settings->checkWallpaperVisible()); - m_monitorListModel->setWallpaperActiveMonitor(wallpaper, monitorIndex); + m_monitorListModel->setWallpaperMonitor(wallpaper, monitorIndex); return true; } @@ -170,13 +170,13 @@ bool ScreenPlayManager::createWallpaper( m_settings->checkWallpaperVisible()); QObject::connect(wallpaper.get(), &ScreenPlayWallpaper::requestSave, this, &ScreenPlayManager::requestSaveProfiles); - QObject::connect(wallpaper.get(), &ScreenPlayWallpaper::requestClose, this, &ScreenPlayManager::removeApp); + QObject::connect(wallpaper.get(), &ScreenPlayWallpaper::requestClose, this, &ScreenPlayManager::removeWallpaper); QObject::connect(wallpaper.get(), &ScreenPlayWallpaper::error, this, &ScreenPlayManager::displayErrorPopup); if (!wallpaper->start()) { return false; } m_screenPlayWallpapers.append(wallpaper); - m_monitorListModel->setWallpaperActiveMonitor(wallpaper, monitorIndex); + m_monitorListModel->setWallpaperMonitor(wallpaper, monitorIndex); increaseActiveWallpaperCounter(); return true; } @@ -217,7 +217,7 @@ bool ScreenPlayManager::createWidget( type); QObject::connect(widget.get(), &ScreenPlayWidget::requestSave, this, &ScreenPlayManager::requestSaveProfiles); - QObject::connect(widget.get(), &ScreenPlayWidget::requestClose, this, &ScreenPlayManager::removeApp); + QObject::connect(widget.get(), &ScreenPlayWidget::requestClose, this, &ScreenPlayManager::removeWidget); QObject::connect(widget.get(), &ScreenPlayWidget::error, this, &ScreenPlayManager::displayErrorPopup); if (!widget->start()) { return false; @@ -228,72 +228,46 @@ bool ScreenPlayManager::createWidget( } /*! - \brief Iterates all Wallpaper and Widgets for the matching appID. Returns true if a matching appID - was successful set. + \brief Removes all wallpaper entries in the profiles.json. */ -bool ScreenPlayManager::appConnected(const std::shared_ptr& connection) +bool ScreenPlayManager::removeAllWallpapers() { - for (const auto& item : qAsConst(m_screenPlayWidgets)) { - if (item->appID() == connection->appID()) { - item->setSDKConnection(connection); - return true; + + if (m_screenPlayWallpapers.empty()) { + qWarning() << "Trying to remove all Wallpapers while m_screenPlayWallpapers is not empty. Count: " << m_screenPlayWallpapers.size(); + return false; + } + + for (auto& client : m_screenPlayWallpapers) { + if (removeWallpaper(client->appID())) { + decreaseActiveWallpaperCounter(); } } - for (const auto& item : qAsConst(m_screenPlayWallpapers)) { - if (item->appID() == connection->appID()) { - item->setSDKConnection(connection); - return true; - } - } + emit requestSaveProfiles(); - qWarning() << "No matching appID for id" << connection->appID() << " was found!"; - - return false; -} - -/*! - \brief Removes all wallpaper entries in the profiles.json. This method will likely be removed - when using nlohmann/json in the future. -*/ -void ScreenPlayManager::removeAllWallpapers() -{ - if (!m_screenPlayWallpapers.empty()) { - - closeAllWallpapers(); - m_screenPlayWallpapers.clear(); - - m_monitorListModel->clearActiveWallpaper(); - - emit requestSaveProfiles(); - setActiveWallpaperCounter(0); - if (activeWallpaperCounter() != m_screenPlayWallpapers.length()) { - if (m_telemetry) { - m_telemetry->sendEvent("wallpaper", "error_removeAllWallpapers"); - } - - qWarning() << "activeWallpaperCounter value: " << activeWallpaperCounter() - << "does not match m_screenPlayWallpapers length:" << m_screenPlayWallpapers.length(); - } - } else { - if (m_telemetry) { - m_telemetry->sendEvent("wallpaper", "error_removeAllWallpapers_m_screenPlayWallpapers_notEmpty"); - } - qWarning() << "Trying to remove all wallpapers while m_screenPlayWallpapers is not empty. Count: " << m_screenPlayWallpapers.size(); - } + return true; } /*! \brief Removes all widgets and resets the activeWidgetCounter to 0. */ -void ScreenPlayManager::removeAllWidgets() +bool ScreenPlayManager::removeAllWidgets() { - if (!m_screenPlayWidgets.empty()) { - closeAllWidgets(); - m_screenPlayWidgets.clear(); - emit requestSaveProfiles(); - setActiveWidgetsCounter(0); + if (m_screenPlayWallpapers.empty()) { + qWarning() << "Trying to remove all Widgets while m_screenPlayWallpapers is not empty. Count: " << m_screenPlayWallpapers.size(); + return false; } + + for (auto& client : m_screenPlayWallpapers) { + if (removeWidget(client->appID())) { + decreaseActiveWidgetsCounter(); + } + } + + emit requestSaveProfiles(); + + return true; } /*! @@ -305,39 +279,16 @@ bool ScreenPlayManager::removeWallpaperAt(int index) { if (auto appID = m_monitorListModel->getAppIDByMonitorIndex(index)) { - return removeApp(*appID); - } - if (m_telemetry) { - m_telemetry->sendEvent("wallpaper", "error_removeWallpaperAt"); + if (removeWallpaper(*appID)) { + emit requestSaveProfiles(); + return true; + } } + qWarning() << "Could not remove Wallpaper at index:" << index; return false; } -/*! - \brief Disconnects the connection, remove -*/ -bool ScreenPlayManager::removeApp(const QString& appID) -{ - if (!closeConnection(appID)) { - qWarning() << "Could not close socket. Abort!"; - return false; - } - - m_monitorListModel->closeWallpaper(appID); - - const QString appIDCopy = appID; - if (!removeWallpaperByAppID(appIDCopy)) { - if (m_telemetry) { - m_telemetry->sendEvent("wallpaper", "error_removeWallpaperAt_removeWallpaperByAppID"); - } - qWarning() << "Could not remove Wallpaper " << appIDCopy << " from wallpaper list!"; - return false; - } - emit requestSaveProfiles(); - return true; -} - /*! \brief Request a spesific json profile to display in the active wallpaper popup on the right. */ @@ -372,13 +323,14 @@ bool ScreenPlayManager::setWallpaperValueAtMonitorIndex(const int index, const Q */ void ScreenPlayManager::setAllWallpaperValue(const QString& key, const QString& value) { - for (const std::shared_ptr& uPtrWallpaper : qAsConst(m_screenPlayWallpapers)) { - setWallpaperValue(uPtrWallpaper->appID(), key, value); + for (auto& wallpaper : m_screenPlayWallpapers) { + setWallpaperValue(wallpaper->appID(), key, value); } } /*! \brief Returns \c a ScreenPlayWallpaper if successful, otherwhise \c std::nullopt. + This function is only used in QML. */ ScreenPlayWallpaper* ScreenPlayManager::getWallpaperByAppID(const QString& appID) const { @@ -395,108 +347,90 @@ ScreenPlayWallpaper* ScreenPlayManager::getWallpaperByAppID(const QString& appID */ void ScreenPlayManager::newConnection() { - auto connection = std::make_shared(m_server->nextPendingConnection()); + auto connection = std::make_unique(m_server->nextPendingConnection()); + // Because user can close widgets by pressing x the widgets must send us the event QObject::connect(connection.get(), &SDKConnection::requestDecreaseWidgetCount, this, [this]() { setActiveWidgetsCounter(activeWallpaperCounter() - 1); }); QObject::connect(connection.get(), &SDKConnection::requestRaise, this, &ScreenPlayManager::requestRaise); - // Only after we receive the first message with appID and type we can set the shared reference to the - // ScreenPlayWallpaper or ScreenPlayWidgets class + + // Only after we receive the first message with appID and type we can set the SDKConnection to the + // ScreenPlayWallpaper or ScreenPlayWidgets class. QObject::connect(connection.get(), &SDKConnection::appConnected, this, [this](const SDKConnection* connection) { - for (const auto& client : qAsConst(m_clients)) { - if (client.get() == connection) { - appConnected(client); + if (m_unconnectedClients.empty()) { + qWarning() << "Unable to match a connection. UnconnectedClients list is empty!"; + return; + } + + qWarning() << "There are no wallpaper or widgets that have to SDKConnection " + << "m_screenPlayWallpapers count: " << m_screenPlayWallpapers.size() + << "m_screenPlayWidgets count: " << m_screenPlayWidgets.size() + << "m_unconnectedClients count: " << m_unconnectedClients.size(); + + std::unique_ptr matchingConnection; + for (int i = 0; i < m_unconnectedClients.size(); ++i) { + if (m_unconnectedClients.at(i).get() == connection) { + matchingConnection = std::move(m_unconnectedClients.at(i)); + m_unconnectedClients.erase(m_unconnectedClients.begin() + i); + } + } + + if (!matchingConnection) { + qWarning() << "Unable to match a connection! Aborting!"; + return; + } + + for (int i = 0; i < m_screenPlayWallpapers.size(); ++i) { + if (m_screenPlayWallpapers.at(i)->appID() == matchingConnection->appID()) { + m_screenPlayWallpapers.at(i)->setSDKConnection(std::move(matchingConnection)); return; } } - qWarning() << "No matching connection found!"; + + for (int i = 0; i < m_screenPlayWidgets.size(); ++i) { + if (m_screenPlayWidgets.at(i)->appID() == matchingConnection->appID()) { + m_screenPlayWidgets.at(i)->setSDKConnection(std::move(matchingConnection)); + return; + } + } + + qWarning() << "No matching connection found!"; }); - m_clients.append(connection); + m_unconnectedClients.push_back(std::move(connection)); } /*! - \brief Closes all wallpaper connection with the following type: - \list - \li videoWallpaper - \li qmlWallpaper - \li htmlWallpaper - \li godotWallpaper - \endlist + \brief Removes a wallpaper from the given appID. Returns true on success. */ -bool ScreenPlayManager::closeAllWallpapers() +bool ScreenPlayManager::removeWallpaper(const QString& appID) { - if (m_screenPlayWallpapers.empty() && m_activeWallpaperCounter == 0) { - qWarning() << "Cannot close connection on empty client list!"; - return true; - } + for (auto& wallpaper : m_screenPlayWallpapers) { + if (wallpaper->appID() == appID) { - if (!closeConntectionByType(ScreenPlayUtil::getAvailableWallpaper())) { - return false; - } - setActiveWallpaperCounter(0); - return true; -} + qInfo() << "Remove wallpaper " << wallpaper->file() << "at monitor " << wallpaper->screenNumber(); -/*! - \brief Closes all widgets connection with the following type: - \list - \li qmlWidget - \li htmlWidget - \li standaloneWidget - \endlist -*/ -bool ScreenPlayManager::closeAllWidgets() -{ - if (m_screenPlayWidgets.empty() && m_activeWidgetsCounter == 0) { - qWarning() << "Cannot close connection on empty client list!"; - return true; - } + // The MonitorListModel contains a shared_ptr of this object that needs to be removed + // for shared_ptr to release the object. + m_monitorListModel->setWallpaperMonitor({}, wallpaper->screenNumber()); - if (!closeConntectionByType(ScreenPlayUtil::getAvailableWidgets())) { - return false; - } - setActiveWidgetsCounter(0); - return true; -} - -/*! - \brief Closes a connection by type. Used only by closeAllWidgets() and closeAllWallpapers() -*/ -bool ScreenPlayManager::closeConntectionByType(const QStringList& types) -{ - if (m_clients.isEmpty()) { - qWarning() << "Cannot close connection on empty client list!"; - return true; - } - - for (auto& client : m_clients) { - if (types.contains(client->type(), Qt::CaseInsensitive)) { - if (client->close()) { + decreaseActiveWallpaperCounter(); + if (!m_screenPlayWallpapers.removeOne(wallpaper)) { + qWarning() << "Unable to remove Wallpaper from Wallpaper List"; return false; } - if (!m_clients.removeOne(client)) { - qWarning() << "Cannot close client"; + + if (activeWallpaperCounter() != m_screenPlayWallpapers.length()) { + qWarning() << "activeWallpaperCounter value: " << activeWallpaperCounter() + << "does not match m_screenPlayWallpapers length:" << m_screenPlayWallpapers.length(); return false; } + return true; } } - - return true; + return false; } -/*! - \brief Closes a Wallpaper or Widget connection by the given \a appID. -*/ -bool ScreenPlayManager::closeConnection(const QString& appID) +bool ScreenPlayManager::removeWidget(const QString& appID) { - if (m_clients.isEmpty()) - return true; - - for (auto& client : m_clients) { - if (client->appID() == appID) { - client->close(); - return m_clients.removeOne(client); - } - } return false; } @@ -505,7 +439,7 @@ bool ScreenPlayManager::closeConnection(const QString& appID) */ void ScreenPlayManager::setWallpaperValue(const QString& appID, const QString& key, const QString& value) { - for (const auto& wallpaper : qAsConst(m_screenPlayWallpapers)) { + for (auto& wallpaper : m_screenPlayWallpapers) { if (wallpaper->appID() == appID) { wallpaper->setWallpaperValue(key, value, true); } @@ -547,27 +481,6 @@ void ScreenPlayManager::saveProfiles() emit profilesSaved(); } -/*! - \brief Removes a wallpaper from the given appID. Returns true on success. -*/ -bool ScreenPlayManager::removeWallpaperByAppID(const QString& appID) -{ - for (auto& wallpaper : m_screenPlayWallpapers) { - if (wallpaper->appID() == appID) { - qInfo() << "Remove wallpaper " << wallpaper->file() << "at monitor " << wallpaper->screenNumber(); - decreaseActiveWallpaperCounter(); - m_screenPlayWallpapers.removeOne(wallpaper); - if (activeWallpaperCounter() != m_screenPlayWallpapers.length()) { - qWarning() << "activeWallpaperCounter value: " << activeWallpaperCounter() - << "does not match m_screenPlayWallpapers length:" << m_screenPlayWallpapers.length(); - return false; - } - return true; - } - } - return false; -} - /*! \brief Loads all wallpaper from profiles.json when the version number matches and starts the available wallpaper */ @@ -602,7 +515,7 @@ void ScreenPlayManager::loadProfiles() if (wallpaper.toObject().value("name").toString() != "default") continue; - for (const QJsonValueRef wallpaper : wallpaper.toObject().value("wallpaper").toArray()) { + for (QJsonValueRef wallpaper : wallpaper.toObject().value("wallpaper").toArray()) { QJsonObject wallpaperObj = wallpaper.toObject(); if (wallpaperObj.empty()) @@ -671,5 +584,4 @@ TEST_CASE("Loads profiles.json") GlobalVariables globalVariables; ScreenPlayManager manager; } - } diff --git a/ScreenPlay/src/screenplaymanager.h b/ScreenPlay/src/screenplaymanager.h index b16c1358..b5509161 100644 --- a/ScreenPlay/src/screenplaymanager.h +++ b/ScreenPlay/src/screenplaymanager.h @@ -64,14 +64,7 @@ class ScreenPlayManager : public QObject { Q_PROPERTY(int activeWidgetsCounter READ activeWidgetsCounter WRITE setActiveWidgetsCounter NOTIFY activeWidgetsCounterChanged) public: - explicit ScreenPlayManager( - - QObject* parent = nullptr); - - int activeWallpaperCounter() const { return m_activeWallpaperCounter; } - - int activeWidgetsCounter() const { return m_activeWidgetsCounter; } - bool isAnotherScreenPlayInstanceRunning() { return m_isAnotherScreenPlayInstanceRunning; } + explicit ScreenPlayManager(QObject* parent = nullptr); void init( const std::shared_ptr& globalVariables, @@ -79,14 +72,19 @@ public: const std::shared_ptr& telemetry, const std::shared_ptr& settings); + int activeWallpaperCounter() const { return m_activeWallpaperCounter; } + int activeWidgetsCounter() const { return m_activeWidgetsCounter; } + bool isAnotherScreenPlayInstanceRunning() { return m_isAnotherScreenPlayInstanceRunning; } + signals: - void projectSettingsListModelResult(ScreenPlay::ProjectSettingsListModel* li = nullptr); void activeWallpaperCounterChanged(int activeWallpaperCounter); void activeWidgetsCounterChanged(int activeWidgetsCounter); + void monitorConfigurationChanged(); + + void projectSettingsListModelResult(ScreenPlay::ProjectSettingsListModel* li = nullptr); void requestSaveProfiles(); void requestRaise(); void profilesSaved(); - void monitorConfigurationChanged(); void displayErrorPopup(const QString& msg); private slots: @@ -114,22 +112,17 @@ public slots: const QJsonObject& properties, const bool saveToProfilesConfigFile); - void removeAllWallpapers(); - void removeAllWidgets(); + bool removeAllWallpapers(); + bool removeAllWidgets(); bool removeWallpaperAt(const int index); - bool removeApp(const QString& appID); void requestProjectSettingsAtMonitorIndex(const int index); bool setWallpaperValueAtMonitorIndex(const int index, const QString& key, const QString& value); void setAllWallpaperValue(const QString& key, const QString& value); + void setWallpaperValue(const QString& appID, const QString& key, const QString& value); ScreenPlayWallpaper* getWallpaperByAppID(const QString& appID) const; void newConnection(); - bool closeAllWallpapers(); - bool closeAllWidgets(); - bool closeConntectionByType(const QStringList& types); - bool closeConnection(const QString& appID); - void setWallpaperValue(const QString& appID, const QString& key, const QString& value); void setActiveWallpaperCounter(int activeWallpaperCounter) { @@ -181,9 +174,9 @@ public slots: private: void loadProfiles(); - bool appConnected(const std::shared_ptr& connection); bool checkIsAnotherScreenPlayInstanceRunning(); - [[nodiscard]] bool removeWallpaperByAppID(const QString& appID); + bool removeWallpaper(const QString& appID); + bool removeWidget(const QString& appID); private: std::shared_ptr m_globalVariables; @@ -195,7 +188,8 @@ private: QVector> m_screenPlayWallpapers; QVector> m_screenPlayWidgets; - QVector> m_clients; + std::vector> m_unconnectedClients; + int m_activeWallpaperCounter { 0 }; int m_activeWidgetsCounter { 0 }; diff --git a/ScreenPlay/src/screenplaywallpaper.cpp b/ScreenPlay/src/screenplaywallpaper.cpp index 6e9a4d54..2edde2d5 100644 --- a/ScreenPlay/src/screenplaywallpaper.cpp +++ b/ScreenPlay/src/screenplaywallpaper.cpp @@ -10,6 +10,15 @@ namespace ScreenPlay { This class is only for managing the QProcess to an extern ScreenPlayWallpaper! */ +/*! + \brief Destructor for ScreenPlayWallpaper. +*/ +ScreenPlayWallpaper::~ScreenPlayWallpaper() +{ + qInfo() << "Remove wallpaper " << m_appID; + m_connection->close(); +} + /*! \brief Constructor for ScreenPlayWallpaper. */ @@ -112,7 +121,7 @@ bool ScreenPlayWallpaper::start() QJsonObject ScreenPlayWallpaper::getActiveSettingsJson() { QJsonArray screenNumber; - for (const int i : m_screenNumber) { + for (const int i : qAsConst(m_screenNumber)) { screenNumber.append(i); } @@ -183,9 +192,9 @@ void ScreenPlayWallpaper::setWallpaperValue(const QString& key, const QString& v /*! \brief Connects to ScreenPlay. Start a alive ping check for every 16 seconds. */ -void ScreenPlayWallpaper::setSDKConnection(const std::shared_ptr& connection) +void ScreenPlayWallpaper::setSDKConnection(std::unique_ptr connection) { - m_connection = connection; + m_connection = std::move(connection); QTimer::singleShot(1000, this, [this]() { if (playbackRate() != 1.0) { diff --git a/ScreenPlay/src/screenplaywallpaper.h b/ScreenPlay/src/screenplaywallpaper.h index 67d870e4..89d57ffe 100644 --- a/ScreenPlay/src/screenplaywallpaper.h +++ b/ScreenPlay/src/screenplaywallpaper.h @@ -68,6 +68,7 @@ class ScreenPlayWallpaper : public QObject { public: ScreenPlayWallpaper() { } + ~ScreenPlayWallpaper(); explicit ScreenPlayWallpaper( const QVector& screenNumber, @@ -93,7 +94,7 @@ public: const InstalledType::InstalledType type, const bool checkWallpaperVisible); - void setSDKConnection(const std::shared_ptr& connection); + void setSDKConnection(std::unique_ptr connection); QJsonObject getActiveSettingsJson(); @@ -236,7 +237,7 @@ public slots: private: const std::shared_ptr m_globalVariables; - std::shared_ptr m_connection; + std::unique_ptr m_connection; ProjectSettingsListModel m_projectSettingsListModel; QVector m_screenNumber; diff --git a/ScreenPlay/src/screenplaywidget.cpp b/ScreenPlay/src/screenplaywidget.cpp index bb21a18c..1df30e35 100644 --- a/ScreenPlay/src/screenplaywidget.cpp +++ b/ScreenPlay/src/screenplaywidget.cpp @@ -76,9 +76,9 @@ bool ScreenPlayWidget::start() /*! \brief Connects to ScreenPlay. Start a alive ping check for every 16 seconds. */ -void ScreenPlayWidget::setSDKConnection(const std::shared_ptr& connection) +void ScreenPlayWidget::setSDKConnection(std::unique_ptr connection) { - m_connection = connection; + m_connection = std::move(connection); qInfo() << "App widget connected!"; QObject::connect(m_connection.get(), &SDKConnection::jsonMessageReceived, this, [this](const QJsonObject obj) { if (obj.value("messageType") == "positionUpdate") { diff --git a/ScreenPlay/src/screenplaywidget.h b/ScreenPlay/src/screenplaywidget.h index 4fab323f..9da54a05 100644 --- a/ScreenPlay/src/screenplaywidget.h +++ b/ScreenPlay/src/screenplaywidget.h @@ -48,6 +48,7 @@ #include "sdkconnection.h" #include +#include namespace ScreenPlay { @@ -82,7 +83,7 @@ public: InstalledType::InstalledType type() const { return m_type; } - void setSDKConnection(const std::shared_ptr& connection); + void setSDKConnection(std::unique_ptr connection); ProjectSettingsListModel* getProjectSettingsListModel() { return &m_projectSettingsListModel; } @@ -147,7 +148,7 @@ signals: private: const std::shared_ptr m_globalVariables; - std::shared_ptr m_connection; + std::unique_ptr m_connection; ProjectSettingsListModel m_projectSettingsListModel; QProcess m_process; diff --git a/ScreenPlaySDK/inc/screenplaysdk.h b/ScreenPlaySDK/inc/screenplaysdk.h index 2eca5c6f..11c5ce06 100644 --- a/ScreenPlaySDK/inc/screenplaysdk.h +++ b/ScreenPlaySDK/inc/screenplaysdk.h @@ -85,6 +85,7 @@ public slots: void error(QLocalSocket::LocalSocketError socketError); void redirectMessage(QByteArray& msg); void pingAlive(); + void start(); void setType(QString type) { @@ -136,9 +137,6 @@ signals: const QString type, const bool checkWallpaperVisible); -private: - void init(); - private: QLocalSocket m_socket; diff --git a/ScreenPlaySDK/src/screenplaysdk.cpp b/ScreenPlaySDK/src/screenplaysdk.cpp index e3ee9025..04147e7c 100644 --- a/ScreenPlaySDK/src/screenplaysdk.cpp +++ b/ScreenPlaySDK/src/screenplaysdk.cpp @@ -6,7 +6,6 @@ static ScreenPlaySDK* global_sdkPtr = nullptr; ScreenPlaySDK::ScreenPlaySDK(QQuickItem* parent) : QQuickItem(parent) { - init(); } ScreenPlaySDK::ScreenPlaySDK( @@ -17,10 +16,9 @@ ScreenPlaySDK::ScreenPlaySDK( , m_type { type } , m_appID { appID } { - init(); } -void ScreenPlaySDK::init() +void ScreenPlaySDK::start() { // Redirect all messages from this to ScreenPlay global_sdkPtr = this; @@ -122,7 +120,7 @@ void ScreenPlaySDK::readyRead() qWarning() << "Command replaced contained bad volume float value: " << volumeParsed; } - qWarning() + qInfo() << type << fillMode << volumeParsed @@ -142,9 +140,7 @@ void ScreenPlaySDK::readyRead() void ScreenPlaySDK::error(QLocalSocket::LocalSocketError socketError) { - if (socketError == QLocalSocket::LocalSocketError::ConnectionRefusedError) { - QCoreApplication::quit(); - } + emit sdkDisconnected(); } void ScreenPlaySDK::redirectMessage(QByteArray& msg) @@ -172,8 +168,8 @@ void ScreenPlaySDK::ScreenPlaySDK::redirectMessageOutputToMainWindow(QtMsgType t return; QByteArray localMsg = msg.toLocal8Bit(); - QByteArray file = "File: " + QByteArray(context.file) + ", "; - QByteArray line = "in line " + QByteArray::number(context.line) + ", "; + localMsg += "\nFile: " + QByteArray(context.file) + ", "; + localMsg += "\nin line " + QByteArray::number(context.line) + ", "; global_sdkPtr->redirectMessage(localMsg); } diff --git a/ScreenPlayUtil/inc/public/ScreenPlayUtil/util.h b/ScreenPlayUtil/inc/public/ScreenPlayUtil/util.h index dbb0b4a2..fcd691b2 100644 --- a/ScreenPlayUtil/inc/public/ScreenPlayUtil/util.h +++ b/ScreenPlayUtil/inc/public/ScreenPlayUtil/util.h @@ -63,4 +63,5 @@ QStringList getAvailableTypes(); QStringList getAvailableFillModes(); bool isWallpaper(const ScreenPlay::InstalledType::InstalledType type); bool isWidget(const ScreenPlay::InstalledType::InstalledType type); +std::optional> parseStringToIntegerList(const QString string); } diff --git a/ScreenPlayUtil/src/util.cpp b/ScreenPlayUtil/src/util.cpp index e5f9265b..cd8948b3 100644 --- a/ScreenPlayUtil/src/util.cpp +++ b/ScreenPlayUtil/src/util.cpp @@ -29,6 +29,9 @@ std::optional openJsonFileToObject(const QString& path) return jsonDocument.object(); } +/*! + \brief . +*/ bool writeJsonObjectToFile(const QString& absoluteFilePath, const QJsonObject& object, bool truncate) { QFile configTmp; @@ -248,6 +251,9 @@ QString toLocal(const QString& url) return QUrl(url).toLocalFile(); } +/*! + \brief . +*/ QStringList getAvailableWallpaper() { return { @@ -260,6 +266,9 @@ QStringList getAvailableWallpaper() }; } +/*! + \brief . +*/ QStringList getAvailableWidgets() { return { @@ -268,11 +277,17 @@ QStringList getAvailableWidgets() }; } +/*! + \brief . +*/ QStringList getAvailableTypes() { return { getAvailableWallpaper() + getAvailableWidgets() }; } +/*! + \brief . +*/ bool isWallpaper(const ScreenPlay::InstalledType::InstalledType type) { @@ -286,6 +301,9 @@ bool isWallpaper(const ScreenPlay::InstalledType::InstalledType type) || type == InstalledType::GodotWallpaper); } +/*! + \brief . +*/ bool isWidget(const ScreenPlay::InstalledType::InstalledType type) { @@ -294,10 +312,36 @@ bool isWidget(const ScreenPlay::InstalledType::InstalledType type) return (type == InstalledType::QMLWidget || type == InstalledType::HTMLWidget); } +/*! + \brief See https://developer.mozilla.org/en-US/docs/Web/CSS/object-fit +*/ QStringList getAvailableFillModes() { - // https://developer.mozilla.org/en-US/docs/Web/CSS/object-fit return { "stretch", "fill", "contain", "cover", "scale-down" }; } +/*! + \brief parseIntList parses a list of string separated with a comma + "1,2,3". IMPORTANT: No trailing comma! + */ +std::optional> parseStringToIntegerList(const QString string) +{ + if (string.isEmpty()) + return {}; + + QVector list; + QStringList stringList = string.split(","); + for (const auto& item : stringList) { + bool ok = false; + int val = item.toInt(&ok); + if (!ok) { + qFatal("Could not parse item to Integer!"); + } else { + list.append(val); + } + } + + return list; +} + } diff --git a/ScreenPlayWallpaper/Wallpaper.qml b/ScreenPlayWallpaper/Wallpaper.qml index e3e509f8..2cb66c9b 100644 --- a/ScreenPlayWallpaper/Wallpaper.qml +++ b/ScreenPlayWallpaper/Wallpaper.qml @@ -1,5 +1,6 @@ -import QtQuick 2.14 import QtQml 2.14 +import QtQuick 2.14 +import QtQuick.Controls 2.14 import ScreenPlayWallpaper 1.0 import ScreenPlay.Enums.InstalledType 1.0 import ScreenPlay.Shader 1.0 @@ -234,4 +235,50 @@ Rectangle { } } } + + Pane { + id: debug + visible: Wallpaper.debugMode + enabled: Wallpaper.debugMode + width: parent.width * .3 + height: parent.height * .3 + anchors.centerIn: parent + background: Rectangle { + opacity: .5 + } + + Column { + anchors.fill: parent + anchors.margins: 20 + spacing: 10 + Text { + text: "appID " + Wallpaper.appID + font.pointSize: 14 + } + Text { + text: "basePath " + Wallpaper.basePath + font.pointSize: 14 + } + Text { + text: "fullContentPath " + Wallpaper.fullContentPath + font.pointSize: 14 + } + Text { + text: "fillMode " + Wallpaper.fillMode + font.pointSize: 14 + } + Text { + text: "sdk.type " + Wallpaper.sdk.type + font.pointSize: 14 + } + Text { + text: "sdk.isConnected " + Wallpaper.sdk.isConnected + font.pointSize: 14 + } + Text { + text: "sdk.appID " + Wallpaper.sdk.appID + font.pointSize: 14 + } + } + } } diff --git a/ScreenPlayWallpaper/main.cpp b/ScreenPlayWallpaper/main.cpp index bedc6732..329275c1 100644 --- a/ScreenPlayWallpaper/main.cpp +++ b/ScreenPlayWallpaper/main.cpp @@ -5,6 +5,8 @@ #include #include +#include "ScreenPlayUtil/util.h" + #if defined(Q_OS_WIN) #include "src/winwindow.h" #endif @@ -17,8 +19,6 @@ #include "src/macwindow.h" #endif -#include "screenplaysdk.h" - int main(int argc, char* argv[]) { //QApplication::setAttribute(Qt::AA_EnableHighDpiScaling); @@ -32,17 +32,12 @@ int main(int argc, char* argv[]) // If we start with only one argument (app path) // It means we want to test a single wallpaper QStringList argumentList = app.arguments(); + if (argumentList.length() == 1) { - - //Set the monitor number to test - #if defined(Q_OS_WIN) - - WinWindow window1({ 1 }, "test", "appid", "1", "fill", true); - //WinWindow window2({ 1 }, "test", "appid", "1", "fill", true); - //WinWindow window3({ 2 }, "test", "appid", "1", "fill", true); - - // WinWindow window({ 0 }, "C:/Program Files (x86)/Steam/steamapps/workshop/content/672870/qmlParticles", "appid", "1", "fill", true); + WinWindow window1({ 0 }, "test", "appID=test", "1", "fill", "videoWallpaper", true, true); + //WinWindow window2({ 1 }, "test", "appID=xyz", "1", "fill", true, true); + //WinWindow window3({ 2 }, "test", "appID=123", "1", "fill", true,true); #endif #if defined(Q_OS_LINUX) LinuxWindow window({ 0 }, "/home/graphicscore/Desktop/wallpapers/MechaGirl", "appid", "1", "fill", false); @@ -54,48 +49,24 @@ int main(int argc, char* argv[]) return app.exec(); } - // 6 parameter + 1 OS working directory default paramter + // 8 parameter + 1 OS working directory as the first default paramter if (argumentList.length() != 9) { return -3; } - // AppID, Type - ScreenPlaySDK sdk(argumentList.at(3), argumentList.at(6)); + const bool debugMode = true; - QString monitorNumbers = argumentList.at(1); - QStringList activeScreensList = monitorNumbers.split(","); + const auto activeScreensList = ScreenPlayUtil::parseStringToIntegerList(argumentList.at(1)); - activeScreensList.removeAll(","); - QVector list; - - if (monitorNumbers.length() == 1) { - bool canParseMonitorNumber = false; - int monitor = monitorNumbers.toInt(&canParseMonitorNumber); - if (!canParseMonitorNumber) { - qFatal("Could not parse monitor id to diplay wallpaper"); - } else { - list.append(monitor); - } - - } else { - - for (const QString& s : activeScreensList) { - bool ok = false; - int val = s.toInt(&ok); - if (!ok) { - qFatal("Could not parse monitor id to diplay wallpaper"); - } else { - list.append(val); - } - } - } - - if (list.empty()) { + if (!activeScreensList.has_value()) return -4; - } - // Args: which monitor, (2) path to project, (3)wallpaper secret to identify the connected socket, (4) volume, (5) fillmode, (6) type, (7) - // See screenplay.h @ScreenPlayWallpaper constructor how the args get created + // See ScreenPlayWallpaper m_appArgumentsList constructor how the args get created + const QString projectFilePath = argumentList.at(2); + const QString appID = argumentList.at(3); + const QString volume = argumentList.at(4); + const QString fillmode = argumentList.at(5); + const QString type = argumentList.at(6); bool okParseCheckWallpaperVisible = false; bool checkWallpaperVisible = argumentList.at(7).toInt(&okParseCheckWallpaperVisible); @@ -105,20 +76,37 @@ int main(int argc, char* argv[]) } #if defined(Q_OS_WIN) - WinWindow window(list, argumentList.at(2), argumentList.at(3), argumentList.at(4), argumentList.at(5), checkWallpaperVisible); - QObject::connect(&sdk, &ScreenPlaySDK::sdkDisconnected, &window, &WinWindow::destroyThis); - QObject::connect(&sdk, &ScreenPlaySDK::incommingMessage, &window, &WinWindow::messageReceived); - QObject::connect(&sdk, &ScreenPlaySDK::replaceWallpaper, &window, &WinWindow::replaceWallpaper); + WinWindow window( + activeScreensList.value(), + projectFilePath, + appID, + volume, + fillmode, + type, + checkWallpaperVisible, + debugMode); #endif #if defined(Q_OS_LINUX) - LinuxWindow window(list, argumentList.at(2), argumentList.at(3), argumentList.at(4), argumentList.at(5), checkWallpaperVisible); + LinuxWindow window( + activeScreensList.value(), + projectPath, + appID, + fillmode, + volume, + checkWallpaperVisible); QObject::connect(&sdk, &ScreenPlaySDK::sdkDisconnected, &window, &LinuxWindow::destroyThis); QObject::connect(&sdk, &ScreenPlaySDK::incommingMessage, &window, &LinuxWindow::messageReceived); #endif #if defined(Q_OS_OSX) - MacWindow window(list, argumentList.at(2), argumentList.at(3), argumentList.at(4), argumentList.at(5)); + MacWindow window( + activeScreensList.value(), + projectPath, + appID, + fillmode, + volume, + checkWallpaperVisible); QObject::connect(&sdk, &ScreenPlaySDK::sdkDisconnected, &window, &MacWindow::destroyThis); QObject::connect(&sdk, &ScreenPlaySDK::incommingMessage, &window, &MacWindow::messageReceived); #endif diff --git a/ScreenPlayWallpaper/src/basewindow.cpp b/ScreenPlayWallpaper/src/basewindow.cpp index fb63aae2..788bcbfc 100644 --- a/ScreenPlayWallpaper/src/basewindow.cpp +++ b/ScreenPlayWallpaper/src/basewindow.cpp @@ -6,12 +6,17 @@ BaseWindow::BaseWindow(QObject* parent) } BaseWindow::BaseWindow( - const QString& projectFilePath, const QVector activeScreensList, - const bool checkWallpaperVisible) + const QString& projectFilePath, + const QString& type, + const bool checkWallpaperVisible, + const QString& appID, + const bool debugMode) : QObject(nullptr) , m_checkWallpaperVisible(checkWallpaperVisible) , m_activeScreensList(activeScreensList) + , m_debugMode(debugMode) + , m_sdk(std::make_unique(appID, type)) { QApplication::instance()->installEventFilter(this); @@ -24,6 +29,13 @@ BaseWindow::BaseWindow( qmlRegisterType("ScreenPlay.Wallpaper", 1, 0, "Wallpaper"); + if (!appID.contains("appID=")) { + qInfo() << "Invalid appID: "<< appID; + qFatal("AppID does not contain appID="); + } + + setAppID(appID); + setOSVersion(QSysInfo::productVersion()); if (projectFilePath == "test") { diff --git a/ScreenPlayWallpaper/src/basewindow.h b/ScreenPlayWallpaper/src/basewindow.h index 7a71d765..79c0fa89 100644 --- a/ScreenPlayWallpaper/src/basewindow.h +++ b/ScreenPlayWallpaper/src/basewindow.h @@ -48,12 +48,22 @@ #include "ScreenPlayUtil/util.h" +#include "screenplaysdk.h" + +#include + class BaseWindow : public QObject { Q_OBJECT public: BaseWindow(QObject* parent = nullptr); - BaseWindow(const QString& projectFilePath, const QVector activeScreensList, const bool checkWallpaperVisible); + BaseWindow( + const QVector activeScreensList, + const QString& projectFilePath, + const QString& type, + const bool checkWallpaperVisible, + const QString& appID, + const bool debugMode); Q_PROPERTY(int width READ width WRITE setWidth NOTIFY widthChanged) Q_PROPERTY(int height READ height WRITE setHeight NOTIFY heightChanged) @@ -68,6 +78,7 @@ public: Q_PROPERTY(bool isPlaying READ isPlaying WRITE setIsPlaying NOTIFY isPlayingChanged) Q_PROPERTY(bool muted READ muted WRITE setMuted NOTIFY mutedChanged) Q_PROPERTY(bool canFade READ canFade WRITE setCanFade NOTIFY canFadeChanged) + Q_PROPERTY(bool debugMode READ debugMode WRITE setDebugMode NOTIFY debugModeChanged) // Save performance by checking if the wallpaper is visible (video wallpaper only for now) Q_PROPERTY(bool checkWallpaperVisible READ checkWallpaperVisible WRITE setCheckWallpaperVisible NOTIFY checkWallpaperVisibleChanged) @@ -80,6 +91,8 @@ public: Q_PROPERTY(ScreenPlay::InstalledType::InstalledType type READ type WRITE setType NOTIFY typeChanged) Q_PROPERTY(QString OSVersion READ OSVersion WRITE setOSVersion NOTIFY OSVersionChanged) + Q_PROPERTY(ScreenPlaySDK* sdk READ sdk WRITE setSdk NOTIFY sdkChanged) + bool loops() const { return m_loops; } float volume() const { return m_volume; } bool isPlaying() const { return m_isPlaying; } @@ -98,6 +111,8 @@ public: bool checkWallpaperVisible() const { return m_checkWallpaperVisible; } bool visualsPaused() const { return m_visualsPaused; } QString basePath() const { return m_basePath; } + bool debugMode() const { return m_debugMode; } + ScreenPlaySDK* sdk() const { return m_sdk.get(); } signals: void qmlExit(); @@ -124,6 +139,8 @@ signals: void checkWallpaperVisibleChanged(bool checkWallpaperVisible); void visualsPausedChanged(bool visualsPaused); void basePathChanged(QString basePath); + void debugModeChanged(bool debugMode); + void sdkChanged(ScreenPlaySDK* sdk); public slots: virtual void destroyThis() { } @@ -307,6 +324,22 @@ public slots: emit basePathChanged(m_basePath); } + void setDebugMode(bool debugMode) + { + if (m_debugMode == debugMode) + return; + m_debugMode = debugMode; + emit debugModeChanged(debugMode); + } + + void setSdk(ScreenPlaySDK* sdk) + { + if (m_sdk.get() == sdk) + return; + m_sdk.reset(sdk); + emit sdkChanged(sdk); + } + private: void setupLiveReloading(); @@ -335,4 +368,6 @@ private: QFileSystemWatcher m_fileSystemWatcher; QSysInfo m_sysinfo; QString m_basePath; + bool m_debugMode = false; + std::unique_ptr m_sdk; }; diff --git a/ScreenPlayWallpaper/src/winwindow.cpp b/ScreenPlayWallpaper/src/winwindow.cpp index 43651a03..aa7aefe2 100644 --- a/ScreenPlayWallpaper/src/winwindow.cpp +++ b/ScreenPlayWallpaper/src/winwindow.cpp @@ -99,11 +99,11 @@ LRESULT __stdcall MouseHookCallback(int nCode, WPARAM wParam, LPARAM lParam) if (type == QMouseEvent::Type::MouseButtonPress) { } - QTimer::singleShot(100, [&]() { + QTimer::singleShot(100, [&]() { //auto eventPress = QMouseEvent(QMouseEvent::Type::MouseButtonPress, g_LastMousePosition, mouseButton, mouseButtons, {}); //qInfo() << mouseButton << QApplication::sendEvent(g_winGlobalHook, &eventPress) << g_globalOffset.x() << g_globalOffset.y(); auto eventRelease = QMouseEvent(QMouseEvent::Type::MouseButtonRelease, g_LastMousePosition, mouseButton, mouseButtons, {}); - //qInfo() << mouseButton << QApplication::sendEvent(g_winGlobalHook, &eventRelease); + QApplication::sendEvent(g_winGlobalHook, &eventRelease); }); return CallNextHookEx(g_mouseHook, nCode, wParam, lParam); @@ -129,20 +129,33 @@ void WinWindow::setupWindowMouseHook() WinWindow::WinWindow( const QVector& activeScreensList, - const QString& projectPath, - const QString& id, + const QString& projectFilePath, + const QString& appID, const QString& volume, const QString& fillmode, - const bool checkWallpaperVisible) - : BaseWindow(projectPath, activeScreensList, checkWallpaperVisible) + const QString& type, + const bool checkWallpaperVisible, + const bool debugMode) + : BaseWindow( + activeScreensList, + projectFilePath, + type, + checkWallpaperVisible, + appID, + debugMode) { auto* guiAppInst = dynamic_cast(QApplication::instance()); connect(guiAppInst, &QApplication::screenAdded, this, &WinWindow::configureWindowGeometry); connect(guiAppInst, &QApplication::screenRemoved, this, &WinWindow::configureWindowGeometry); connect(guiAppInst, &QApplication::primaryScreenChanged, this, &WinWindow::configureWindowGeometry); + connect(sdk(), &ScreenPlaySDK::sdkDisconnected, this, &WinWindow::destroyThis); + connect(sdk(), &ScreenPlaySDK::incommingMessage, this, &WinWindow::messageReceived); + connect(sdk(), &ScreenPlaySDK::replaceWallpaper, this, &WinWindow::replaceWallpaper); + connect(&m_checkForFullScreenWindowTimer, &QTimer::timeout, this, &WinWindow::checkForFullScreenWindow); - for (auto screen : QApplication::screens()) { + const auto screens = QApplication::screens(); + for (const auto& screen : screens) { connect(screen, &QScreen::geometryChanged, this, &WinWindow::configureWindowGeometry); } @@ -154,8 +167,6 @@ WinWindow::WinWindow( qRegisterMetaType(); qRegisterMetaType(); - setAppID(id); - bool ok = false; float volumeParsed = volume.toFloat(&ok); if (!ok) { @@ -169,7 +180,7 @@ WinWindow::WinWindow( configureWindowGeometry(); bool hasWindowScaling = false; - for (int i = 0; i < QApplication::screens().count(); i++) { + for (int i = 0; i < screens.count(); i++) { if (getScaling(i) != 1) { hasWindowScaling = true; break; @@ -180,8 +191,6 @@ WinWindow::WinWindow( configureWindowGeometry(); } - QObject::connect(&m_checkForFullScreenWindowTimer, &QTimer::timeout, this, &WinWindow::checkForFullScreenWindow); - // We do not support autopause for multi monitor wallpaper if (this->activeScreensList().length() == 1) { if (checkWallpaperVisible) { @@ -192,6 +201,8 @@ WinWindow::WinWindow( QTimer::singleShot(1000, this, [&]() { setupWindowMouseHook(); }); + + sdk()->start(); } void WinWindow::setVisible(bool show) @@ -232,26 +243,28 @@ void WinWindow::setupWallpaperForOneScreen(int activeScreen) const float scaling = 1; //getScaling(activeScreen); for (int i = 0; i < QApplication::screens().count(); i++) { - qInfo() << i << "scaling " << getScaling(i) << QApplication::screens().at(i)->geometry(); + // qInfo() << i << "scaling " << getScaling(i) << QApplication::screens().at(i)->geometry(); } - qInfo() << activeScreen << "Monitor 0" << getScaling(0) << QApplication::screens().at(0)->geometry(); - qInfo() << activeScreen << "Monitor 1" << getScaling(1) << QApplication::screens().at(1)->geometry(); + // qInfo() << activeScreen << "Monitor 0" << getScaling(0) << QApplication::screens().at(0)->geometry(); + // qInfo() << activeScreen << "Monitor 1" << getScaling(1) << QApplication::screens().at(1)->geometry(); WinMonitorStats Monitors; int width = std::abs(Monitors.rcMonitors[activeScreen].right - Monitors.rcMonitors[activeScreen].left); int height = std::abs(Monitors.rcMonitors[activeScreen].top - Monitors.rcMonitors[activeScreen].bottom); - qInfo() << "scaling " << scaling << width << height << " activeScreen " << activeScreen; - qInfo() << "scaling " << scaling << screenRect.width() << screenRect.height() << " activeScreen " << activeScreen; + //qInfo() << "scaling " << scaling << width << height << " activeScreen " << activeScreen; + //qInfo() << "scaling " << scaling << screenRect.width() << screenRect.height() << " activeScreen " << activeScreen; + const int boderWidth = 2; + const int borderOffset = -1; // Needs to be set like to this work. I do not know why... if (!SetWindowPos( m_windowHandle, nullptr, - Monitors.rcMonitors[activeScreen].left, - Monitors.rcMonitors[activeScreen].top, - width, - height, + Monitors.rcMonitors[activeScreen].left + borderOffset, + Monitors.rcMonitors[activeScreen].top + borderOffset, + width + boderWidth, + height + boderWidth, SWP_HIDEWINDOW)) { qFatal("Could not set window pos"); } @@ -259,10 +272,10 @@ void WinWindow::setupWallpaperForOneScreen(int activeScreen) if (!SetWindowPos( m_windowHandle, nullptr, - screenRect.x() + m_zeroPoint.x(), - screenRect.y() + m_zeroPoint.y(), - screenRect.width() * scaling, - screenRect.height() * scaling, + screenRect.x() + m_zeroPoint.x() + borderOffset, + screenRect.y() + m_zeroPoint.y() + borderOffset, + screenRect.width() * scaling + boderWidth, + screenRect.height() * scaling + boderWidth, SWP_HIDEWINDOW)) { qFatal("Could not set window pos"); } diff --git a/ScreenPlayWallpaper/src/winwindow.h b/ScreenPlayWallpaper/src/winwindow.h index d8a28738..c17595a5 100644 --- a/ScreenPlayWallpaper/src/winwindow.h +++ b/ScreenPlayWallpaper/src/winwindow.h @@ -60,11 +60,12 @@ class WinWindow : public BaseWindow { public: explicit WinWindow( const QVector& activeScreensList, - const QString& projectPath, - const QString& id, + const QString& projectFilePath, + const QString& appID, const QString& volume, - const QString& fillmode, - const bool checkWallpaperVisible); + const QString& fillmode, const QString &type, + const bool checkWallpaperVisible, + const bool debugMode = false); WindowsDesktopProperties* windowsDesktopProperties() const { return m_windowsDesktopProperties.get(); }