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."