From 6957ac5f8b6435bc0e563f2f042da9d5f7f5e1fd Mon Sep 17 00:00:00 2001 From: Thijs Wenker Date: Thu, 9 Feb 2017 01:31:07 +0100 Subject: [PATCH] Fixes cursor being hidden while Window.browse(), Window.save() are being called from the defaultScript.js thread --- .../src/scripting/WindowScriptingInterface.cpp | 13 +++++++++++++ interface/src/scripting/WindowScriptingInterface.h | 2 ++ 2 files changed, 15 insertions(+) diff --git a/interface/src/scripting/WindowScriptingInterface.cpp b/interface/src/scripting/WindowScriptingInterface.cpp index 52f7d723eb..9c1aedf7a0 100644 --- a/interface/src/scripting/WindowScriptingInterface.cpp +++ b/interface/src/scripting/WindowScriptingInterface.cpp @@ -16,6 +16,8 @@ #include +#include + #include "Application.h" #include "DomainHandler.h" #include "MainWindow.h" @@ -147,6 +149,15 @@ void WindowScriptingInterface::setPreviousBrowseLocation(const QString& location Setting::Handle(LAST_BROWSE_LOCATION_SETTING).set(location); } +/// Makes sure that the reticle is visible, use this in blocking forms that require a reticle and +/// might be in same thread as a script that sets the reticle to invisible +void WindowScriptingInterface::ensureReticleVisible() const { + auto compositorHelper = DependencyManager::get(); + if (!compositorHelper->getReticleVisible()) { + compositorHelper->setReticleVisible(true); + } +} + /// Display an open file dialog. If `directory` is an invalid file or directory the browser will start at the current /// working directory. /// \param const QString& title title of the window @@ -154,6 +165,7 @@ void WindowScriptingInterface::setPreviousBrowseLocation(const QString& location /// \param const QString& nameFilter filter to filter filenames by - see `QFileDialog` /// \return QScriptValue file path as a string if one was selected, otherwise `QScriptValue::NullValue` QScriptValue WindowScriptingInterface::browse(const QString& title, const QString& directory, const QString& nameFilter) { + ensureReticleVisible(); QString path = directory; if (path.isEmpty()) { path = getPreviousBrowseLocation(); @@ -175,6 +187,7 @@ QScriptValue WindowScriptingInterface::browse(const QString& title, const QStrin /// \param const QString& nameFilter filter to filter filenames by - see `QFileDialog` /// \return QScriptValue file path as a string if one was selected, otherwise `QScriptValue::NullValue` QScriptValue WindowScriptingInterface::save(const QString& title, const QString& directory, const QString& nameFilter) { + ensureReticleVisible(); QString path = directory; if (path.isEmpty()) { path = getPreviousBrowseLocation(); diff --git a/interface/src/scripting/WindowScriptingInterface.h b/interface/src/scripting/WindowScriptingInterface.h index 6cc6c7b715..60d24d50df 100644 --- a/interface/src/scripting/WindowScriptingInterface.h +++ b/interface/src/scripting/WindowScriptingInterface.h @@ -83,6 +83,8 @@ private: QString getPreviousBrowseLocation() const; void setPreviousBrowseLocation(const QString& location); + void ensureReticleVisible() const; + int createMessageBox(QString title, QString text, int buttons, int defaultButton); QHash _messageBoxes; int _lastMessageBoxID{ -1 };