From 20deae32429a0b962f1a3c51074ce0fa2273deec Mon Sep 17 00:00:00 2001 From: Brad Davis Date: Sat, 23 Jan 2016 23:14:41 -0800 Subject: [PATCH 01/21] Working on Qt 5.6 compatibility --- interface/CMakeLists.txt | 8 +++---- interface/src/scripting/WebWindowClass.cpp | 11 ++++----- interface/src/scripting/WebWindowClass.h | 4 ++-- interface/src/ui/DataWebPage.cpp | 28 +++++++++++----------- interface/src/ui/DataWebPage.h | 10 ++++---- libraries/ui/src/VrMenu.cpp | 11 ++++----- 6 files changed, 35 insertions(+), 37 deletions(-) diff --git a/interface/CMakeLists.txt b/interface/CMakeLists.txt index 1d436695b1..b6e9153f65 100644 --- a/interface/CMakeLists.txt +++ b/interface/CMakeLists.txt @@ -42,12 +42,12 @@ endif () if (ANDROID) set(PLATFORM_QT_COMPONENTS AndroidExtras) else () - set(PLATFORM_QT_COMPONENTS WebEngine WebEngineWidgets WebKitWidgets) + set(PLATFORM_QT_COMPONENTS WebEngine WebEngineWidgets) endif () find_package( Qt5 COMPONENTS - Gui Multimedia Network OpenGL Qml Quick Script ScriptTools Svg + Gui Multimedia Network OpenGL Qml Quick Script Svg ${PLATFORM_QT_COMPONENTS} WebChannel WebSockets ) @@ -241,8 +241,8 @@ include_directories("${PROJECT_SOURCE_DIR}/src") target_link_libraries( ${TARGET_NAME} Qt5::Gui Qt5::Network Qt5::Multimedia Qt5::OpenGL - Qt5::Qml Qt5::Quick Qt5::Script Qt5::ScriptTools Qt5::Svg - Qt5::WebChannel Qt5::WebEngine Qt5::WebEngineWidgets Qt5::WebKitWidgets + Qt5::Qml Qt5::Quick Qt5::Script Qt5::Svg + Qt5::WebChannel Qt5::WebEngine Qt5::WebEngineWidgets ) # Issue causes build failure unless we add this directory. diff --git a/interface/src/scripting/WebWindowClass.cpp b/interface/src/scripting/WebWindowClass.cpp index 18beee4bbf..400c538461 100644 --- a/interface/src/scripting/WebWindowClass.cpp +++ b/interface/src/scripting/WebWindowClass.cpp @@ -14,8 +14,7 @@ #include #include #include -#include -#include +#include #include #include @@ -48,7 +47,7 @@ WebWindowClass::WebWindowClass(const QString& title, const QString& url, int wid layout->setContentsMargins(0, 0, 0, 0); dialogWidget->setLayout(layout); - _webView = new QWebView(dialogWidget); + _webView = new QWebEngineView(dialogWidget); layout->addWidget(_webView); @@ -69,8 +68,8 @@ WebWindowClass::WebWindowClass(const QString& title, const QString& url, int wid } connect(this, &WebWindowClass::destroyed, _windowWidget, &QWidget::deleteLater); - connect(_webView->page()->mainFrame(), &QWebFrame::javaScriptWindowObjectCleared, - this, &WebWindowClass::addEventBridgeToWindowObject); + //connect(_webView->page()->mainFrame(), &QWebFrame::javaScriptWindowObjectCleared, + // this, &WebWindowClass::addEventBridgeToWindowObject); } WebWindowClass::~WebWindowClass() { @@ -94,7 +93,7 @@ void WebWindowClass::hasClosed() { } void WebWindowClass::addEventBridgeToWindowObject() { - _webView->page()->mainFrame()->addToJavaScriptWindowObject("EventBridge", _eventBridge); +// _webView->page()->mainFrame()->addToJavaScriptWindowObject("EventBridge", _eventBridge); } void WebWindowClass::setVisible(bool visible) { diff --git a/interface/src/scripting/WebWindowClass.h b/interface/src/scripting/WebWindowClass.h index d7a610dd39..fdb434ab7e 100644 --- a/interface/src/scripting/WebWindowClass.h +++ b/interface/src/scripting/WebWindowClass.h @@ -14,7 +14,7 @@ #include #include -#include +#include class ScriptEventBridge : public QObject { Q_OBJECT @@ -73,7 +73,7 @@ private slots: private: QWidget* _windowWidget; - QWebView* _webView; + QWebEngineView* _webView; ScriptEventBridge* _eventBridge; }; diff --git a/interface/src/ui/DataWebPage.cpp b/interface/src/ui/DataWebPage.cpp index 01feacc393..7168dfc5d6 100644 --- a/interface/src/ui/DataWebPage.cpp +++ b/interface/src/ui/DataWebPage.cpp @@ -17,23 +17,22 @@ #include "DataWebPage.h" -DataWebPage::DataWebPage(QObject* parent) : - QWebPage(parent) +DataWebPage::DataWebPage(QObject* parent) : QWebEnginePage(parent) { // use an OAuthNetworkAccessManager instead of regular QNetworkAccessManager so our requests are authed - setNetworkAccessManager(OAuthNetworkAccessManager::getInstance()); +// setNetworkAccessManager(OAuthNetworkAccessManager::getInstance()); // give the page an empty stylesheet - settings()->setUserStyleSheetUrl(QUrl()); +// settings()->setUserStyleSheetUrl(QUrl()); } -void DataWebPage::javaScriptConsoleMessage(const QString& message, int lineNumber, const QString& sourceID) { - qDebug() << "JS console message at line" << lineNumber << "from" << sourceID << "-" << message; -} +//void DataWebPage::javaScriptConsoleMessage(const QString& message, int lineNumber, const QString& sourceID) { +// qDebug() << "JS console message at line" << lineNumber << "from" << sourceID << "-" << message; +//} -bool DataWebPage::acceptNavigationRequest(QWebFrame* frame, const QNetworkRequest& request, QWebPage::NavigationType type) { +bool DataWebPage::acceptNavigationRequest(const QUrl & url, NavigationType type, bool isMainFrame) { // Handle hifi:// links and links to files with particular extensions - QString urlString = request.url().toString(); + QString urlString = url.toString(); if (qApp->canAcceptURL(urlString)) { if (qApp->acceptURL(urlString)) { return false; // we handled it, so QWebPage doesn't need to handle it @@ -41,14 +40,15 @@ bool DataWebPage::acceptNavigationRequest(QWebFrame* frame, const QNetworkReques } // Make hyperlinks with target="_blank" open in user's Web browser - if (type == QWebPage::NavigationTypeLinkClicked && frame == nullptr) { - qApp->openUrl(request.url()); + if (type == NavigationTypeLinkClicked && !isMainFrame) { + qApp->openUrl(url); return false; // We handled it. } return true; } -QString DataWebPage::userAgentForUrl(const QUrl& url) const { - return HIGH_FIDELITY_USER_AGENT; -} +// +//QString DataWebPage::userAgentForUrl(const QUrl& url) const { +// return HIGH_FIDELITY_USER_AGENT; +//} diff --git a/interface/src/ui/DataWebPage.h b/interface/src/ui/DataWebPage.h index f9aa5be8a8..55e185ca4f 100644 --- a/interface/src/ui/DataWebPage.h +++ b/interface/src/ui/DataWebPage.h @@ -12,15 +12,15 @@ #ifndef hifi_DataWebPage_h #define hifi_DataWebPage_h -#include +#include -class DataWebPage : public QWebPage { +class DataWebPage : public QWebEnginePage { public: DataWebPage(QObject* parent = 0); protected: - void javaScriptConsoleMessage(const QString & message, int lineNumber, const QString & sourceID) override; - bool acceptNavigationRequest(QWebFrame* frame, const QNetworkRequest& request, QWebPage::NavigationType type) override; - virtual QString userAgentForUrl(const QUrl& url) const override; + //virtual void javaScriptConsoleMessage(const QString & message, int lineNumber, const QString & sourceID) override; + virtual bool acceptNavigationRequest(const QUrl & url, NavigationType type, bool isMainFrame) override; + //virtual QString userAgentForUrl(const QUrl& url) const override; }; #endif // hifi_DataWebPage_h diff --git a/libraries/ui/src/VrMenu.cpp b/libraries/ui/src/VrMenu.cpp index c2732197d3..f4b365265d 100644 --- a/libraries/ui/src/VrMenu.cpp +++ b/libraries/ui/src/VrMenu.cpp @@ -155,7 +155,7 @@ void bindActionToQmlAction(QObject* qmlAction, QAction* action) { QObject::connect(qmlAction, SIGNAL(triggered()), action, SLOT(trigger())); } -class QQuickMenuItem; +class QQuickMenuItem1; void VrMenu::addAction(QMenu* menu, QAction* action) { Q_ASSERT(!MenuUserData::hasData(action)); @@ -167,10 +167,9 @@ void VrMenu::addAction(QMenu* menu, QAction* action) { } QObject* menuQml = findMenuObject(userData->uuid.toString()); Q_ASSERT(menuQml); - QQuickMenuItem* returnedValue { nullptr }; - + QQuickMenuItem1* returnedValue { nullptr }; bool invokeResult = QMetaObject::invokeMethod(menuQml, "addItem", Qt::DirectConnection, - Q_RETURN_ARG(QQuickMenuItem*, returnedValue), + Q_RETURN_ARG(QQuickMenuItem1*, returnedValue), Q_ARG(QString, action->text())); Q_ASSERT(invokeResult); @@ -206,10 +205,10 @@ void VrMenu::insertAction(QAction* before, QAction* action) { beforeQml = findMenuObject(beforeUserData->uuid.toString()); } QObject* menu = beforeQml->parent(); - QQuickMenuItem* returnedValue { nullptr }; + QQuickMenuItem1* returnedValue { nullptr }; // FIXME this needs to find the index of the beforeQml item and call insertItem(int, object) bool invokeResult = QMetaObject::invokeMethod(menu, "addItem", Qt::DirectConnection, - Q_RETURN_ARG(QQuickMenuItem*, returnedValue), + Q_RETURN_ARG(QQuickMenuItem1*, returnedValue), Q_ARG(QString, action->text())); Q_ASSERT(invokeResult); QObject* result = reinterpret_cast(returnedValue); // returnedValue.value(); From 9d447d4dccdb797b77d2006c1189c4d6077ce84f Mon Sep 17 00:00:00 2001 From: SamGondelman Date: Fri, 1 Jul 2016 16:04:57 -0700 Subject: [PATCH 02/21] enabled qnetworkrequest redirects everywhere I could find them --- domain-server/src/DomainServer.cpp | 2 ++ ice-server/src/IceServer.cpp | 1 + interface/src/Application.cpp | 3 ++- interface/src/ui/ModelsBrowser.cpp | 2 ++ interface/src/ui/ScriptEditorWidget.cpp | 1 + libraries/auto-updater/src/AutoUpdater.cpp | 1 + libraries/avatars/src/AvatarData.cpp | 1 + libraries/fbx/src/FSTReader.cpp | 1 + libraries/fbx/src/OBJReader.cpp | 1 + libraries/networking/src/AccountManager.cpp | 4 +++- libraries/networking/src/AddressManager.cpp | 1 + libraries/networking/src/HTTPResourceRequest.cpp | 1 + libraries/networking/src/OAuthNetworkAccessManager.cpp | 1 + libraries/script-engine/src/ScriptsModel.cpp | 1 + libraries/script-engine/src/XMLHttpRequestClass.cpp | 1 + tests/gpu-test/src/TestFbx.cpp | 1 + 16 files changed, 21 insertions(+), 2 deletions(-) diff --git a/domain-server/src/DomainServer.cpp b/domain-server/src/DomainServer.cpp index b61fef8525..570db05871 100644 --- a/domain-server/src/DomainServer.cpp +++ b/domain-server/src/DomainServer.cpp @@ -1756,6 +1756,7 @@ bool DomainServer::handleHTTPSRequest(HTTPSConnection* connection, const QUrl &u .arg(authorizationCode, oauthRedirectURL().toString(), _oauthClientID, _oauthClientSecret); QNetworkRequest tokenRequest(tokenRequestUrl); + tokenRequest.setAttribute(QNetworkRequest::FollowRedirectsAttribute, true); tokenRequest.setHeader(QNetworkRequest::UserAgentHeader, HIGH_FIDELITY_USER_AGENT); tokenRequest.setHeader(QNetworkRequest::ContentTypeHeader, "application/x-www-form-urlencoded"); @@ -1949,6 +1950,7 @@ QNetworkReply* DomainServer::profileRequestGivenTokenReply(QNetworkReply* tokenR profileURL.setQuery(QString("%1=%2").arg(OAUTH_JSON_ACCESS_TOKEN_KEY, accessToken)); QNetworkRequest profileRequest(profileURL); + profileRequest.setAttribute(QNetworkRequest::FollowRedirectsAttribute, true); profileRequest.setHeader(QNetworkRequest::UserAgentHeader, HIGH_FIDELITY_USER_AGENT); return NetworkAccessManager::getInstance().get(profileRequest); } diff --git a/ice-server/src/IceServer.cpp b/ice-server/src/IceServer.cpp index 84c48ac5f9..3f229d2f87 100644 --- a/ice-server/src/IceServer.cpp +++ b/ice-server/src/IceServer.cpp @@ -213,6 +213,7 @@ void IceServer::requestDomainPublicKey(const QUuid& domainID) { publicKeyURL.setPath(publicKeyPath); QNetworkRequest publicKeyRequest { publicKeyURL }; + publicKeyRequest.setAttribute(QNetworkRequest::FollowRedirectsAttribute, true); publicKeyRequest.setAttribute(QNetworkRequest::User, domainID); qDebug() << "Requesting public key for domain with ID" << domainID; diff --git a/interface/src/Application.cpp b/interface/src/Application.cpp index 45feed1088..c22e04a2e4 100644 --- a/interface/src/Application.cpp +++ b/interface/src/Application.cpp @@ -5034,6 +5034,7 @@ bool Application::askToLoadScript(const QString& scriptFilenameOrURL) { bool Application::askToWearAvatarAttachmentUrl(const QString& url) { QNetworkAccessManager& networkAccessManager = NetworkAccessManager::getInstance(); QNetworkRequest networkRequest = QNetworkRequest(url); + networkRequest.setAttribute(QNetworkRequest::FollowRedirectsAttribute, true); networkRequest.setHeader(QNetworkRequest::UserAgentHeader, HIGH_FIDELITY_USER_AGENT); QNetworkReply* reply = networkAccessManager.get(networkRequest); int requestNumber = ++_avatarAttachmentRequest; @@ -5741,4 +5742,4 @@ void Application::updateThreadPoolCount() const { qDebug() << "Reserved threads " << reservedThreads; qDebug() << "Setting thread pool size to " << threadPoolSize; QThreadPool::globalInstance()->setMaxThreadCount(threadPoolSize); -} \ No newline at end of file +} diff --git a/interface/src/ui/ModelsBrowser.cpp b/interface/src/ui/ModelsBrowser.cpp index 91de4e36ac..430cc805ed 100644 --- a/interface/src/ui/ModelsBrowser.cpp +++ b/interface/src/ui/ModelsBrowser.cpp @@ -228,6 +228,7 @@ void ModelHandler::update() { QUrl url(_model.item(i,0)->data(Qt::UserRole).toString()); QNetworkAccessManager& networkAccessManager = NetworkAccessManager::getInstance(); QNetworkRequest request(url); + request.setAttribute(QNetworkRequest::FollowRedirectsAttribute, true); request.setHeader(QNetworkRequest::UserAgentHeader, HIGH_FIDELITY_USER_AGENT); QNetworkReply* reply = networkAccessManager.head(request); connect(reply, SIGNAL(finished()), SLOT(downloadFinished())); @@ -280,6 +281,7 @@ void ModelHandler::queryNewFiles(QString marker) { url.setQuery(query); QNetworkAccessManager& networkAccessManager = NetworkAccessManager::getInstance(); QNetworkRequest request(url); + request.setAttribute(QNetworkRequest::FollowRedirectsAttribute, true); request.setHeader(QNetworkRequest::UserAgentHeader, HIGH_FIDELITY_USER_AGENT); QNetworkReply* reply = networkAccessManager.get(request); connect(reply, SIGNAL(finished()), SLOT(downloadFinished())); diff --git a/interface/src/ui/ScriptEditorWidget.cpp b/interface/src/ui/ScriptEditorWidget.cpp index f76a5dff78..ada6b11355 100644 --- a/interface/src/ui/ScriptEditorWidget.cpp +++ b/interface/src/ui/ScriptEditorWidget.cpp @@ -161,6 +161,7 @@ void ScriptEditorWidget::loadFile(const QString& scriptPath) { } else { QNetworkAccessManager& networkAccessManager = NetworkAccessManager::getInstance(); QNetworkRequest networkRequest = QNetworkRequest(url); + networkRequest.setAttribute(QNetworkRequest::FollowRedirectsAttribute, true); networkRequest.setHeader(QNetworkRequest::UserAgentHeader, HIGH_FIDELITY_USER_AGENT); QNetworkReply* reply = networkAccessManager.get(networkRequest); qDebug() << "Downloading included script at" << scriptPath; diff --git a/libraries/auto-updater/src/AutoUpdater.cpp b/libraries/auto-updater/src/AutoUpdater.cpp index ea4e43ff41..43563b1d71 100644 --- a/libraries/auto-updater/src/AutoUpdater.cpp +++ b/libraries/auto-updater/src/AutoUpdater.cpp @@ -33,6 +33,7 @@ void AutoUpdater::checkForUpdate() { void AutoUpdater::getLatestVersionData() { QNetworkAccessManager& networkAccessManager = NetworkAccessManager::getInstance(); QNetworkRequest latestVersionRequest(BUILDS_XML_URL); + latestVersionRequest.setAttribute(QNetworkRequest::FollowRedirectsAttribute, true); latestVersionRequest.setHeader(QNetworkRequest::UserAgentHeader, HIGH_FIDELITY_USER_AGENT); QNetworkReply* reply = networkAccessManager.get(latestVersionRequest); connect(reply, &QNetworkReply::finished, this, &AutoUpdater::parseLatestVersionData); diff --git a/libraries/avatars/src/AvatarData.cpp b/libraries/avatars/src/AvatarData.cpp index 037f12d2fa..413180738a 100644 --- a/libraries/avatars/src/AvatarData.cpp +++ b/libraries/avatars/src/AvatarData.cpp @@ -1206,6 +1206,7 @@ void AvatarData::updateJointMappings() { if (_skeletonModelURL.fileName().toLower().endsWith(".fst")) { QNetworkAccessManager& networkAccessManager = NetworkAccessManager::getInstance(); QNetworkRequest networkRequest = QNetworkRequest(_skeletonModelURL); + networkRequest.setAttribute(QNetworkRequest::FollowRedirectsAttribute, true); networkRequest.setHeader(QNetworkRequest::UserAgentHeader, HIGH_FIDELITY_USER_AGENT); QNetworkReply* networkReply = networkAccessManager.get(networkRequest); connect(networkReply, &QNetworkReply::finished, this, &AvatarData::setJointMappingsFromNetworkReply); diff --git a/libraries/fbx/src/FSTReader.cpp b/libraries/fbx/src/FSTReader.cpp index 6f5d0d7ec5..1f7999bdaa 100644 --- a/libraries/fbx/src/FSTReader.cpp +++ b/libraries/fbx/src/FSTReader.cpp @@ -191,6 +191,7 @@ FSTReader::ModelType FSTReader::predictModelType(const QVariantHash& mapping) { QVariantHash FSTReader::downloadMapping(const QString& url) { QNetworkAccessManager& networkAccessManager = NetworkAccessManager::getInstance(); QNetworkRequest networkRequest = QNetworkRequest(url); + networkRequest.setAttribute(QNetworkRequest::FollowRedirectsAttribute, true); networkRequest.setHeader(QNetworkRequest::UserAgentHeader, HIGH_FIDELITY_USER_AGENT); QNetworkReply* reply = networkAccessManager.get(networkRequest); qDebug() << "Downloading avatar file at " << url; diff --git a/libraries/fbx/src/OBJReader.cpp b/libraries/fbx/src/OBJReader.cpp index 38121555ed..02b0afdf26 100644 --- a/libraries/fbx/src/OBJReader.cpp +++ b/libraries/fbx/src/OBJReader.cpp @@ -282,6 +282,7 @@ QNetworkReply* OBJReader::request(QUrl& url, bool isTest) { }); QNetworkAccessManager& networkAccessManager = NetworkAccessManager::getInstance(); QNetworkRequest netRequest(url); + netRequest.setAttribute(QNetworkRequest::FollowRedirectsAttribute, true); QNetworkReply* netReply = isTest ? networkAccessManager.head(netRequest) : networkAccessManager.get(netRequest); if (!qApp || aboutToQuit) { netReply->deleteLater(); diff --git a/libraries/networking/src/AccountManager.cpp b/libraries/networking/src/AccountManager.cpp index 2f4cbad26c..1c3850f8cb 100644 --- a/libraries/networking/src/AccountManager.cpp +++ b/libraries/networking/src/AccountManager.cpp @@ -218,7 +218,7 @@ void AccountManager::sendRequest(const QString& path, QNetworkAccessManager& networkAccessManager = NetworkAccessManager::getInstance(); QNetworkRequest networkRequest; - + networkRequest.setAttribute(QNetworkRequest::FollowRedirectsAttribute, true); networkRequest.setHeader(QNetworkRequest::UserAgentHeader, _userAgentGetter()); networkRequest.setRawHeader(METAVERSE_SESSION_ID_HEADER, @@ -484,6 +484,7 @@ void AccountManager::requestAccessToken(const QString& login, const QString& pas QNetworkAccessManager& networkAccessManager = NetworkAccessManager::getInstance(); QNetworkRequest request; + request.setAttribute(QNetworkRequest::FollowRedirectsAttribute, true); request.setHeader(QNetworkRequest::UserAgentHeader, _userAgentGetter()); QUrl grantURL = _authURL; @@ -578,6 +579,7 @@ void AccountManager::requestProfile() { profileURL.setPath("/api/v1/user/profile"); QNetworkRequest profileRequest(profileURL); + profileRequest.setAttribute(QNetworkRequest::FollowRedirectsAttribute, true); profileRequest.setHeader(QNetworkRequest::UserAgentHeader, _userAgentGetter()); profileRequest.setRawHeader(ACCESS_TOKEN_AUTHORIZATION_HEADER, _accountInfo.getAccessToken().authorizationHeaderValue()); diff --git a/libraries/networking/src/AddressManager.cpp b/libraries/networking/src/AddressManager.cpp index c9c9d73394..b4145c73f5 100644 --- a/libraries/networking/src/AddressManager.cpp +++ b/libraries/networking/src/AddressManager.cpp @@ -836,6 +836,7 @@ void AddressManager::ifLocalSandboxRunningElse(std::function localSandbo QNetworkAccessManager& networkAccessManager = NetworkAccessManager::getInstance(); QNetworkRequest sandboxStatus(SANDBOX_STATUS_URL); + sandboxStatus.setAttribute(QNetworkRequest::FollowRedirectsAttribute, true); sandboxStatus.setHeader(QNetworkRequest::UserAgentHeader, HIGH_FIDELITY_USER_AGENT); QNetworkReply* reply = networkAccessManager.get(sandboxStatus); diff --git a/libraries/networking/src/HTTPResourceRequest.cpp b/libraries/networking/src/HTTPResourceRequest.cpp index 11ab436933..392654a419 100644 --- a/libraries/networking/src/HTTPResourceRequest.cpp +++ b/libraries/networking/src/HTTPResourceRequest.cpp @@ -49,6 +49,7 @@ void HTTPResourceRequest::cleanupTimer() { void HTTPResourceRequest::doSend() { QNetworkRequest networkRequest(_url); + networkRequest.setAttribute(QNetworkRequest::FollowRedirectsAttribute, true); networkRequest.setHeader(QNetworkRequest::UserAgentHeader, HIGH_FIDELITY_USER_AGENT); if (_cacheEnabled) { diff --git a/libraries/networking/src/OAuthNetworkAccessManager.cpp b/libraries/networking/src/OAuthNetworkAccessManager.cpp index 92e7a2ff4f..15d5acbc67 100644 --- a/libraries/networking/src/OAuthNetworkAccessManager.cpp +++ b/libraries/networking/src/OAuthNetworkAccessManager.cpp @@ -37,6 +37,7 @@ QNetworkReply* OAuthNetworkAccessManager::createRequest(QNetworkAccessManager::O if (accountManager->hasValidAccessToken() && req.url().host() == NetworkingConstants::METAVERSE_SERVER_URL.host()) { QNetworkRequest authenticatedRequest(req); + authenticatedRequest.setAttribute(QNetworkRequest::FollowRedirectsAttribute, true); authenticatedRequest.setHeader(QNetworkRequest::UserAgentHeader, HIGH_FIDELITY_USER_AGENT); authenticatedRequest.setRawHeader(ACCESS_TOKEN_AUTHORIZATION_HEADER, accountManager->getAccountInfo().getAccessToken().authorizationHeaderValue()); diff --git a/libraries/script-engine/src/ScriptsModel.cpp b/libraries/script-engine/src/ScriptsModel.cpp index 0ad2ad01a7..8755195932 100644 --- a/libraries/script-engine/src/ScriptsModel.cpp +++ b/libraries/script-engine/src/ScriptsModel.cpp @@ -185,6 +185,7 @@ void ScriptsModel::requestDefaultFiles(QString marker) { QNetworkAccessManager& networkAccessManager = NetworkAccessManager::getInstance(); QNetworkRequest request(url); + request.setAttribute(QNetworkRequest::FollowRedirectsAttribute, true); request.setHeader(QNetworkRequest::UserAgentHeader, HIGH_FIDELITY_USER_AGENT); QNetworkReply* reply = networkAccessManager.get(request); connect(reply, SIGNAL(finished()), SLOT(downloadFinished())); diff --git a/libraries/script-engine/src/XMLHttpRequestClass.cpp b/libraries/script-engine/src/XMLHttpRequestClass.cpp index 15b2576331..818521ecc5 100644 --- a/libraries/script-engine/src/XMLHttpRequestClass.cpp +++ b/libraries/script-engine/src/XMLHttpRequestClass.cpp @@ -45,6 +45,7 @@ XMLHttpRequestClass::XMLHttpRequestClass(QScriptEngine* engine) : _timer(this), _numRedirects(0) { + _request.setAttribute(QNetworkRequest::FollowRedirectsAttribute, true); _timer.setSingleShot(true); } diff --git a/tests/gpu-test/src/TestFbx.cpp b/tests/gpu-test/src/TestFbx.cpp index cea356e125..538bb0a973 100644 --- a/tests/gpu-test/src/TestFbx.cpp +++ b/tests/gpu-test/src/TestFbx.cpp @@ -56,6 +56,7 @@ public: explicit FileDownloader(QUrl imageUrl, QObject *parent = 0) : QObject(parent) { connect(&m_WebCtrl, SIGNAL(finished(QNetworkReply*)), this, SLOT(fileDownloaded(QNetworkReply*))); QNetworkRequest request(imageUrl); + request.setAttribute(QNetworkRequest::FollowRedirectsAttribute, true); m_WebCtrl.get(request); } From 98cb3cc366305d961aadb0c9e0c5626abe39957c Mon Sep 17 00:00:00 2001 From: SamGondelman Date: Fri, 1 Jul 2016 17:27:00 -0700 Subject: [PATCH 03/21] updated build instructions --- BUILD.md | 12 ++++++------ BUILD_OSX.md | 8 +++----- BUILD_WIN.md | 12 ++++++------ interface/resources/qml/controls/WebView.qml | 4 ---- 4 files changed, 15 insertions(+), 21 deletions(-) diff --git a/BUILD.md b/BUILD.md index c868a8e9d9..c51e40cb58 100644 --- a/BUILD.md +++ b/BUILD.md @@ -1,7 +1,7 @@ ###Dependencies * [cmake](http://www.cmake.org/cmake/resources/software.html) ~> 3.3.2 -* [Qt](http://www.qt.io/download-open-source) ~> 5.5.1 +* [Qt](http://www.qt.io/download-open-source) ~> 5.6.1 * [OpenSSL](https://www.openssl.org/community/binaries.html) ~> 1.0.1m * IMPORTANT: Using the recommended version of OpenSSL is critical to avoid security vulnerabilities. * [VHACD](https://github.com/virneo/v-hacd)(clone this repository)(Optional) @@ -41,14 +41,14 @@ If you would like to use a specific install of a dependency instead of the versi Hifi uses CMake to generate build files and project files for your platform. ####Qt -In order for CMake to find the Qt5 find modules, you will need to set an ENV variable pointing to your Qt installation. +In order for CMake to find the Qt5 find modules, you will need to set a QT_CMAKE_PREFIX_PATH environment variable pointing to your Qt installation. -For example, a Qt5 5.5.1 installation to /usr/local/qt5 would require that QT_CMAKE_PREFIX_PATH be set with the following command. This can either be entered directly into your shell session before you build or in your shell profile (e.g.: ~/.bash_profile, ~/.bashrc, ~/.zshrc - this depends on your shell and environment). +This can either be entered directly into your shell session before you build or in your shell profile (e.g.: ~/.bash_profile, ~/.bashrc, ~/.zshrc - this depends on your shell and environment). The path it needs to be set to will depend on where and how Qt5 was installed. e.g. - export QT_CMAKE_PREFIX_PATH=/usr/local/qt/5.5.1/clang_64/lib/cmake/ - export QT_CMAKE_PREFIX_PATH=/usr/local/Cellar/qt5/5.5.1/lib/cmake + export QT_CMAKE_PREFIX_PATH=/usr/local/qt/5.6.1/clang_64/lib/cmake/ + export QT_CMAKE_PREFIX_PATH=/usr/local/Cellar/qt5/5.6.1-1/lib/cmake export QT_CMAKE_PREFIX_PATH=/usr/local/opt/qt5/lib/cmake ####Generating build files @@ -65,7 +65,7 @@ Any variables that need to be set for CMake to find dependencies can be set as E For example, to pass the QT_CMAKE_PREFIX_PATH variable during build file generation: - cmake .. -DQT_CMAKE_PREFIX_PATH=/usr/local/qt/5.5.1/lib/cmake + cmake .. -DQT_CMAKE_PREFIX_PATH=/usr/local/qt/5.6.1/lib/cmake ####Finding Dependencies diff --git a/BUILD_OSX.md b/BUILD_OSX.md index 1c9c5a9796..e7b59edcc1 100644 --- a/BUILD_OSX.md +++ b/BUILD_OSX.md @@ -4,9 +4,7 @@ Please read the [general build guide](BUILD.md) for information on dependencies [Homebrew](http://brew.sh/) is an excellent package manager for OS X. It makes install of all High Fidelity dependencies very simple. brew tap homebrew/versions - brew install cmake openssl qt55 - -We no longer require install of qt5 via our [homebrew formulas repository](https://github.com/highfidelity/homebrew-formulas). Versions of Qt that are 5.5.x provide a mechanism to disable the wireless scanning we previously had a custom patch for. + brew install cmake openssl qt5 ###OpenSSL and Qt @@ -15,9 +13,9 @@ For OpenSSL installed via homebrew, set OPENSSL_ROOT_DIR: export OPENSSL_ROOT_DIR=/usr/local/Cellar/openssl/1.0.2h_1/ -For Qt 5.5.1 installed via homebrew, set QT_CMAKE_PREFIX_PATH as follows. +For Qt 5.6.1 installed via homebrew, set QT_CMAKE_PREFIX_PATH as follows. - export QT_CMAKE_PREFIX_PATH=/usr/local/Cellar/qt55/5.5.1/lib/cmake + export QT_CMAKE_PREFIX_PATH=/usr/local/Cellar/qt5/5.6.1-1/lib/cmake Note that these use the versions from homebrew formulae at the time of this writing, and the version in the path will likely change. diff --git a/BUILD_WIN.md b/BUILD_WIN.md index 25e20952ca..b8adaad8d1 100644 --- a/BUILD_WIN.md +++ b/BUILD_WIN.md @@ -27,17 +27,17 @@ We expect nmake.exe to be located at the following path. ###Qt You can use the online installer or the offline installer. If you use the offline installer, be sure to select the "OpenGL" version. -* [Download the online installer](http://qt-project.org/downloads) +* [Download the online installer](http://www.qt.io/download-open-source/#section-2) * When it asks you to select components, ONLY select one of the following, 32- or 64-bit to match your build preference: - * Qt > Qt 5.5.1 > **msvc2013 32-bit** - * Qt > Qt 5.5.1 > **msvc2013 64-bit** + * Qt > Qt 5.6.1 > **msvc2013 32-bit** + * Qt > Qt 5.6.1 > **msvc2013 64-bit** * Download the offline installer, 32- or 64-bit to match your build preference: - * [32-bit](http://download.qt.io/official_releases/qt/5.5/5.5.1/qt-opensource-windows-x86-msvc2013-5.5.1.exe) - * [64-bit](http://download.qt.io/official_releases/qt/5.5/5.5.1/qt-opensource-windows-x86-msvc2013_64-5.5.1.exe) + * [32-bit](http://download.qt.io/official_releases/qt/5.6/5.6.1-1/qt-opensource-windows-x86-msvc2013-5.6.1-1.exe) + * [64-bit](http://download.qt.io/official_releases/qt/5.6/5.6.1-1/qt-opensource-windows-x86-msvc2013_64-5.6.1-1.exe) Once Qt is installed, you need to manually configure the following: -* Set the QT_CMAKE_PREFIX_PATH environment variable to your `Qt\5.5.1\msvc2013\lib\cmake` or `Qt\5.5.1\msvc2013_64\lib\cmake` directory. +* Set the QT_CMAKE_PREFIX_PATH environment variable to your `Qt\5.6.1\msvc2013\lib\cmake` or `Qt\5.6.1\msvc2013_64\lib\cmake` directory. * You can set an environment variable from Control Panel > System > Advanced System Settings > Environment Variables > New ###External Libraries diff --git a/interface/resources/qml/controls/WebView.qml b/interface/resources/qml/controls/WebView.qml index 7285db22d2..65031c0035 100644 --- a/interface/resources/qml/controls/WebView.qml +++ b/interface/resources/qml/controls/WebView.qml @@ -61,8 +61,4 @@ WebEngineView { request.openIn(newWindow.webView); } } - - // This breaks the webchannel used for passing messages. Fixed in Qt 5.6 - // See https://bugreports.qt.io/browse/QTBUG-49521 - //profile: desktop.browserProfile } From b048637c2651143190f3d19f2d9629f22fe05035 Mon Sep 17 00:00:00 2001 From: SamGondelman Date: Fri, 1 Jul 2016 18:18:35 -0700 Subject: [PATCH 04/21] fix signal issue and qabstract::socket issue --- libraries/shared/src/RegisteredMetaTypes.cpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/libraries/shared/src/RegisteredMetaTypes.cpp b/libraries/shared/src/RegisteredMetaTypes.cpp index 8e6c1ef6ed..171b58de17 100644 --- a/libraries/shared/src/RegisteredMetaTypes.cpp +++ b/libraries/shared/src/RegisteredMetaTypes.cpp @@ -18,6 +18,7 @@ #include #include #include +#include #include "RegisteredMetaTypes.h" @@ -32,6 +33,7 @@ int xColorMetaTypeId = qRegisterMetaType(); int pickRayMetaTypeId = qRegisterMetaType(); int collisionMetaTypeId = qRegisterMetaType(); int qMapURLStringMetaTypeId = qRegisterMetaType>(); +int socketErrorMetaTypeId = qRegisterMetaType(); void registerMetaTypes(QScriptEngine* engine) { qScriptRegisterMetaType(engine, mat4toScriptValue, mat4FromScriptValue); From 9903e464d8f54c734a3b3b3b684ed297d1d81902 Mon Sep 17 00:00:00 2001 From: SamGondelman Date: Tue, 5 Jul 2016 12:54:25 -0700 Subject: [PATCH 05/21] fix error in FileDialog.qml --- interface/resources/qml/dialogs/FileDialog.qml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/interface/resources/qml/dialogs/FileDialog.qml b/interface/resources/qml/dialogs/FileDialog.qml index 6a37886cb3..ff8be580db 100644 --- a/interface/resources/qml/dialogs/FileDialog.qml +++ b/interface/resources/qml/dialogs/FileDialog.qml @@ -52,7 +52,7 @@ ModalWindow { // Set from OffscreenUi::getOpenFile() property int options; // <-- FIXME unused - property string iconText: text !== "" ? hifi.glyphs.scriptUpload : "" + property string iconText: root.title !== "" ? hifi.glyphs.scriptUpload : "" property int iconSize: 40 property bool selectDirectory: false; From 716647037eefeee04d9a13da1989c0dd994e44a8 Mon Sep 17 00:00:00 2001 From: SamGondelman Date: Tue, 5 Jul 2016 13:26:25 -0700 Subject: [PATCH 06/21] removed unused code --- interface/src/scripting/WebWindowClass.cpp | 8 ---- interface/src/scripting/WebWindowClass.h | 1 - interface/src/ui/DataWebPage.cpp | 54 ---------------------- interface/src/ui/DataWebPage.h | 26 ----------- 4 files changed, 89 deletions(-) delete mode 100644 interface/src/ui/DataWebPage.cpp delete mode 100644 interface/src/ui/DataWebPage.h diff --git a/interface/src/scripting/WebWindowClass.cpp b/interface/src/scripting/WebWindowClass.cpp index 400c538461..99de804b7c 100644 --- a/interface/src/scripting/WebWindowClass.cpp +++ b/interface/src/scripting/WebWindowClass.cpp @@ -51,8 +51,6 @@ WebWindowClass::WebWindowClass(const QString& title, const QString& url, int wid layout->addWidget(_webView); - addEventBridgeToWindowObject(); - _windowWidget = dialogWidget; auto style = QStyleFactory::create("fusion"); @@ -68,8 +66,6 @@ WebWindowClass::WebWindowClass(const QString& title, const QString& url, int wid } connect(this, &WebWindowClass::destroyed, _windowWidget, &QWidget::deleteLater); - //connect(_webView->page()->mainFrame(), &QWebFrame::javaScriptWindowObjectCleared, - // this, &WebWindowClass::addEventBridgeToWindowObject); } WebWindowClass::~WebWindowClass() { @@ -92,10 +88,6 @@ void WebWindowClass::hasClosed() { emit closed(); } -void WebWindowClass::addEventBridgeToWindowObject() { -// _webView->page()->mainFrame()->addToJavaScriptWindowObject("EventBridge", _eventBridge); -} - void WebWindowClass::setVisible(bool visible) { if (visible) { QMetaObject::invokeMethod(_windowWidget, "showNormal", Qt::AutoConnection); diff --git a/interface/src/scripting/WebWindowClass.h b/interface/src/scripting/WebWindowClass.h index fdb434ab7e..65ad9a3dcc 100644 --- a/interface/src/scripting/WebWindowClass.h +++ b/interface/src/scripting/WebWindowClass.h @@ -56,7 +56,6 @@ public slots: void setURL(const QString& url); void raise(); ScriptEventBridge* getEventBridge() const { return _eventBridge; } - void addEventBridgeToWindowObject(); void setTitle(const QString& title); signals: diff --git a/interface/src/ui/DataWebPage.cpp b/interface/src/ui/DataWebPage.cpp deleted file mode 100644 index 7168dfc5d6..0000000000 --- a/interface/src/ui/DataWebPage.cpp +++ /dev/null @@ -1,54 +0,0 @@ -// -// DataWebPage.cpp -// interface/src/ui -// -// Created by Stephen Birarda on 2014-09-22. -// Copyright 2014 High Fidelity, Inc. -// -// Distributed under the Apache License, Version 2.0. -// See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html -// - -#include - -#include "Application.h" -#include -#include - -#include "DataWebPage.h" - -DataWebPage::DataWebPage(QObject* parent) : QWebEnginePage(parent) -{ - // use an OAuthNetworkAccessManager instead of regular QNetworkAccessManager so our requests are authed -// setNetworkAccessManager(OAuthNetworkAccessManager::getInstance()); - - // give the page an empty stylesheet -// settings()->setUserStyleSheetUrl(QUrl()); -} - -//void DataWebPage::javaScriptConsoleMessage(const QString& message, int lineNumber, const QString& sourceID) { -// qDebug() << "JS console message at line" << lineNumber << "from" << sourceID << "-" << message; -//} - -bool DataWebPage::acceptNavigationRequest(const QUrl & url, NavigationType type, bool isMainFrame) { - // Handle hifi:// links and links to files with particular extensions - QString urlString = url.toString(); - if (qApp->canAcceptURL(urlString)) { - if (qApp->acceptURL(urlString)) { - return false; // we handled it, so QWebPage doesn't need to handle it - } - } - - // Make hyperlinks with target="_blank" open in user's Web browser - if (type == NavigationTypeLinkClicked && !isMainFrame) { - qApp->openUrl(url); - return false; // We handled it. - } - - return true; -} - -// -//QString DataWebPage::userAgentForUrl(const QUrl& url) const { -// return HIGH_FIDELITY_USER_AGENT; -//} diff --git a/interface/src/ui/DataWebPage.h b/interface/src/ui/DataWebPage.h deleted file mode 100644 index 55e185ca4f..0000000000 --- a/interface/src/ui/DataWebPage.h +++ /dev/null @@ -1,26 +0,0 @@ -// -// DataWebPage.h -// interface/src/ui -// -// Created by Stephen Birarda on 2014-09-22. -// Copyright 2014 High Fidelity, Inc. -// -// Distributed under the Apache License, Version 2.0. -// See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html -// - -#ifndef hifi_DataWebPage_h -#define hifi_DataWebPage_h - -#include - -class DataWebPage : public QWebEnginePage { -public: - DataWebPage(QObject* parent = 0); -protected: - //virtual void javaScriptConsoleMessage(const QString & message, int lineNumber, const QString & sourceID) override; - virtual bool acceptNavigationRequest(const QUrl & url, NavigationType type, bool isMainFrame) override; - //virtual QString userAgentForUrl(const QUrl& url) const override; -}; - -#endif // hifi_DataWebPage_h From 88d0aa373709aef89fc2ac1c7d431fe10be633fc Mon Sep 17 00:00:00 2001 From: SamGondelman Date: Tue, 5 Jul 2016 13:46:42 -0700 Subject: [PATCH 07/21] removed showButtonDown, which didn't exist --- scripts/system/directory.js | 3 +-- scripts/system/libraries/toolBars.js | 2 -- 2 files changed, 1 insertion(+), 4 deletions(-) diff --git a/scripts/system/directory.js b/scripts/system/directory.js index 2eae4fa9cf..ac65615a68 100644 --- a/scripts/system/directory.js +++ b/scripts/system/directory.js @@ -73,8 +73,7 @@ var toolBar = (function() { width: toolWidth, height: toolHeight, alpha: 0.9, - visible: true, - showButtonDown: true + visible: true }); toolBar.showTool(browseDirectoryButton, true); diff --git a/scripts/system/libraries/toolBars.js b/scripts/system/libraries/toolBars.js index 5a84bf9027..e49f8c4004 100644 --- a/scripts/system/libraries/toolBars.js +++ b/scripts/system/libraries/toolBars.js @@ -130,8 +130,6 @@ Tool = function(properties, selectable, selected) { // selectable and selected a if (update) { if (selectable) { this.toggle(); - } else if (properties.showButtonDown) { - this.buttonDown(true); } } return true; From 2db02fdde16e2147937aca21fa44add50bd2dfe3 Mon Sep 17 00:00:00 2001 From: SamGondelman Date: Mon, 1 Aug 2016 17:41:47 -0700 Subject: [PATCH 08/21] remove QtWebProcess hack on OSX --- cmake/macros/FixupInterface.cmake | 58 ------------------------------- interface/CMakeLists.txt | 3 -- 2 files changed, 61 deletions(-) delete mode 100644 cmake/macros/FixupInterface.cmake diff --git a/cmake/macros/FixupInterface.cmake b/cmake/macros/FixupInterface.cmake deleted file mode 100644 index 3e5ea7a3e2..0000000000 --- a/cmake/macros/FixupInterface.cmake +++ /dev/null @@ -1,58 +0,0 @@ -# -# FixupInterface.cmake -# cmake/macros -# -# Copyright 2016 High Fidelity, Inc. -# Created by Stephen Birarda on January 6th, 2016 -# -# Distributed under the Apache License, Version 2.0. -# See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html -# - -macro(fixup_interface) - if (APPLE) - - string(REPLACE " " "\\ " ESCAPED_BUNDLE_NAME ${INTERFACE_BUNDLE_NAME}) - string(REPLACE " " "\\ " ESCAPED_INSTALL_PATH ${INTERFACE_INSTALL_DIR}) - set(_INTERFACE_INSTALL_PATH "${ESCAPED_INSTALL_PATH}/${ESCAPED_BUNDLE_NAME}.app") - - # install QtWebProcess from Qt to the application bundle - # since it is missed by macdeployqt - # https://bugreports.qt.io/browse/QTBUG-35211 - set(LIBEXEC_PATH "${_INTERFACE_INSTALL_PATH}/Contents/libexec") - install( - PROGRAMS "${QT_DIR}/libexec/QtWebProcess" - DESTINATION ${LIBEXEC_PATH} - COMPONENT ${CLIENT_COMPONENT} - ) - - set(QTWEBPROCESS_PATH "\${CMAKE_INSTALL_PREFIX}/${LIBEXEC_PATH}") - - # we also need a qt.conf in the directory of QtWebProcess - install(CODE " - file(WRITE ${QTWEBPROCESS_PATH}/qt.conf - \"[Paths]\nPlugins = ../PlugIns\nImports = ../Resources/qml\nQml2Imports = ../Resources/qml\" - )" - COMPONENT ${CLIENT_COMPONENT} - ) - - find_program(MACDEPLOYQT_COMMAND macdeployqt PATHS "${QT_DIR}/bin" NO_DEFAULT_PATH) - - if (NOT MACDEPLOYQT_COMMAND AND (PRODUCTION_BUILD OR PR_BUILD)) - message(FATAL_ERROR "Could not find macdeployqt at ${QT_DIR}/bin.\ - It is required to produce an relocatable interface application.\ - Check that the environment variable QT_DIR points to your Qt installation.\ - ") - endif () - - install(CODE " - execute_process(COMMAND ${MACDEPLOYQT_COMMAND}\ - \${CMAKE_INSTALL_PREFIX}/${_INTERFACE_INSTALL_PATH}/\ - -verbose=2 -qmldir=${CMAKE_SOURCE_DIR}/interface/resources/qml/\ - -executable=\${CMAKE_INSTALL_PREFIX}/${_INTERFACE_INSTALL_PATH}/Contents/libexec/QtWebProcess\ - )" - COMPONENT ${CLIENT_COMPONENT} - ) - - endif () -endmacro() diff --git a/interface/CMakeLists.txt b/interface/CMakeLists.txt index b6e9153f65..9ee7c73f71 100644 --- a/interface/CMakeLists.txt +++ b/interface/CMakeLists.txt @@ -280,9 +280,6 @@ if (APPLE) $/../Resources/scripts ) - # call the fixup_interface macro to add required bundling commands for installation - fixup_interface() - else (APPLE) # copy the resources files beside the executable add_custom_command(TARGET ${TARGET_NAME} POST_BUILD From c993a6b818c81da2c764d698b9c6f77130a8badb Mon Sep 17 00:00:00 2001 From: SamGondelman Date: Tue, 2 Aug 2016 11:23:49 -0700 Subject: [PATCH 09/21] try removing windows hack --- interface/CMakeLists.txt | 6 ------ 1 file changed, 6 deletions(-) diff --git a/interface/CMakeLists.txt b/interface/CMakeLists.txt index 9ee7c73f71..863595c174 100644 --- a/interface/CMakeLists.txt +++ b/interface/CMakeLists.txt @@ -245,12 +245,6 @@ target_link_libraries( Qt5::WebChannel Qt5::WebEngine Qt5::WebEngineWidgets ) -# Issue causes build failure unless we add this directory. -# See https://bugreports.qt.io/browse/QTBUG-43351 -if (WIN32) - add_paths_to_fixup_libs(${Qt5_DIR}/../../../plugins/qtwebengine) -endif() - if (UNIX) target_link_libraries(${TARGET_NAME} pthread) endif(UNIX) From 038aba20e454c3f0b6933fc3f567a5989c67fe47 Mon Sep 17 00:00:00 2001 From: SamGondelman Date: Tue, 2 Aug 2016 12:14:25 -0700 Subject: [PATCH 10/21] disable dropshadows if unsupported (OSX and AMD cards) --- interface/resources/qml/hifi/Card.qml | 2 ++ interface/resources/qml/windows/DefaultFrameDecoration.qml | 2 +- 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/interface/resources/qml/hifi/Card.qml b/interface/resources/qml/hifi/Card.qml index 53829eed9e..5d8cbc97fe 100644 --- a/interface/resources/qml/hifi/Card.qml +++ b/interface/resources/qml/hifi/Card.qml @@ -89,6 +89,7 @@ Rectangle { property int dropSamples: 9; property int dropSpread: 0; DropShadow { + visible: desktop.gradientsSupported; source: place; anchors.fill: place; horizontalOffset: dropHorizontalOffset; @@ -99,6 +100,7 @@ Rectangle { spread: dropSpread; } DropShadow { + visible: desktop.gradientsSupported; source: users; anchors.fill: users; horizontalOffset: dropHorizontalOffset; diff --git a/interface/resources/qml/windows/DefaultFrameDecoration.qml b/interface/resources/qml/windows/DefaultFrameDecoration.qml index 40e32aaa6b..1ddd83976e 100644 --- a/interface/resources/qml/windows/DefaultFrameDecoration.qml +++ b/interface/resources/qml/windows/DefaultFrameDecoration.qml @@ -109,7 +109,7 @@ Decoration { verticalOffset: 2 samples: 2 color: hifi.colors.baseGrayShadow60 - visible: (window && window.focus) + visible: (desktop.gradientsSupported && window && window.focus) cached: true } } From 7f2476f0f82ecd9d7deb1de41e460187ba59f16f Mon Sep 17 00:00:00 2001 From: SamGondelman Date: Thu, 4 Aug 2016 10:25:52 -0700 Subject: [PATCH 11/21] put pack macdeployqt call, but still removed qtwebprocess --- cmake/macros/FixupInterface.cmake | 37 +++++++++++++++++++++++++++++++ interface/CMakeLists.txt | 3 +++ 2 files changed, 40 insertions(+) create mode 100644 cmake/macros/FixupInterface.cmake diff --git a/cmake/macros/FixupInterface.cmake b/cmake/macros/FixupInterface.cmake new file mode 100644 index 0000000000..93b5cc25fb --- /dev/null +++ b/cmake/macros/FixupInterface.cmake @@ -0,0 +1,37 @@ +# +# FixupInterface.cmake +# cmake/macros +# +# Copyright 2016 High Fidelity, Inc. +# Created by Stephen Birarda on January 6th, 2016 +# +# Distributed under the Apache License, Version 2.0. +# See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html +# + +macro(fixup_interface) + if (APPLE) + + string(REPLACE " " "\\ " ESCAPED_BUNDLE_NAME ${INTERFACE_BUNDLE_NAME}) + string(REPLACE " " "\\ " ESCAPED_INSTALL_PATH ${INTERFACE_INSTALL_DIR}) + set(_INTERFACE_INSTALL_PATH "${ESCAPED_INSTALL_PATH}/${ESCAPED_BUNDLE_NAME}.app") + + find_program(MACDEPLOYQT_COMMAND macdeployqt PATHS "${QT_DIR}/bin" NO_DEFAULT_PATH) + + if (NOT MACDEPLOYQT_COMMAND AND (PRODUCTION_BUILD OR PR_BUILD)) + message(FATAL_ERROR "Could not find macdeployqt at ${QT_DIR}/bin.\ + It is required to produce an relocatable interface application.\ + Check that the environment variable QT_DIR points to your Qt installation.\ + ") + endif () + + install(CODE " + execute_process(COMMAND ${MACDEPLOYQT_COMMAND}\ + \${CMAKE_INSTALL_PREFIX}/${_INTERFACE_INSTALL_PATH}/\ + -verbose=2 -qmldir=${CMAKE_SOURCE_DIR}/interface/resources/qml/\ + )" + COMPONENT ${CLIENT_COMPONENT} + ) + + endif () +endmacro() diff --git a/interface/CMakeLists.txt b/interface/CMakeLists.txt index 863595c174..f712c4cc21 100644 --- a/interface/CMakeLists.txt +++ b/interface/CMakeLists.txt @@ -274,6 +274,9 @@ if (APPLE) $/../Resources/scripts ) + # call the fixup_interface macro to add required bundling commands for installation + fixup_interface() + else (APPLE) # copy the resources files beside the executable add_custom_command(TARGET ${TARGET_NAME} POST_BUILD From 99176588cc6afaa64efb190b4f638eeb84d962fc Mon Sep 17 00:00:00 2001 From: SamGondelman Date: Wed, 10 Aug 2016 14:47:38 -0700 Subject: [PATCH 12/21] remove old webwindowclass that relied on qwebkit --- interface/src/Application.cpp | 2 - interface/src/scripting/WebWindowClass.cpp | 173 ------------------ interface/src/scripting/WebWindowClass.h | 79 -------- .../scripting/WindowScriptingInterface.cpp | 5 - .../src/scripting/WindowScriptingInterface.h | 6 - 5 files changed, 265 deletions(-) delete mode 100644 interface/src/scripting/WebWindowClass.cpp delete mode 100644 interface/src/scripting/WebWindowClass.h diff --git a/interface/src/Application.cpp b/interface/src/Application.cpp index c22e04a2e4..8620b384ec 100644 --- a/interface/src/Application.cpp +++ b/interface/src/Application.cpp @@ -133,7 +133,6 @@ #include "scripting/LocationScriptingInterface.h" #include "scripting/MenuScriptingInterface.h" #include "scripting/SettingsScriptingInterface.h" -#include "scripting/WebWindowClass.h" #include "scripting/WindowScriptingInterface.h" #include "scripting/ControllerScriptingInterface.h" #include "scripting/ToolbarScriptingInterface.h" @@ -4858,7 +4857,6 @@ void Application::registerScriptEngineWithApplicationServices(ScriptEngine* scri scriptEngine->registerGetterSetter("location", LocationScriptingInterface::locationGetter, LocationScriptingInterface::locationSetter); - scriptEngine->registerFunction("WebWindow", WebWindowClass::constructor, 1); scriptEngine->registerFunction("OverlayWebWindow", QmlWebWindowClass::constructor); scriptEngine->registerFunction("OverlayWindow", QmlWindowClass::constructor); diff --git a/interface/src/scripting/WebWindowClass.cpp b/interface/src/scripting/WebWindowClass.cpp deleted file mode 100644 index 99de804b7c..0000000000 --- a/interface/src/scripting/WebWindowClass.cpp +++ /dev/null @@ -1,173 +0,0 @@ -// -// WebWindowClass.cpp -// interface/src/scripting -// -// Created by Ryan Huffman on 11/06/14. -// Copyright 2014 High Fidelity, Inc. -// -// Distributed under the Apache License, Version 2.0. -// See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html -// - - -#include -#include -#include -#include -#include -#include -#include - -#include "Application.h" -#include "ui/DataWebPage.h" -#include "MainWindow.h" -#include "WebWindowClass.h" -#include "WindowScriptingInterface.h" - -ScriptEventBridge::ScriptEventBridge(QObject* parent) : QObject(parent) { -} - -void ScriptEventBridge::emitWebEvent(const QString& data) { - emit webEventReceived(data); -} - -void ScriptEventBridge::emitScriptEvent(const QString& data) { - emit scriptEventReceived(data); -} - -WebWindowClass::WebWindowClass(const QString& title, const QString& url, int width, int height) - : QObject(NULL), _eventBridge(new ScriptEventBridge(this)) { - auto dialogWidget = new QDialog(qApp->getWindow(), Qt::Window); - dialogWidget->setWindowTitle(title); - dialogWidget->resize(width, height); - dialogWidget->installEventFilter(this); - connect(dialogWidget, &QDialog::finished, this, &WebWindowClass::hasClosed); - - auto layout = new QVBoxLayout(dialogWidget); - layout->setContentsMargins(0, 0, 0, 0); - dialogWidget->setLayout(layout); - - _webView = new QWebEngineView(dialogWidget); - - layout->addWidget(_webView); - - _windowWidget = dialogWidget; - - auto style = QStyleFactory::create("fusion"); - if (style) { - _webView->setStyle(style); - } - - _webView->setPage(new DataWebPage()); - if (!url.startsWith("http") && !url.startsWith("file://")) { - _webView->setUrl(QUrl::fromLocalFile(url)); - } else { - _webView->setUrl(url); - } - - connect(this, &WebWindowClass::destroyed, _windowWidget, &QWidget::deleteLater); -} - -WebWindowClass::~WebWindowClass() { -} - -bool WebWindowClass::eventFilter(QObject* sender, QEvent* event) { - if (sender == _windowWidget) { - if (event->type() == QEvent::Move) { - emit moved(getPosition()); - } - if (event->type() == QEvent::Resize) { - emit resized(getSize()); - } - } - - return false; -} - -void WebWindowClass::hasClosed() { - emit closed(); -} - -void WebWindowClass::setVisible(bool visible) { - if (visible) { - QMetaObject::invokeMethod(_windowWidget, "showNormal", Qt::AutoConnection); - QMetaObject::invokeMethod(_windowWidget, "raise", Qt::AutoConnection); - } - QMetaObject::invokeMethod(_windowWidget, "setVisible", Qt::AutoConnection, Q_ARG(bool, visible)); -} - -void WebWindowClass::setURL(const QString& url) { - if (QThread::currentThread() != thread()) { - QMetaObject::invokeMethod(this, "setURL", Qt::AutoConnection, Q_ARG(QString, url)); - return; - } - _webView->setUrl(url); -} - -QSizeF WebWindowClass::getSize() const { - QSizeF size = _windowWidget->size(); - return size; -} - -void WebWindowClass::setSize(QSizeF size) { - setSize(size.width(), size.height()); -} - -void WebWindowClass::setSize(int width, int height) { - if (QThread::currentThread() != thread()) { - QMetaObject::invokeMethod(this, "setSize", Qt::AutoConnection, Q_ARG(int, width), Q_ARG(int, height)); - return; - } - _windowWidget->resize(width, height); -} - -glm::vec2 WebWindowClass::getPosition() const { - QPoint position = _windowWidget->pos(); - return glm::vec2(position.x(), position.y()); -} - -void WebWindowClass::setPosition(glm::vec2 position) { - setPosition(position.x, position.y); -} - -void WebWindowClass::setPosition(int x, int y) { - if (QThread::currentThread() != thread()) { - QMetaObject::invokeMethod(this, "setPosition", Qt::AutoConnection, Q_ARG(int, x), Q_ARG(int, y)); - return; - } - _windowWidget->move(x, y); -} - -void WebWindowClass::raise() { - QMetaObject::invokeMethod(_windowWidget, "showNormal", Qt::AutoConnection); - QMetaObject::invokeMethod(_windowWidget, "raise", Qt::AutoConnection); -} - -QScriptValue WebWindowClass::constructor(QScriptContext* context, QScriptEngine* engine) { - WebWindowClass* retVal; - QString file = context->argument(0).toString(); - if (context->argument(4).toBool()) { - qWarning() << "ToolWindow views with WebWindow are no longer supported. Use OverlayWebWindow instead"; - return QScriptValue(); - } else { - qWarning() << "WebWindow views are deprecated. Use OverlayWebWindow instead"; - } - QMetaObject::invokeMethod(DependencyManager::get().data(), "doCreateWebWindow", Qt::BlockingQueuedConnection, - Q_RETURN_ARG(WebWindowClass*, retVal), - Q_ARG(const QString&, file), - Q_ARG(QString, context->argument(1).toString()), - Q_ARG(int, context->argument(2).toInteger()), - Q_ARG(int, context->argument(3).toInteger())); - - connect(engine, &QScriptEngine::destroyed, retVal, &WebWindowClass::deleteLater); - - return engine->newQObject(retVal); -} - -void WebWindowClass::setTitle(const QString& title) { - if (QThread::currentThread() != thread()) { - QMetaObject::invokeMethod(this, "setTitle", Qt::AutoConnection, Q_ARG(QString, title)); - return; - } - _windowWidget->setWindowTitle(title); -} diff --git a/interface/src/scripting/WebWindowClass.h b/interface/src/scripting/WebWindowClass.h deleted file mode 100644 index 65ad9a3dcc..0000000000 --- a/interface/src/scripting/WebWindowClass.h +++ /dev/null @@ -1,79 +0,0 @@ -// -// WebWindowClass.h -// interface/src/scripting -// -// Created by Ryan Huffman on 11/06/14. -// Copyright 2014 High Fidelity, Inc. -// -// Distributed under the Apache License, Version 2.0. -// See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html -// - -#ifndef hifi_WebWindowClass_h -#define hifi_WebWindowClass_h - -#include -#include -#include - -class ScriptEventBridge : public QObject { - Q_OBJECT -public: - ScriptEventBridge(QObject* parent = NULL); - -public slots: - void emitWebEvent(const QString& data); - void emitScriptEvent(const QString& data); - -signals: - void webEventReceived(const QString& data); - void scriptEventReceived(const QString& data); - -}; - -class WebWindowClass : public QObject { - Q_OBJECT - Q_PROPERTY(QObject* eventBridge READ getEventBridge) - Q_PROPERTY(QString url READ getURL) - Q_PROPERTY(glm::vec2 position READ getPosition WRITE setPosition); - Q_PROPERTY(QSizeF size READ getSize WRITE setSize); - -public: - WebWindowClass(const QString& title, const QString& url, int width, int height); - ~WebWindowClass(); - - static QScriptValue constructor(QScriptContext* context, QScriptEngine* engine); - -public slots: - void setVisible(bool visible); - glm::vec2 getPosition() const; - void setPosition(int x, int y); - void setPosition(glm::vec2 position); - QSizeF getSize() const; - void setSize(QSizeF size); - void setSize(int width, int height); - QString getURL() const { return _webView->url().url(); } - void setURL(const QString& url); - void raise(); - ScriptEventBridge* getEventBridge() const { return _eventBridge; } - void setTitle(const QString& title); - -signals: - void visibilityChanged(bool visible); // Tool window - void moved(glm::vec2 position); - void resized(QSizeF size); - void closed(); - -protected: - virtual bool eventFilter(QObject* sender, QEvent* event) override; - -private slots: - void hasClosed(); - -private: - QWidget* _windowWidget; - QWebEngineView* _webView; - ScriptEventBridge* _eventBridge; -}; - -#endif diff --git a/interface/src/scripting/WindowScriptingInterface.cpp b/interface/src/scripting/WindowScriptingInterface.cpp index 4eb8c67250..c528c26b99 100644 --- a/interface/src/scripting/WindowScriptingInterface.cpp +++ b/interface/src/scripting/WindowScriptingInterface.cpp @@ -21,7 +21,6 @@ #include "MainWindow.h" #include "Menu.h" #include "OffscreenUi.h" -#include "WebWindowClass.h" #include "WindowScriptingInterface.h" @@ -61,10 +60,6 @@ WindowScriptingInterface::WindowScriptingInterface() { }); } -WebWindowClass* WindowScriptingInterface::doCreateWebWindow(const QString& title, const QString& url, int width, int height) { - return new WebWindowClass(title, url, width, height); -} - QScriptValue WindowScriptingInterface::hasFocus() { return qApp->hasFocus(); } diff --git a/interface/src/scripting/WindowScriptingInterface.h b/interface/src/scripting/WindowScriptingInterface.h index 7a01be7fac..715d0657a3 100644 --- a/interface/src/scripting/WindowScriptingInterface.h +++ b/interface/src/scripting/WindowScriptingInterface.h @@ -16,9 +16,6 @@ #include #include -class WebWindowClass; - - class CustomPromptResult { public: QVariant value; @@ -65,9 +62,6 @@ signals: void snapshotTaken(const QString& path, bool notify); void snapshotShared(const QString& error); -private slots: - WebWindowClass* doCreateWebWindow(const QString& title, const QString& url, int width, int height); - private: QString getPreviousBrowseLocation() const; void setPreviousBrowseLocation(const QString& location); From 8a4d48ca8d7ab55b104a0371ded85ce082581915 Mon Sep 17 00:00:00 2001 From: SamGondelman Date: Wed, 10 Aug 2016 15:16:02 -0700 Subject: [PATCH 13/21] set browserProfile now that Qt bug is fixed --- interface/resources/qml/Browser.qml | 12 ++++++------ interface/resources/qml/controls/WebView.qml | 3 +-- 2 files changed, 7 insertions(+), 8 deletions(-) diff --git a/interface/resources/qml/Browser.qml b/interface/resources/qml/Browser.qml index 050e10eead..62226859b6 100644 --- a/interface/resources/qml/Browser.qml +++ b/interface/resources/qml/Browser.qml @@ -223,12 +223,12 @@ ScrollingWindow { var newWindow = component.createObject(desktop); request.openIn(newWindow.webView) } - Component.onCompleted: { - desktop.initWebviewProfileHandlers(webview.profile) - } - - //profile: desktop.browserProfile + Component.onCompleted: { + desktop.initWebviewProfileHandlers(webview.profile) + } + + profile: desktop.browserProfile } } // item @@ -245,4 +245,4 @@ ScrollingWindow { break; } } -} // dialog \ No newline at end of file +} // dialog diff --git a/interface/resources/qml/controls/WebView.qml b/interface/resources/qml/controls/WebView.qml index 65031c0035..84ef31e87f 100644 --- a/interface/resources/qml/controls/WebView.qml +++ b/interface/resources/qml/controls/WebView.qml @@ -5,7 +5,7 @@ WebEngineView { id: root property var newUrl; - profile.httpUserAgent: "Mozilla/5.0 Chrome (HighFidelityInterface)" + profile: desktop.browserProfile Component.onCompleted: { console.log("Connecting JS messaging to Hifi Logging") @@ -13,7 +13,6 @@ WebEngineView { root.javaScriptConsoleMessage.connect(function(level, message, lineNumber, sourceID) { console.log("Web Window JS message: " + sourceID + " " + lineNumber + " " + message); }); - } // FIXME hack to get the URL with the auth token included. Remove when we move to Qt 5.6 From 7e0ad52cd5f71739a903719b9f6fdd18a73be913 Mon Sep 17 00:00:00 2001 From: SamGondelman Date: Wed, 10 Aug 2016 15:31:54 -0700 Subject: [PATCH 14/21] updated build instructions to use official qt release instead of homebrew --- BUILD_OSX.md | 24 ++++++++++++++++-------- 1 file changed, 16 insertions(+), 8 deletions(-) diff --git a/BUILD_OSX.md b/BUILD_OSX.md index e7b59edcc1..55d4276aa0 100644 --- a/BUILD_OSX.md +++ b/BUILD_OSX.md @@ -1,23 +1,31 @@ Please read the [general build guide](BUILD.md) for information on dependencies required for all platforms. Only OS X specific instructions are found in this file. ###Homebrew -[Homebrew](http://brew.sh/) is an excellent package manager for OS X. It makes install of all High Fidelity dependencies very simple. +[Homebrew](http://brew.sh/) is an excellent package manager for OS X. It makes install of some High Fidelity dependencies very simple. brew tap homebrew/versions - brew install cmake openssl qt5 + brew install cmake openssl -###OpenSSL and Qt +###OpenSSL -Assuming you've installed OpenSSL or Qt 5 using the homebrew instructions above, you'll need to set OPENSSL_ROOT_DIR and QT_CMAKE_PREFIX_PATH so CMake can find your installations. +Assuming you've installed OpenSSL using the homebrew instructions above, you'll need to set OPENSSL_ROOT_DIR so CMake can find your installations. For OpenSSL installed via homebrew, set OPENSSL_ROOT_DIR: export OPENSSL_ROOT_DIR=/usr/local/Cellar/openssl/1.0.2h_1/ - -For Qt 5.6.1 installed via homebrew, set QT_CMAKE_PREFIX_PATH as follows. - export QT_CMAKE_PREFIX_PATH=/usr/local/Cellar/qt5/5.6.1-1/lib/cmake +Note that this uses the version from the homebrew formula at the time of this writing, and the version in the path will likely change. -Note that these use the versions from homebrew formulae at the time of this writing, and the version in the path will likely change. +###Qt +You can use the online installer or the offline installer. + +* [Download the online installer](http://www.qt.io/download-open-source/#section-2) + * When it asks you to select components, select the following: + * Qt > Qt 5.6 + +* [Download the offline installer](http://download.qt.io/official_releases/qt/5.6/5.6.1-1/qt-opensource-mac-x64-clang-5.6.1-1.dmg) + +Once Qt is installed, you need to manually configure the following: +* Set the QT_CMAKE_PREFIX_PATH environment variable to your `Qt5.6.1/5.6/clang_64/lib/cmake/` directory. ###Xcode If Xcode is your editor of choice, you can ask CMake to generate Xcode project files instead of Unix Makefiles. From 74e5814a48d8c16eb86f73e64c843913e1b6a4b6 Mon Sep 17 00:00:00 2001 From: SamGondelman Date: Fri, 12 Aug 2016 13:35:57 -0700 Subject: [PATCH 15/21] try to fix rpath issue --- assignment-client/CMakeLists.txt | 5 +++++ domain-server/CMakeLists.txt | 5 +++++ interface/CMakeLists.txt | 3 ++- 3 files changed, 12 insertions(+), 1 deletion(-) diff --git a/assignment-client/CMakeLists.txt b/assignment-client/CMakeLists.txt index d0fd2c1176..773ef845e2 100644 --- a/assignment-client/CMakeLists.txt +++ b/assignment-client/CMakeLists.txt @@ -1,5 +1,10 @@ set(TARGET_NAME assignment-client) +# Fix up the rpath so macdeployqt works +if (APPLE) + set_target_properties(${TARGET_NAME} PROPERTIES INSTALL_RPATH "@executable_path/../Frameworks") +endif () + setup_hifi_project(Core Gui Network Script Quick Widgets WebSockets) # link in the shared libraries diff --git a/domain-server/CMakeLists.txt b/domain-server/CMakeLists.txt index b7eb8c0138..8a14907da3 100644 --- a/domain-server/CMakeLists.txt +++ b/domain-server/CMakeLists.txt @@ -6,6 +6,11 @@ else () set(_SHOULD_SYMLINK_RESOURCES FALSE) endif () +# Fix up the rpath so macdeployqt works +if (APPLE) + set_target_properties(${TARGET_NAME} PROPERTIES INSTALL_RPATH "@executable_path/../Frameworks") +endif () + # setup the project and link required Qt modules setup_hifi_project(Network) diff --git a/interface/CMakeLists.txt b/interface/CMakeLists.txt index f712c4cc21..f999a1a8f2 100644 --- a/interface/CMakeLists.txt +++ b/interface/CMakeLists.txt @@ -123,7 +123,8 @@ if (APPLE) add_executable(${TARGET_NAME} MACOSX_BUNDLE ${INTERFACE_SRCS} ${QM}) # make sure the output name for the .app bundle is correct - set_target_properties(${TARGET_NAME} PROPERTIES OUTPUT_NAME ${INTERFACE_BUNDLE_NAME}) + # Fix up the rpath so macdeployqt works + set_target_properties(${TARGET_NAME} PROPERTIES INSTALL_RPATH "@executable_path/../Frameworks") elseif (WIN32) # configure an rc file for the chosen icon set(CONFIGURE_ICON_PATH "${CMAKE_CURRENT_SOURCE_DIR}/icon/${INTERFACE_ICON_FILENAME}") From 544606bcccc953a2026dce0f2182bab5aab1f425 Mon Sep 17 00:00:00 2001 From: SamGondelman Date: Fri, 12 Aug 2016 13:46:22 -0700 Subject: [PATCH 16/21] cmake fix --- assignment-client/CMakeLists.txt | 4 ++-- domain-server/CMakeLists.txt | 6 +++--- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/assignment-client/CMakeLists.txt b/assignment-client/CMakeLists.txt index 773ef845e2..54afabfd21 100644 --- a/assignment-client/CMakeLists.txt +++ b/assignment-client/CMakeLists.txt @@ -1,12 +1,12 @@ set(TARGET_NAME assignment-client) +setup_hifi_project(Core Gui Network Script Quick Widgets WebSockets) + # Fix up the rpath so macdeployqt works if (APPLE) set_target_properties(${TARGET_NAME} PROPERTIES INSTALL_RPATH "@executable_path/../Frameworks") endif () -setup_hifi_project(Core Gui Network Script Quick Widgets WebSockets) - # link in the shared libraries link_hifi_libraries( audio avatars octree gpu model fbx entities diff --git a/domain-server/CMakeLists.txt b/domain-server/CMakeLists.txt index 8a14907da3..746e599d4e 100644 --- a/domain-server/CMakeLists.txt +++ b/domain-server/CMakeLists.txt @@ -6,14 +6,14 @@ else () set(_SHOULD_SYMLINK_RESOURCES FALSE) endif () +# setup the project and link required Qt modules +setup_hifi_project(Network) + # Fix up the rpath so macdeployqt works if (APPLE) set_target_properties(${TARGET_NAME} PROPERTIES INSTALL_RPATH "@executable_path/../Frameworks") endif () -# setup the project and link required Qt modules -setup_hifi_project(Network) - # TODO: find a solution that will handle web file changes in resources on windows without a re-build. # Currently the resources are only copied on post-build. If one is changed but the domain-server is not, they will # not be re-copied. This is worked-around on OS X/UNIX by using a symlink. From b8da976123b96d13183547f06f75ed4b45172d80 Mon Sep 17 00:00:00 2001 From: Marko Kudjerski Date: Fri, 12 Aug 2016 14:44:46 -0700 Subject: [PATCH 17/21] added Info.plist to Components.app so that macdeployqt from Qt 5.6 doesn't throw a segfault --- cmake/macros/InstallBesideConsole.cmake | 6 ++++ ...MacOSXBundleSandboxComponentsInfo.plist.in | 36 +++++++++++++++++++ 2 files changed, 42 insertions(+) create mode 100644 cmake/templates/MacOSXBundleSandboxComponentsInfo.plist.in diff --git a/cmake/macros/InstallBesideConsole.cmake b/cmake/macros/InstallBesideConsole.cmake index 0eb6025f38..0e1cb3237e 100644 --- a/cmake/macros/InstallBesideConsole.cmake +++ b/cmake/macros/InstallBesideConsole.cmake @@ -59,6 +59,12 @@ macro(install_beside_console) set(EXECUTABLE_NEEDING_FIXUP "\${CMAKE_INSTALL_PREFIX}/${COMPONENT_INSTALL_DIR}/${TARGET_NAME}") string(REPLACE " " "\\ " ESCAPED_EXECUTABLE_NAME ${EXECUTABLE_NEEDING_FIXUP}) + # configure an rc file for the chosen icon + set(MACOSX_BUNDLE_EXECUTABLE_NAME "domain-server") + set(MACOSX_BUNDLE_GUI_IDENTIFIER "com.highfidelity.server-components") + set(MACOSX_BUNDLE_BUNDLE_NAME "Sandbox Components") + configure_file("${HF_CMAKE_DIR}/templates/MacOSXBundleSandboxComponentsInfo.plist.in" "${COMPONENTS_BUNDLE_PATH}/Contents/Info.plist") + install(CODE " execute_process(COMMAND ${MACDEPLOYQT_COMMAND} ${ESCAPED_BUNDLE_NAME} -verbose=2 -executable=${ESCAPED_EXECUTABLE_NAME})" COMPONENT ${SERVER_COMPONENT} diff --git a/cmake/templates/MacOSXBundleSandboxComponentsInfo.plist.in b/cmake/templates/MacOSXBundleSandboxComponentsInfo.plist.in new file mode 100644 index 0000000000..a466dc7c4e --- /dev/null +++ b/cmake/templates/MacOSXBundleSandboxComponentsInfo.plist.in @@ -0,0 +1,36 @@ + + + + + CFBundleDevelopmentRegion + English + CFBundleExecutable + ${MACOSX_BUNDLE_EXECUTABLE_NAME} + CFBundleGetInfoString + ${MACOSX_BUNDLE_INFO_STRING} + CFBundleIconFile + ${MACOSX_BUNDLE_ICON_FILE} + CFBundleIdentifier + ${MACOSX_BUNDLE_GUI_IDENTIFIER} + CFBundleInfoDictionaryVersion + 6.0 + CFBundleLongVersionString + ${MACOSX_BUNDLE_LONG_VERSION_STRING} + CFBundleName + ${MACOSX_BUNDLE_BUNDLE_NAME} + CFBundlePackageType + APPL + CFBundleShortVersionString + ${MACOSX_BUNDLE_SHORT_VERSION_STRING} + CFBundleSignature + ???? + CFBundleVersion + ${MACOSX_BUNDLE_BUNDLE_VERSION} + CSResourcesFileMapped + + LSRequiresCarbon + + NSHumanReadableCopyright + ${MACOSX_BUNDLE_COPYRIGHT} + + From 930afad49c6caa3d678cfda6c706d4c5e0c0c287 Mon Sep 17 00:00:00 2001 From: Marko Kudjerski Date: Fri, 12 Aug 2016 14:48:58 -0700 Subject: [PATCH 18/21] comment fix --- cmake/macros/InstallBesideConsole.cmake | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cmake/macros/InstallBesideConsole.cmake b/cmake/macros/InstallBesideConsole.cmake index 0e1cb3237e..979cc0b412 100644 --- a/cmake/macros/InstallBesideConsole.cmake +++ b/cmake/macros/InstallBesideConsole.cmake @@ -59,7 +59,7 @@ macro(install_beside_console) set(EXECUTABLE_NEEDING_FIXUP "\${CMAKE_INSTALL_PREFIX}/${COMPONENT_INSTALL_DIR}/${TARGET_NAME}") string(REPLACE " " "\\ " ESCAPED_EXECUTABLE_NAME ${EXECUTABLE_NEEDING_FIXUP}) - # configure an rc file for the chosen icon + # configure Info.plist for COMPONENT_APP set(MACOSX_BUNDLE_EXECUTABLE_NAME "domain-server") set(MACOSX_BUNDLE_GUI_IDENTIFIER "com.highfidelity.server-components") set(MACOSX_BUNDLE_BUNDLE_NAME "Sandbox Components") From 62edaf0ec9ae81b0f78d8781a58111814ef50346 Mon Sep 17 00:00:00 2001 From: SamGondelman Date: Fri, 12 Aug 2016 18:37:05 -0700 Subject: [PATCH 19/21] commit for marko to look at later --- cmake/macros/InstallBesideConsole.cmake | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/cmake/macros/InstallBesideConsole.cmake b/cmake/macros/InstallBesideConsole.cmake index 979cc0b412..449fa7631c 100644 --- a/cmake/macros/InstallBesideConsole.cmake +++ b/cmake/macros/InstallBesideConsole.cmake @@ -60,12 +60,11 @@ macro(install_beside_console) string(REPLACE " " "\\ " ESCAPED_EXECUTABLE_NAME ${EXECUTABLE_NEEDING_FIXUP}) # configure Info.plist for COMPONENT_APP - set(MACOSX_BUNDLE_EXECUTABLE_NAME "domain-server") - set(MACOSX_BUNDLE_GUI_IDENTIFIER "com.highfidelity.server-components") - set(MACOSX_BUNDLE_BUNDLE_NAME "Sandbox Components") - configure_file("${HF_CMAKE_DIR}/templates/MacOSXBundleSandboxComponentsInfo.plist.in" "${COMPONENTS_BUNDLE_PATH}/Contents/Info.plist") - install(CODE " + set(MACOSX_BUNDLE_EXECUTABLE_NAME 'domain-server') + set(MACOSX_BUNDLE_GUI_IDENTIFIER 'com.highfidelity.server-components') + set(MACOSX_BUNDLE_BUNDLE_NAME 'Sandbox Components') + configure_file('${HF_CMAKE_DIR}/templates/MacOSXBundleSandboxComponentsInfo.plist.in' '${COMPONENTS_BUNDLE_PATH}/Contents/Info.plist') execute_process(COMMAND ${MACDEPLOYQT_COMMAND} ${ESCAPED_BUNDLE_NAME} -verbose=2 -executable=${ESCAPED_EXECUTABLE_NAME})" COMPONENT ${SERVER_COMPONENT} ) From da5f7912b54d243bc506f3624aef7a49393f118f Mon Sep 17 00:00:00 2001 From: Marko Kudjerski Date: Fri, 19 Aug 2016 16:53:38 -0700 Subject: [PATCH 20/21] fixed Info.plist setup for Components.app --- cmake/macros/InstallBesideConsole.cmake | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/cmake/macros/InstallBesideConsole.cmake b/cmake/macros/InstallBesideConsole.cmake index 449fa7631c..d5777fff12 100644 --- a/cmake/macros/InstallBesideConsole.cmake +++ b/cmake/macros/InstallBesideConsole.cmake @@ -61,10 +61,10 @@ macro(install_beside_console) # configure Info.plist for COMPONENT_APP install(CODE " - set(MACOSX_BUNDLE_EXECUTABLE_NAME 'domain-server') - set(MACOSX_BUNDLE_GUI_IDENTIFIER 'com.highfidelity.server-components') - set(MACOSX_BUNDLE_BUNDLE_NAME 'Sandbox Components') - configure_file('${HF_CMAKE_DIR}/templates/MacOSXBundleSandboxComponentsInfo.plist.in' '${COMPONENTS_BUNDLE_PATH}/Contents/Info.plist') + set(MACOSX_BUNDLE_EXECUTABLE_NAME domain-server) + set(MACOSX_BUNDLE_GUI_IDENTIFIER com.highfidelity.server-components) + set(MACOSX_BUNDLE_BUNDLE_NAME Sandbox\\ Components) + configure_file(${HF_CMAKE_DIR}/templates/MacOSXBundleSandboxComponentsInfo.plist.in ${ESCAPED_BUNDLE_NAME}/Contents/Info.plist) execute_process(COMMAND ${MACDEPLOYQT_COMMAND} ${ESCAPED_BUNDLE_NAME} -verbose=2 -executable=${ESCAPED_EXECUTABLE_NAME})" COMPONENT ${SERVER_COMPONENT} ) From 9d057233c6fe09f01ee3f19979feef53080d9b51 Mon Sep 17 00:00:00 2001 From: Brad Davis Date: Tue, 23 Aug 2016 19:19:15 -0700 Subject: [PATCH 21/21] Fixing rebase --- interface/CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/interface/CMakeLists.txt b/interface/CMakeLists.txt index f999a1a8f2..3e8b55431d 100644 --- a/interface/CMakeLists.txt +++ b/interface/CMakeLists.txt @@ -243,7 +243,7 @@ target_link_libraries( ${TARGET_NAME} Qt5::Gui Qt5::Network Qt5::Multimedia Qt5::OpenGL Qt5::Qml Qt5::Quick Qt5::Script Qt5::Svg - Qt5::WebChannel Qt5::WebEngine Qt5::WebEngineWidgets + Qt5::WebChannel Qt5::WebEngine ) if (UNIX)