mirror of
https://github.com/overte-org/overte.git
synced 2025-08-09 08:21:24 +02:00
Merge branch 'master' of https://github.com/highfidelity/hifi into sit_variants_and_fidgets
This commit is contained in:
commit
5cfa1cb5ba
12 changed files with 61 additions and 37 deletions
|
@ -38,7 +38,7 @@ MixerAvatar::MixerAvatar() {
|
||||||
_pendingEvent = false;
|
_pendingEvent = false;
|
||||||
_verifyState = verificationFailed;
|
_verifyState = verificationFailed;
|
||||||
_needsIdentityUpdate = true;
|
_needsIdentityUpdate = true;
|
||||||
qCDebug(avatars) << "Dynamic verification TIMED-OUT for " << getDisplayName() << getSessionUUID();
|
qCDebug(avatars) << "Dynamic verification TIMED-OUT for" << getDisplayName() << getSessionUUID();
|
||||||
} else {
|
} else {
|
||||||
qCDebug(avatars) << "Ignoring timeout of avatar challenge";
|
qCDebug(avatars) << "Ignoring timeout of avatar challenge";
|
||||||
}
|
}
|
||||||
|
@ -287,7 +287,7 @@ void MixerAvatar::processCertifyEvents() {
|
||||||
<< ":" << _dynamicMarketResponse;
|
<< ":" << _dynamicMarketResponse;
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
qCDebug(avatars) << "Get owner status failed for " << getDisplayName() << _marketplaceIdFromURL <<
|
qCDebug(avatars) << "Get owner status failed for" << getDisplayName() << _marketplaceIdFromURL <<
|
||||||
"message:" << responseJson["message"].toString();
|
"message:" << responseJson["message"].toString();
|
||||||
_verifyState = error;
|
_verifyState = error;
|
||||||
}
|
}
|
||||||
|
@ -356,7 +356,7 @@ void MixerAvatar::processChallengeResponse(ReceivedMessage& response) {
|
||||||
_verifyState = challengeResult ? verificationSucceeded : verificationFailed;
|
_verifyState = challengeResult ? verificationSucceeded : verificationFailed;
|
||||||
_needsIdentityUpdate = true;
|
_needsIdentityUpdate = true;
|
||||||
if (_verifyState == verificationFailed) {
|
if (_verifyState == verificationFailed) {
|
||||||
qCDebug(avatars) << "Dynamic verification FAILED for " << getDisplayName() << getSessionUUID();
|
qCDebug(avatars) << "Dynamic verification FAILED for" << getDisplayName() << getSessionUUID();
|
||||||
} else {
|
} else {
|
||||||
qCDebug(avatars) << "Dynamic verification SUCCEEDED for" << getDisplayName() << getSessionUUID();
|
qCDebug(avatars) << "Dynamic verification SUCCEEDED for" << getDisplayName() << getSessionUUID();
|
||||||
}
|
}
|
||||||
|
|
|
@ -20,7 +20,7 @@ macro(SETUP_HIFI_LIBRARY)
|
||||||
foreach(SRC ${AVX_SRCS})
|
foreach(SRC ${AVX_SRCS})
|
||||||
if (WIN32)
|
if (WIN32)
|
||||||
set_source_files_properties(${SRC} PROPERTIES COMPILE_FLAGS /arch:AVX)
|
set_source_files_properties(${SRC} PROPERTIES COMPILE_FLAGS /arch:AVX)
|
||||||
elseif (APPLE OR UNIX)
|
elseif (APPLE OR (UNIX AND NOT ANDROID))
|
||||||
set_source_files_properties(${SRC} PROPERTIES COMPILE_FLAGS -mavx)
|
set_source_files_properties(${SRC} PROPERTIES COMPILE_FLAGS -mavx)
|
||||||
endif()
|
endif()
|
||||||
endforeach()
|
endforeach()
|
||||||
|
@ -30,7 +30,7 @@ macro(SETUP_HIFI_LIBRARY)
|
||||||
foreach(SRC ${AVX2_SRCS})
|
foreach(SRC ${AVX2_SRCS})
|
||||||
if (WIN32)
|
if (WIN32)
|
||||||
set_source_files_properties(${SRC} PROPERTIES COMPILE_FLAGS /arch:AVX2)
|
set_source_files_properties(${SRC} PROPERTIES COMPILE_FLAGS /arch:AVX2)
|
||||||
elseif (APPLE OR UNIX)
|
elseif (APPLE OR (UNIX AND NOT ANDROID))
|
||||||
set_source_files_properties(${SRC} PROPERTIES COMPILE_FLAGS "-mavx2 -mfma")
|
set_source_files_properties(${SRC} PROPERTIES COMPILE_FLAGS "-mavx2 -mfma")
|
||||||
endif()
|
endif()
|
||||||
endforeach()
|
endforeach()
|
||||||
|
@ -44,7 +44,7 @@ macro(SETUP_HIFI_LIBRARY)
|
||||||
if (COMPILER_SUPPORTS_AVX512)
|
if (COMPILER_SUPPORTS_AVX512)
|
||||||
set_source_files_properties(${SRC} PROPERTIES COMPILE_FLAGS /arch:AVX512)
|
set_source_files_properties(${SRC} PROPERTIES COMPILE_FLAGS /arch:AVX512)
|
||||||
endif()
|
endif()
|
||||||
elseif (APPLE OR UNIX)
|
elseif (APPLE OR (UNIX AND NOT ANDROID))
|
||||||
check_cxx_compiler_flag("-mavx512f" COMPILER_SUPPORTS_AVX512)
|
check_cxx_compiler_flag("-mavx512f" COMPILER_SUPPORTS_AVX512)
|
||||||
if (COMPILER_SUPPORTS_AVX512)
|
if (COMPILER_SUPPORTS_AVX512)
|
||||||
set_source_files_properties(${SRC} PROPERTIES COMPILE_FLAGS -mavx512f)
|
set_source_files_properties(${SRC} PROPERTIES COMPILE_FLAGS -mavx512f)
|
||||||
|
|
|
@ -250,14 +250,14 @@ $(document).ready(function(){
|
||||||
|
|
||||||
// set focus to the first input in the new row
|
// set focus to the first input in the new row
|
||||||
$target.closest('table').find('tr.inputs input:first').focus();
|
$target.closest('table').find('tr.inputs input:first').focus();
|
||||||
}
|
} else {
|
||||||
|
var tableRows = sibling.parent();
|
||||||
|
var tableBody = tableRows.parent();
|
||||||
|
|
||||||
var tableRows = sibling.parent();
|
// if theres no more siblings, we should jump to a new row
|
||||||
var tableBody = tableRows.parent();
|
if (sibling.next().length == 0 && tableRows.nextAll().length == 1) {
|
||||||
|
tableBody.find("." + Settings.ADD_ROW_BUTTON_CLASS).click();
|
||||||
// if theres no more siblings, we should jump to a new row
|
}
|
||||||
if (sibling.next().length == 0 && tableRows.nextAll().length == 1) {
|
|
||||||
tableBody.find("." + Settings.ADD_ROW_BUTTON_CLASS).click();
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -4,7 +4,7 @@
|
||||||
{ "from": "Keyboard.A", "when": ["Keyboard.RightMouseButton", "!Keyboard.Control"], "to": "Actions.LATERAL_LEFT" },
|
{ "from": "Keyboard.A", "when": ["Keyboard.RightMouseButton", "!Keyboard.Control"], "to": "Actions.LATERAL_LEFT" },
|
||||||
{ "from": "Keyboard.D", "when": ["Keyboard.RightMouseButton", "!Keyboard.Control"], "to": "Actions.LATERAL_RIGHT" },
|
{ "from": "Keyboard.D", "when": ["Keyboard.RightMouseButton", "!Keyboard.Control"], "to": "Actions.LATERAL_RIGHT" },
|
||||||
{ "from": "Keyboard.E", "when": ["!Application.CameraSelfie", "!Application.CameraLookAt", "!Keyboard.Control"], "to": "Actions.LATERAL_RIGHT" },
|
{ "from": "Keyboard.E", "when": ["!Application.CameraSelfie", "!Application.CameraLookAt", "!Keyboard.Control"], "to": "Actions.LATERAL_RIGHT" },
|
||||||
{ "from": "Keyboard.Q", "when": ["!Application.CameraSelfie"," !Application.CameraLookAt", "!Keyboard.Control"], "to": "Actions.LATERAL_LEFT" },
|
{ "from": "Keyboard.Q", "when": ["!Application.CameraSelfie", "!Application.CameraLookAt", "!Keyboard.Control"], "to": "Actions.LATERAL_LEFT" },
|
||||||
{ "from": "Keyboard.T", "when": "!Keyboard.Control", "to": "Actions.TogglePushToTalk" },
|
{ "from": "Keyboard.T", "when": "!Keyboard.Control", "to": "Actions.TogglePushToTalk" },
|
||||||
|
|
||||||
{ "comment" : "Mouse turn need to be small continuous increments",
|
{ "comment" : "Mouse turn need to be small continuous increments",
|
||||||
|
@ -198,7 +198,7 @@
|
||||||
"to": "Actions.DeltaPitch",
|
"to": "Actions.DeltaPitch",
|
||||||
"filters":
|
"filters":
|
||||||
[
|
[
|
||||||
{ "type": "scale", "scale": 0.3 }
|
{ "type": "scale", "scale": 0.2 }
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
|
|
||||||
|
@ -207,7 +207,7 @@
|
||||||
"to": "Actions.DeltaPitch",
|
"to": "Actions.DeltaPitch",
|
||||||
"filters":
|
"filters":
|
||||||
[
|
[
|
||||||
{ "type": "scale", "scale": 0.3 }
|
{ "type": "scale", "scale": 0.2 }
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
|
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
import QtQuick 2.0
|
import QtQuick 2.0
|
||||||
import QtWebEngine 1.5
|
import QtWebEngine 1.5
|
||||||
import "../../controls" as Controls
|
import "../../../controls" as Controls
|
||||||
|
|
||||||
Controls.TabletWebView {
|
Controls.TabletWebView {
|
||||||
profile: WebEngineProfile { httpUserAgent: "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.90 Safari/537.36"}
|
profile: WebEngineProfile { httpUserAgent: "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.90 Safari/537.36"}
|
||||||
|
|
|
@ -2709,7 +2709,11 @@ void MyAvatar::updateMotors() {
|
||||||
if (_motionBehaviors & AVATAR_MOTION_ACTION_MOTOR_ENABLED) {
|
if (_motionBehaviors & AVATAR_MOTION_ACTION_MOTOR_ENABLED) {
|
||||||
if (_characterController.getState() == CharacterController::State::Hover ||
|
if (_characterController.getState() == CharacterController::State::Hover ||
|
||||||
_characterController.computeCollisionMask() == BULLET_COLLISION_MASK_COLLISIONLESS) {
|
_characterController.computeCollisionMask() == BULLET_COLLISION_MASK_COLLISIONLESS) {
|
||||||
motorRotation = getMyHead()->getHeadOrientation();
|
if (qApp->getCamera().getMode() == CAMERA_MODE_LOOK_AT || qApp->getCamera().getMode() == CAMERA_MODE_SELFIE) {
|
||||||
|
motorRotation = getLookAtRotation();
|
||||||
|
} else {
|
||||||
|
motorRotation = getMyHead()->getHeadOrientation();
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
// non-hovering = walking: follow camera twist about vertical but not lift
|
// non-hovering = walking: follow camera twist about vertical but not lift
|
||||||
// we decompose camera's rotation and store the twist part in motorRotation
|
// we decompose camera's rotation and store the twist part in motorRotation
|
||||||
|
@ -3632,8 +3636,7 @@ void MyAvatar::updateOrientation(float deltaTime) {
|
||||||
glm::vec3 targetPoint = eyesPosition + glm::normalize(cameraVector);
|
glm::vec3 targetPoint = eyesPosition + glm::normalize(cameraVector);
|
||||||
|
|
||||||
const float LOOKAT_MIX_ALPHA = 0.25f;
|
const float LOOKAT_MIX_ALPHA = 0.25f;
|
||||||
|
if (!isFlying() || !hasDriveInput()) {
|
||||||
if (getDriveKey(TRANSLATE_Y) == 0.0f) {
|
|
||||||
// Approximate the head's look at vector to the camera look at vector with some delay.
|
// Approximate the head's look at vector to the camera look at vector with some delay.
|
||||||
float mixAlpha = LOOKAT_MIX_ALPHA * timeScale;
|
float mixAlpha = LOOKAT_MIX_ALPHA * timeScale;
|
||||||
if (mixAlpha > 1.0f) {
|
if (mixAlpha > 1.0f) {
|
||||||
|
|
|
@ -269,7 +269,7 @@ bool Connection::processReceivedSequenceNumber(SequenceNumber sequenceNumber, in
|
||||||
bool wasDuplicate = false;
|
bool wasDuplicate = false;
|
||||||
|
|
||||||
if (sequenceNumber > _lastReceivedSequenceNumber) {
|
if (sequenceNumber > _lastReceivedSequenceNumber) {
|
||||||
// Update largest recieved sequence number
|
// Update largest received sequence number
|
||||||
_lastReceivedSequenceNumber = sequenceNumber;
|
_lastReceivedSequenceNumber = sequenceNumber;
|
||||||
} else {
|
} else {
|
||||||
// Otherwise, it could be a resend, try and remove it from the loss list
|
// Otherwise, it could be a resend, try and remove it from the loss list
|
||||||
|
@ -312,9 +312,7 @@ void Connection::processControl(ControlPacketPointer controlPacket) {
|
||||||
// We're already in a state where we've received a handshake ack, so we are likely in a state
|
// We're already in a state where we've received a handshake ack, so we are likely in a state
|
||||||
// where the other end expired our connection. Let's reset.
|
// where the other end expired our connection. Let's reset.
|
||||||
|
|
||||||
#ifdef UDT_CONNECTION_DEBUG
|
qCDebug(networking) << "Got HandshakeRequest from" << _destination << "while active, stopping SendQueue";
|
||||||
qCDebug(networking) << "Got HandshakeRequest from" << _destination << ", stopping SendQueue";
|
|
||||||
#endif
|
|
||||||
_hasReceivedHandshakeACK = false;
|
_hasReceivedHandshakeACK = false;
|
||||||
stopSendQueue();
|
stopSendQueue();
|
||||||
}
|
}
|
||||||
|
@ -333,7 +331,7 @@ void Connection::processACK(ControlPacketPointer controlPacket) {
|
||||||
// validate that this isn't a BS ACK
|
// validate that this isn't a BS ACK
|
||||||
if (ack > getSendQueue().getCurrentSequenceNumber()) {
|
if (ack > getSendQueue().getCurrentSequenceNumber()) {
|
||||||
// in UDT they specifically break the connection here - do we want to do anything?
|
// in UDT they specifically break the connection here - do we want to do anything?
|
||||||
Q_ASSERT_X(false, "Connection::processACK", "ACK recieved higher than largest sent sequence number");
|
Q_ASSERT_X(false, "Connection::processACK", "ACK received higher than largest sent sequence number");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -73,6 +73,7 @@ public:
|
||||||
void setMaxBandwidth(int maxBandwidth);
|
void setMaxBandwidth(int maxBandwidth);
|
||||||
|
|
||||||
void sendHandshakeRequest();
|
void sendHandshakeRequest();
|
||||||
|
bool hasReceivedHandshake() const { return _hasReceivedHandshake; }
|
||||||
|
|
||||||
void recordSentUnreliablePackets(int wireSize, int payloadSize);
|
void recordSentUnreliablePackets(int wireSize, int payloadSize);
|
||||||
void recordReceivedUnreliablePackets(int wireSize, int payloadSize);
|
void recordReceivedUnreliablePackets(int wireSize, int payloadSize);
|
||||||
|
|
|
@ -239,15 +239,24 @@ qint64 Socket::writeDatagram(const QByteArray& datagram, const HifiSockAddr& soc
|
||||||
int pending = _udpSocket.bytesToWrite();
|
int pending = _udpSocket.bytesToWrite();
|
||||||
if (bytesWritten < 0 || pending) {
|
if (bytesWritten < 0 || pending) {
|
||||||
int wsaError = 0;
|
int wsaError = 0;
|
||||||
|
static std::atomic<int> previousWsaError (0);
|
||||||
#ifdef WIN32
|
#ifdef WIN32
|
||||||
wsaError = WSAGetLastError();
|
wsaError = WSAGetLastError();
|
||||||
#endif
|
#endif
|
||||||
qCDebug(networking) << "udt::writeDatagram (" << _udpSocket.state() << sockAddr << ") error - " << wsaError << _udpSocket.error() << "(" << _udpSocket.errorString() << ")"
|
QString errorString;
|
||||||
|
QDebug(&errorString) << "udt::writeDatagram (" << _udpSocket.state() << sockAddr << ") error - "
|
||||||
|
<< wsaError << _udpSocket.error() << "(" << _udpSocket.errorString() << ")"
|
||||||
<< (pending ? "pending bytes:" : "pending:") << pending;
|
<< (pending ? "pending bytes:" : "pending:") << pending;
|
||||||
|
|
||||||
|
if (previousWsaError.exchange(wsaError) != wsaError) {
|
||||||
|
qCDebug(networking).noquote() << errorString;
|
||||||
#ifdef DEBUG_EVENT_QUEUE
|
#ifdef DEBUG_EVENT_QUEUE
|
||||||
int nodeListQueueSize = ::hifi::qt::getEventQueueSize(thread());
|
int nodeListQueueSize = ::hifi::qt::getEventQueueSize(thread());
|
||||||
qCDebug(networking) << "Networking queue size - " << nodeListQueueSize << "writing datagram to" << sockAddr;
|
qCDebug(networking) << "Networking queue size - " << nodeListQueueSize << "writing datagram to" << sockAddr;
|
||||||
#endif // DEBUG_EVENT_QUEUE
|
#endif // DEBUG_EVENT_QUEUE
|
||||||
|
} else {
|
||||||
|
HIFI_FCDEBUG(networking(), errorString.toLatin1().constData());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return bytesWritten;
|
return bytesWritten;
|
||||||
|
@ -525,16 +534,25 @@ std::vector<HifiSockAddr> Socket::getConnectionSockAddrs() {
|
||||||
|
|
||||||
void Socket::handleSocketError(QAbstractSocket::SocketError socketError) {
|
void Socket::handleSocketError(QAbstractSocket::SocketError socketError) {
|
||||||
int wsaError = 0;
|
int wsaError = 0;
|
||||||
|
static std::atomic<int> previousWsaError(0);
|
||||||
#ifdef WIN32
|
#ifdef WIN32
|
||||||
wsaError = WSAGetLastError();
|
wsaError = WSAGetLastError();
|
||||||
#endif
|
#endif
|
||||||
int pending = _udpSocket.bytesToWrite();
|
int pending = _udpSocket.bytesToWrite();
|
||||||
qCDebug(networking) << "udt::Socket (" << _udpSocket.state() << ") error - " << wsaError << socketError << "(" << _udpSocket.errorString() << ")"
|
QString errorString;
|
||||||
<< (pending ? "pending bytes:" : "pending:") << pending;
|
QDebug(&errorString) << "udt::Socket (" << _udpSocket.state() << ") error - " << wsaError << socketError <<
|
||||||
|
"(" << _udpSocket.errorString() << ")" << (pending ? "pending bytes:" : "pending:")
|
||||||
|
<< pending;
|
||||||
|
|
||||||
|
if (previousWsaError.exchange(wsaError) != wsaError) {
|
||||||
|
qCDebug(networking).noquote() << errorString;
|
||||||
#ifdef DEBUG_EVENT_QUEUE
|
#ifdef DEBUG_EVENT_QUEUE
|
||||||
int nodeListQueueSize = ::hifi::qt::getEventQueueSize(thread());
|
int nodeListQueueSize = ::hifi::qt::getEventQueueSize(thread());
|
||||||
qCDebug(networking) << "Networking queue size - " << nodeListQueueSize;
|
qCDebug(networking) << "Networking queue size - " << nodeListQueueSize;
|
||||||
#endif // DEBUG_EVENT_QUEUE
|
#endif // DEBUG_EVENT_QUEUE
|
||||||
|
} else {
|
||||||
|
HIFI_FCDEBUG(networking(), errorString.toLatin1().constData());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void Socket::handleStateChanged(QAbstractSocket::SocketState socketState) {
|
void Socket::handleStateChanged(QAbstractSocket::SocketState socketState) {
|
||||||
|
@ -548,12 +566,14 @@ void Socket::handleRemoteAddressChange(HifiSockAddr previousAddress, HifiSockAdd
|
||||||
Lock connectionsLock(_connectionsHashMutex);
|
Lock connectionsLock(_connectionsHashMutex);
|
||||||
|
|
||||||
const auto connectionIter = _connectionsHash.find(previousAddress);
|
const auto connectionIter = _connectionsHash.find(previousAddress);
|
||||||
if (connectionIter != _connectionsHash.end()) {
|
// Don't move classes that are unused so far.
|
||||||
|
if (connectionIter != _connectionsHash.end() && connectionIter->second->hasReceivedHandshake()) {
|
||||||
auto connection = move(connectionIter->second);
|
auto connection = move(connectionIter->second);
|
||||||
_connectionsHash.erase(connectionIter);
|
_connectionsHash.erase(connectionIter);
|
||||||
connection->setDestinationAddress(currentAddress);
|
connection->setDestinationAddress(currentAddress);
|
||||||
_connectionsHash[currentAddress] = move(connection);
|
_connectionsHash[currentAddress] = move(connection);
|
||||||
connectionsLock.unlock();
|
connectionsLock.unlock();
|
||||||
|
qCDebug(networking) << "Moved Connection class from" << previousAddress << "to" << currentAddress;
|
||||||
|
|
||||||
Lock sequenceNumbersLock(_unreliableSequenceNumbersMutex);
|
Lock sequenceNumbersLock(_unreliableSequenceNumbersMutex);
|
||||||
const auto sequenceNumbersIter = _unreliableSequenceNumbers.find(previousAddress);
|
const auto sequenceNumbersIter = _unreliableSequenceNumbers.find(previousAddress);
|
||||||
|
|
|
@ -75,7 +75,8 @@ void PhysicalEntitySimulation::removeEntityInternal(EntityItemPointer entity) {
|
||||||
if (motionState) {
|
if (motionState) {
|
||||||
removeOwnershipData(motionState);
|
removeOwnershipData(motionState);
|
||||||
_entitiesToRemoveFromPhysics.insert(entity);
|
_entitiesToRemoveFromPhysics.insert(entity);
|
||||||
} else if (entity->isDead() && entity->getElement()) {
|
}
|
||||||
|
if (entity->isDead() && entity->getElement()) {
|
||||||
_deadEntities.insert(entity);
|
_deadEntities.insert(entity);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -279,6 +279,7 @@ public:
|
||||||
* @param {string} [injectedJavaScriptUrl=""] - The URL of JavaScript to inject into the web page.
|
* @param {string} [injectedJavaScriptUrl=""] - The URL of JavaScript to inject into the web page.
|
||||||
* @param {boolean} [loadOtherBase=false] - If <code>true</code>, the web page or app is displayed in a frame with "back"
|
* @param {boolean} [loadOtherBase=false] - If <code>true</code>, the web page or app is displayed in a frame with "back"
|
||||||
* and "close" buttons.
|
* and "close" buttons.
|
||||||
|
* <p class="important">Deprecated: This parameter is deprecated and will be removed.</p>
|
||||||
*/
|
*/
|
||||||
Q_INVOKABLE void gotoWebScreen(const QString& url);
|
Q_INVOKABLE void gotoWebScreen(const QString& url);
|
||||||
Q_INVOKABLE void gotoWebScreen(const QString& url, const QString& injectedJavaScriptUrl, bool loadOtherBase = false);
|
Q_INVOKABLE void gotoWebScreen(const QString& url, const QString& injectedJavaScriptUrl, bool loadOtherBase = false);
|
||||||
|
|
|
@ -35,7 +35,7 @@
|
||||||
|
|
||||||
function onClicked() {
|
function onClicked() {
|
||||||
if (!shown) {
|
if (!shown) {
|
||||||
tablet.gotoWebScreen(APP_URL, "", true);
|
tablet.gotoWebScreen(APP_URL, "");
|
||||||
} else {
|
} else {
|
||||||
tablet.gotoHomeScreen();
|
tablet.gotoHomeScreen();
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue