Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
26 changes: 15 additions & 11 deletions gui/qt6webdisplay/rootqt6.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -71,23 +71,27 @@ class RQt6WebDisplayHandle : public RWebDisplayHandle {
bool fDeleteView = true; ///< is view must be deleted

class Qt6Creator : public Creator {
QApplication *qapp{nullptr}; ///< created QApplication
int qargc{1}; ///< arg counter
char *qargv[2]; ///< arg values
std::unique_ptr<TQt6Timer> fTimer; ///< timer to process ROOT events
QApplication *qapp = nullptr; ///< created QApplication
int qargc = 1; ///< arg counter
char *qargv[2] = {nullptr, nullptr}; ///< arg values
std::unique_ptr<TQt6Timer> fTimer; ///< timer to process ROOT events
std::unique_ptr<RootUrlSchemeHandler> fHandler; ///< specialized handler
public:

Qt6Creator() = default;

~Qt6Creator() override
{
/** Code executed during exit and sometime crashes.
* Disable it, while not clear if defaultProfile can be still used - seems to be not */
// if (fHandler)
// QWebEngineProfile::defaultProfile()->removeUrlSchemeHandler(fHandler.get());

R__LOG_DEBUG(0, QtWebDisplayLog()) << "Deleting Qt6Creator";
/** Code executed during program exit and sometime crashes.
* It can be that ROOT libraries already partially unloaded
* Therefore disable objects cleanup when gSystem already vansihed */

if (!gSystem) {
fHandler.release();
fTimer.release();
} else if (fHandler && QWebEngineProfile::defaultProfile()) {
QWebEngineProfile::defaultProfile()->removeUrlSchemeHandler(fHandler.get());
}
}

std::unique_ptr<RWebDisplayHandle> Display(const RWebDisplayArgs &args) override
Expand All @@ -111,7 +115,7 @@ class RQt6WebDisplayHandle : public RWebDisplayHandle {
// create timer to process Qt events from inside ROOT process events
// very much improve performance, even when Qt even loop runs by QApplication normally
if (!fTimer && !args.IsHeadless()) {
Int_t interval = gEnv->GetValue("WebGui.Qt5Timer", 1);
Int_t interval = gEnv->GetValue("WebGui.Qt6Timer", 10);
if (interval > 0) {
fTimer = std::make_unique<TQt6Timer>(interval, kTRUE);
fTimer->TurnOn();
Expand Down
3 changes: 2 additions & 1 deletion gui/webdisplay/src/RWebWindowsManager.cxx
Original file line number Diff line number Diff line change
Expand Up @@ -785,7 +785,8 @@ std::string RWebWindowsManager::GetUrl(RWebWindow &win, bool remote, std::string
/// WebGui.LaunchTmout: time required to start process in seconds (default 30 s)
/// WebGui.ReconnectTmout: time to reconnect for already existing connection, if negative - no reconnecting possible (default 15 s)
/// WebGui.BatchTimeout: time required to produce images in headless (batch) mode (default 30 s)
/// WebGui.CefTimer: periodic time to run CEF event loop (default 10 ms)
/// WebGui.Qt6Timer: periodic timer to run Qt6 event loop, used with 'qt6' web display (default 10 ms)
/// WebGui.CefTimer: periodic timer to run CEF event loop, used with 'cef' web display (default 10 ms)
/// WebGui.CefUseViews: "yes" - enable / "no" - disable usage of CEF views frameworks (default is platform/version dependent)
/// WebGui.CefLogSeveriry: "disable", "fatal", "error", "warning", "info", "verbose" (default is "fatal")
/// WebGui.CefHeadlessTimeout: timeout to wait produce result of headless output (default is 30 s)
Expand Down
Loading