diff --git a/hifi_vcpkg.py b/hifi_vcpkg.py index 821d9ae0b7..7bb261faa0 100644 --- a/hifi_vcpkg.py +++ b/hifi_vcpkg.py @@ -134,7 +134,7 @@ endif() downloadVcpkg = True if not downloadVcpkg and not os.path.isfile(self.exe): - print("Missing executable, boostrapping") + print("Missing executable, boot-strapping") downloadVcpkg = True # Make sure we have a vcpkg executable diff --git a/interface/resources/avatar/avatar-animation.json b/interface/resources/avatar/avatar-animation.json index 1c3a603eb5..671e55adf2 100644 --- a/interface/resources/avatar/avatar-animation.json +++ b/interface/resources/avatar/avatar-animation.json @@ -2478,8 +2478,8 @@ { "easingType": "easeInOutQuad", "id": "talk", - "interpDuration": 1, - "interpTarget": 1, + "interpDuration": 20, + "interpTarget": 20, "interpType": "evaluateBoth", "priority": 0.33, "resume": true, @@ -2489,8 +2489,8 @@ { "easingType": "easeInOutQuad", "id": "talk02", - "interpDuration": 1, - "interpTarget": 1, + "interpDuration": 20, + "interpTarget": 20, "interpType": "evaluateBoth", "priority": 0.33, "resume": true, @@ -2500,8 +2500,8 @@ { "easingType": "easeInOutQuad", "id": "talk03", - "interpDuration": 1, - "interpTarget": 1, + "interpDuration": 20, + "interpTarget": 20, "interpType": "evaluateBoth", "priority": 0.33, "resume": true, @@ -2511,8 +2511,8 @@ { "easingType": "easeInOutQuad", "id": "talk04", - "interpDuration": 1, - "interpTarget": 1, + "interpDuration": 20, + "interpTarget": 20, "interpType": "evaluateBoth", "priority": 0.33, "resume": true, @@ -2522,8 +2522,8 @@ { "easingType": "easeInOutQuad", "id": "talk_armsdown", - "interpDuration": 1, - "interpTarget": 1, + "interpDuration": 20, + "interpTarget": 20, "interpType": "evaluateBoth", "priority": 0.33, "resume": true, @@ -2533,8 +2533,8 @@ { "easingType": "easeInOutQuad", "id": "talk_lefthand", - "interpDuration": 1, - "interpTarget": 1, + "interpDuration": 20, + "interpTarget": 20, "interpType": "evaluateBoth", "priority": 0.33, "resume": true, @@ -2544,8 +2544,8 @@ { "easingType": "easeInOutQuad", "id": "talk_righthand", - "interpDuration": 1, - "interpTarget": 1, + "interpDuration": 20, + "interpTarget": 20, "interpType": "evaluateBoth", "priority": 0.33, "resume": true, @@ -5242,62 +5242,6 @@ "interpTarget": 6, "interpType": "evaluateBoth", "transitions": [ - { - "state": "idle", - "var": "isNotInput" - }, - { - "state": "WALKFWD", - "var": "isInputForward" - }, - { - "state": "WALKBWD", - "var": "isInputBackward" - }, - { - "state": "STRAFERIGHT", - "var": "isInputRight" - }, - { - "state": "STRAFELEFT", - "var": "isInputLeft" - }, - { - "state": "turnRight", - "var": "isTurningRight" - }, - { - "state": "turnLeft", - "var": "isTurningLeft" - }, - { - "state": "fly", - "var": "isFlying" - }, - { - "state": "takeoffStand", - "var": "isTakeoffStand" - }, - { - "state": "TAKEOFFRUN", - "var": "isTakeoffRun" - }, - { - "state": "inAirStand", - "var": "isInAirStand" - }, - { - "state": "INAIRRUN", - "var": "isInAirRun" - }, - { - "state": "strafeRightHmd", - "var": "isMovingRightHmd" - }, - { - "state": "strafeLeftHmd", - "var": "isMovingLeftHmd" - }, { "state": "idle", "var": "isNotSeated" diff --git a/interface/resources/qml/Web3DSurface.qml b/interface/resources/qml/Web3DSurface.qml index ff574ceaa5..3340226761 100644 --- a/interface/resources/qml/Web3DSurface.qml +++ b/interface/resources/qml/Web3DSurface.qml @@ -33,6 +33,12 @@ Item { property var item: null function load(url, scriptUrl) { + // Ensure we reset any existing item to "about:blank" to ensure web audio stops: DEV-2375 + if (root.item != null) { + root.item.url = "about:blank" + root.item.destroy() + root.item = null + } QmlSurface.load("./controls/WebView.qml", root, function(newItem) { root.item = newItem root.item.url = url diff --git a/interface/resources/qml/hifi/commerce/purchases/Purchases.qml b/interface/resources/qml/hifi/commerce/purchases/Purchases.qml index 03fbbb178e..85e5211649 100644 --- a/interface/resources/qml/hifi/commerce/purchases/Purchases.qml +++ b/interface/resources/qml/hifi/commerce/purchases/Purchases.qml @@ -580,8 +580,9 @@ Rectangle { sendToScript(msg); } else if (msg.method === "showInvalidatedLightbox") { lightboxPopup.titleText = "Item Invalidated"; - lightboxPopup.bodyText = 'Your item is marked "invalidated" because this item has been suspended ' + - "from the Marketplace due to a claim against its author."; + lightboxPopup.bodyText = 'This item has been invalidated and is no longer available.
' + + 'If you have questions, please contact marketplace@highfidelity.com.
' + + 'Thank you!'; lightboxPopup.button1text = "CLOSE"; lightboxPopup.button1method = function() { lightboxPopup.visible = false; diff --git a/interface/resources/qml/hifi/simplifiedUI/topBar/SimplifiedTopBar.qml b/interface/resources/qml/hifi/simplifiedUI/topBar/SimplifiedTopBar.qml index c92da7e6e5..4919077dc3 100644 --- a/interface/resources/qml/hifi/simplifiedUI/topBar/SimplifiedTopBar.qml +++ b/interface/resources/qml/hifi/simplifiedUI/topBar/SimplifiedTopBar.qml @@ -384,6 +384,7 @@ Rectangle { placeholderTextColor: "#8E8E8E" font.pixelSize: 14 placeholderText: width - leftPadding - rightPadding < goToTextFieldMetrics.width ? shortPlaceholderText : longPlaceholderText + blankPlaceholderTextOnFocus: false clip: true selectByMouse: true autoScroll: true diff --git a/interface/src/Application.cpp b/interface/src/Application.cpp index 421741b0a2..92bc54d43f 100644 --- a/interface/src/Application.cpp +++ b/interface/src/Application.cpp @@ -974,6 +974,7 @@ bool setupEssentials(int& argc, char** argv, bool runningMarkerExisted) { QObject::connect(PlatformHelper::instance(), &PlatformHelper::systemWillWake, [] { QMetaObject::invokeMethod(DependencyManager::get().data(), "noteAwakening", Qt::QueuedConnection); + QMetaObject::invokeMethod(DependencyManager::get().data(), "noteAwakening", Qt::QueuedConnection); }); diff --git a/interface/src/Menu.cpp b/interface/src/Menu.cpp index b66bc9c1c4..5be4db46a0 100644 --- a/interface/src/Menu.cpp +++ b/interface/src/Menu.cpp @@ -640,11 +640,6 @@ Menu::Menu() { } #endif - - // Developer >> Tests >>> - MenuWrapper* testMenu = developerMenu->addMenu("Tests"); - addActionToQMenuAndActionHash(testMenu, MenuOption::RunClientScriptTests, 0, dialogsManager.data(), SLOT(showTestingResults())); - // Developer > Timing >>> MenuWrapper* timingMenu = developerMenu->addMenu("Timing"); MenuWrapper* perfTimerMenu = timingMenu->addMenu("Performance Timer"); diff --git a/interface/src/Menu.h b/interface/src/Menu.h index 0ba1159052..e3080e60aa 100644 --- a/interface/src/Menu.h +++ b/interface/src/Menu.h @@ -178,7 +178,6 @@ namespace MenuOption { const QString ResetAvatarSize = "Reset Avatar Size"; const QString ResetSensors = "Reset Sensors"; const QString RunningScripts = "Running Scripts..."; - const QString RunClientScriptTests = "Run Client Script Tests"; const QString RunTimingTests = "Run Timing Tests"; const QString ScriptedMotorControl = "Enable Scripted Motor Control"; const QString ShowTrackedObjects = "Show Tracked Objects"; diff --git a/interface/src/ui/DialogsManager.cpp b/interface/src/ui/DialogsManager.cpp index e34b82e0a1..0a655de5e5 100644 --- a/interface/src/ui/DialogsManager.cpp +++ b/interface/src/ui/DialogsManager.cpp @@ -186,15 +186,6 @@ void DialogsManager::setAddressBarVisible(bool addressBarVisible) { emit addressBarShown(_addressBarVisible); } -void DialogsManager::showTestingResults() { - if (!_testingDialog) { - _testingDialog = new TestingDialog(qApp->getWindow()); - connect(_testingDialog, SIGNAL(closed()), _testingDialog, SLOT(deleteLater())); - } - _testingDialog->show(); - _testingDialog->raise(); -} - void DialogsManager::showDomainConnectionDialog() { // if the dialog already exists we delete it so the connection data is refreshed if (_domainConnectionDialog) { diff --git a/interface/src/ui/DialogsManager.h b/interface/src/ui/DialogsManager.h index b11264444b..949c86c240 100644 --- a/interface/src/ui/DialogsManager.h +++ b/interface/src/ui/DialogsManager.h @@ -53,7 +53,6 @@ public slots: void lodTools(); void hmdTools(bool showTools); void showDomainConnectionDialog(); - void showTestingResults(); void toggleAddressBar(); // Application Update diff --git a/libraries/audio-client/src/AudioClient.cpp b/libraries/audio-client/src/AudioClient.cpp index 5e1f285a6c..d29045c99b 100644 --- a/libraries/audio-client/src/AudioClient.cpp +++ b/libraries/audio-client/src/AudioClient.cpp @@ -1998,6 +1998,12 @@ void AudioClient::outputNotify() { } } +void AudioClient::noteAwakening() { + qCDebug(audioclient) << "Restarting the audio devices."; + switchInputToAudioDevice(_inputDeviceInfo); + switchOutputToAudioDevice(_outputDeviceInfo); +} + bool AudioClient::switchOutputToAudioDevice(const HifiAudioDeviceInfo outputDeviceInfo, bool isShutdownRequest) { Q_ASSERT_X(QThread::currentThread() == thread(), Q_FUNC_INFO, "Function invoked on wrong thread"); diff --git a/libraries/audio-client/src/AudioClient.h b/libraries/audio-client/src/AudioClient.h index 28a4f23968..b4ddb1018e 100644 --- a/libraries/audio-client/src/AudioClient.h +++ b/libraries/audio-client/src/AudioClient.h @@ -255,6 +255,7 @@ public slots: void setOutputGain(float gain) { _outputGain = gain; }; void outputNotify(); + void noteAwakening(); void loadSettings(); void saveSettings(); diff --git a/libraries/networking/src/AccountManager.cpp b/libraries/networking/src/AccountManager.cpp index 5edbc5261d..5473f1a010 100644 --- a/libraries/networking/src/AccountManager.cpp +++ b/libraries/networking/src/AccountManager.cpp @@ -808,6 +808,8 @@ void AccountManager::requestAccountSettings() { return; } + qCDebug(networking) << "Requesting the Account Settings from the Metaverse API"; + QNetworkAccessManager& networkAccessManager = NetworkAccessManager::getInstance(); QUrl lockerURL = _authURL; @@ -834,6 +836,9 @@ void AccountManager::requestAccountSettingsFinished() { if (rootObject.contains("status") && rootObject["status"].toString() == "success") { if (rootObject.contains("data") && rootObject["data"].isObject()) { _settings.unpack(rootObject["data"].toObject()); + _lastSuccessfulSyncTimestamp = _settings.lastChangeTimestamp(); + + qCDebug(networking) << "Received the Account Settings from the Metaverse API"; emit accountSettingsLoaded(); } else { @@ -874,6 +879,8 @@ void AccountManager::postAccountSettings() { return; } + qCDebug(networking) << "Account Settings have changed, pushing them to the Metaverse API"; + QNetworkAccessManager& networkAccessManager = NetworkAccessManager::getInstance(); QUrl lockerURL = _authURL; diff --git a/libraries/ui/src/ui/ToolbarScriptingInterface.h b/libraries/ui/src/ui/ToolbarScriptingInterface.h index 952d3cce95..3d38aa296b 100644 --- a/libraries/ui/src/ui/ToolbarScriptingInterface.h +++ b/libraries/ui/src/ui/ToolbarScriptingInterface.h @@ -92,15 +92,19 @@ public: ToolbarProxy(QObject* qmlObject, QObject* parent = nullptr); /**jsdoc + * Currently doesn't work. * @function ToolbarProxy#addButton - * @param {object} properties - * @returns {ToolbarButtonProxy} + * @param {object} properties - Button properties + * @returns {object} The button added. + * @deprecated This method is deprecated and will be removed. */ Q_INVOKABLE ToolbarButtonProxy* addButton(const QVariant& properties); /**jsdoc + * Currently doesn't work. * @function ToolbarProxy#removeButton - * @param {string} name + * @param {string} name - Button name. + * @deprecated This method is deprecated and will be removed. */ Q_INVOKABLE void removeButton(const QVariant& name); diff --git a/scripts/developer/tests/toolbarTest.js b/scripts/developer/tests/toolbarTest.js index 89609e610d..9e82f814ac 100644 --- a/scripts/developer/tests/toolbarTest.js +++ b/scripts/developer/tests/toolbarTest.js @@ -1,117 +1,38 @@ -var isActive = false; +(function () { -var toolBar = (function() { - var that = {}, - toolBar, - activeButton, - newModelButton, - newShapeButton, - newLightButton, - newTextButton, - newWebButton, - newZoneButton, - newParticleButton, - newMaterialButton - - var toolIconUrl = Script.resolvePath("../../system/assets/images/tools/"); - - function initialize() { - print("Toolbars: " + Toolbars); - toolBar = Toolbars.getToolbar("highfidelity.edit.toolbar"); - print("Toolbar: " + toolBar); - activeButton = toolBar.addButton({ - objectName: "activeButton", - imageURL: toolIconUrl + "edit-01.svg", - visible: true, - alpha: 0.9, - }); - - print("Button " + activeButton); - print("Button signal " + activeButton.clicked); - activeButton.clicked.connect(function(){ - print("Clicked on button " + isActive); - that.setActive(!isActive); - }); - - newModelButton = toolBar.addButton({ - objectName: "newModelButton", - imageURL: toolIconUrl + "model-01.svg", - alpha: 0.9, - visible: false - }); - - newShapeButton = toolBar.addButton({ - objectName: "newShapeButton", - imageURL: toolIconUrl + "cube-01.svg", - alpha: 0.9, - visible: false - }); - - newLightButton = toolBar.addButton({ - objectName: "newLightButton", - imageURL: toolIconUrl + "light-01.svg", - alpha: 0.9, - visible: false - }); - - newTextButton = toolBar.addButton({ - objectName: "newTextButton", - imageURL: toolIconUrl + "text-01.svg", - alpha: 0.9, - visible: false - }); - - newWebButton = toolBar.addButton({ - objectName: "newWebButton", - imageURL: toolIconUrl + "web-01.svg", - alpha: 0.9, - visible: false - }); - - newZoneButton = toolBar.addButton({ - objectName: "newZoneButton", - imageURL: toolIconUrl + "zone-01.svg", - alpha: 0.9, - visible: false - }); - - newParticleButton = toolBar.addButton({ - objectName: "newParticleButton", - imageURL: toolIconUrl + "particle-01.svg", - alpha: 0.9, - visible: false - }); - - newMaterialButton = toolBar.addButton({ - objectName: "newMaterialButton", - imageURL: toolIconUrl + "material-01.svg", - alpha: 0.9, - visible: false - }); - - that.setActive(false); - newModelButton.clicked(); + // Get the system toolbar. + var toolbar = Toolbars.getToolbar("com.highfidelity.interface.toolbar.system"); + if (!toolbar) { + print("ERROR: Couldn't get system toolbar."); + return; } - that.setActive = function(active) { - if (active != isActive) { - isActive = active; - that.showTools(isActive); - } - }; + Script.setTimeout(function () { + // Report the system toolbar visibility. + var isToolbarVisible = toolbar.readProperty("visible"); + print("Toolbar visible: " + isToolbarVisible); - // Sets visibility of tool buttons, excluding the power button - that.showTools = function(doShow) { - newModelButton.writeProperty('visible', doShow); - newShapeButton.writeProperty('visible', doShow); - newLightButton.writeProperty('visible', doShow); - newTextButton.writeProperty('visible', doShow); - newWebButton.writeProperty('visible', doShow); - newZoneButton.writeProperty('visible', doShow); - newParticleButton.writeProperty('visible', doShow); - newMaterialButton.writeProperty('visible', doShow); - }; + // Briefly toggle the system toolbar visibility. + print("Toggle toolbar"); + toolbar.writeProperty("visible", !isToolbarVisible); + Script.setTimeout(function () { + print("Toggle toolbar"); + toolbar.writeProperty("visible", isToolbarVisible); + }, 2000); + }, 2000); + + Script.setTimeout(function () { + // Report the system toolbar visibility alternative method. + isToolbarVisible = toolbar.readProperties(["visible"]).visible; + print("Toolbar visible: " + isToolbarVisible); + + // Briefly toggle the system toolbar visibility. + print("Toggle toolbar"); + toolbar.writeProperties({ visible: !isToolbarVisible }); + Script.setTimeout(function () { + print("Toggle toolbar"); + toolbar.writeProperties({ visible: isToolbarVisible }); + }, 2000); + }, 6000); - initialize(); - return that; }()); diff --git a/scripts/simplifiedUI/ui/simplifiedUI.js b/scripts/simplifiedUI/ui/simplifiedUI.js index 1154e386ea..3c14fdb1d2 100644 --- a/scripts/simplifiedUI/ui/simplifiedUI.js +++ b/scripts/simplifiedUI/ui/simplifiedUI.js @@ -160,6 +160,7 @@ var SETTINGS_APP_WINDOW_FLAGS = 0x00000001 | // Qt::Window 0x08000000 | // Qt::WindowCloseButtonHint 0x00008000 | // Qt::WindowMaximizeButtonHint 0x00004000; // Qt::WindowMinimizeButtonHint +var SETTINGS_APP_RIGHT_MARGIN = 48; var settingsAppWindow = false; function toggleSettingsApp() { if (settingsAppWindow) { @@ -179,7 +180,7 @@ function toggleSettingsApp() { y: SETTINGS_APP_HEIGHT_PX }, position: { - x: Math.max(Window.x + POPOUT_SAFE_MARGIN_X, Window.x + Window.innerWidth / 2 - SETTINGS_APP_WIDTH_PX / 2), + x: Window.x + Window.innerWidth - SETTINGS_APP_WIDTH_PX - SETTINGS_APP_RIGHT_MARGIN, y: Math.max(Window.y + POPOUT_SAFE_MARGIN_Y, Window.y + Window.innerHeight / 2 - SETTINGS_APP_HEIGHT_PX / 2) }, overrideFlags: SETTINGS_APP_WINDOW_FLAGS diff --git a/scripts/system/create/assets/data/createAppTooltips.json b/scripts/system/create/assets/data/createAppTooltips.json index cda6fc9be0..24f443f901 100644 --- a/scripts/system/create/assets/data/createAppTooltips.json +++ b/scripts/system/create/assets/data/createAppTooltips.json @@ -76,7 +76,7 @@ "tooltip": "The angle in deg at which light emits. Starts in the entity's -z direction, and rotates around its x axis." }, "keyLight.castShadows": { - "tooltip": "If enabled, shadows are cast. The entity or avatar casting the shadow must also have Cast Shadows enabled." + "tooltip": "If enabled, shadows are cast. The entity or avatar casting the shadow must also have Cast Shadows enabled. Note: Shadows are rendered only on high-profiled computers. This setting will have no effect on computers profiled to medium or low graphics." }, "keyLight.shadowBias": { "tooltip": "The bias of the shadows cast by the light. Use this to fine-tune your shadows to your scene to prevent shadow acne and peter panning." @@ -500,7 +500,7 @@ "tooltip": "If enabled, grabbed entities will follow the movements of your hand controller instead of your avatar's hand." }, "canCastShadow": { - "tooltip": "If enabled, this geometry of this entity casts shadows when a shadow-casting light source shines on it." + "tooltip": "If enabled, the geometry of this entity casts shadows when a shadow-casting light source shines on it. Note: Shadows are rendered only on high-profiled computers. This setting will have no effect on computers profiled to medium or low graphics.." }, "ignorePickIntersection": { "tooltip": "If enabled, this entity will not be considered for ray picks, and will also not occlude other entities when picking."