修复:完善终端开机及串流交接并接入云管平台
This commit is contained in:
1 parent
8276da0d45
commit
18a9ce995d
25 files changed
+922
-48
No files matched your search
@@ -0,0 +1,128 @@
|
||||
--- a/app/main.cpp
|
||||
+++ b/app/main.cpp
|
||||
@@ -1033,6 +1033,14 @@
|
||||
}
|
||||
|
||||
if (hasGUI) {
|
||||
+ // The VDI shell owns all connection/error UI. Keep the CLI Qt window
|
||||
+ // unmapped; only the full-screen SDL stream may appear over the shell.
|
||||
+ const bool vdiKioskLaunch = commandLineParserResult == GlobalCommandLineParser::StreamRequested &&
|
||||
+ qEnvironmentVariableIntValue("VDI_KIOSK_STREAM") == 1;
|
||||
+ engine.rootContext()->setContextProperty("vdiKioskLaunch", vdiKioskLaunch);
|
||||
+ if (vdiKioskLaunch) {
|
||||
+ app.setQuitOnLastWindowClosed(false);
|
||||
+ }
|
||||
engine.rootContext()->setContextProperty("initialView", initialView);
|
||||
engine.rootContext()->setContextProperty("runConfigChecks", commandLineParserResult == GlobalCommandLineParser::NormalStartRequested);
|
||||
|
||||
--- a/app/gui/main.qml
|
||||
+++ b/app/gui/main.qml
|
||||
@@ -35,6 +35,9 @@
|
||||
}
|
||||
|
||||
Component.onCompleted: {
|
||||
+ if (vdiKioskLaunch) {
|
||||
+ return
|
||||
+ }
|
||||
// Show the window according to the user's preferences
|
||||
if (SystemProperties.hasDesktopEnvironment) {
|
||||
if (StreamingPreferences.uiDisplayMode == StreamingPreferences.UI_MAXIMIZED) {
|
||||
--- a/app/gui/CliStartStreamSegue.qml
|
||||
+++ b/app/gui/CliStartStreamSegue.qml
|
||||
@@ -23,12 +23,21 @@
|
||||
}
|
||||
|
||||
function onLaunchFailed(message) {
|
||||
+ if (vdiKioskLaunch) {
|
||||
+ console.error(message)
|
||||
+ Qt.exit(1)
|
||||
+ return
|
||||
+ }
|
||||
errorDialog.text = message
|
||||
errorDialog.open()
|
||||
console.error(message)
|
||||
}
|
||||
|
||||
function onAppQuitRequired(appName) {
|
||||
+ if (vdiKioskLaunch) {
|
||||
+ onLaunchFailed(qsTr("Another application is already running: %1").arg(appName))
|
||||
+ return
|
||||
+ }
|
||||
quitAppDialog.appName = appName
|
||||
quitAppDialog.open()
|
||||
}
|
||||
--- a/app/gui/StreamSegue.qml
|
||||
+++ b/app/gui/StreamSegue.qml
|
||||
@@ -56,11 +56,19 @@
|
||||
stackView.replace(stackView.currentItem, component.createObject(stackView, {"appName": appName}), StackView.Immediate)
|
||||
|
||||
// Show the Qt window again to show quit segue
|
||||
- window.visible = true
|
||||
+ window.visible = !vdiKioskLaunch
|
||||
}
|
||||
|
||||
function sessionFinished(portTestResult)
|
||||
{
|
||||
+ if (vdiKioskLaunch) {
|
||||
+ // Never restore a hidden CLI dialog over the product surface.
|
||||
+ if (streamSegueErrorDialog.text) {
|
||||
+ console.error(streamSegueErrorDialog.text)
|
||||
+ }
|
||||
+ Qt.exit(streamSegueErrorDialog.text ? 1 : 0)
|
||||
+ return
|
||||
+ }
|
||||
if (portTestResult !== 0 && portTestResult !== -1 && streamSegueErrorDialog.text) {
|
||||
streamSegueErrorDialog.text += "\n\n" + qsTr("This PC's Internet connection is blocking Moonlight. Streaming over the Internet may not work while connected to this network.")
|
||||
}
|
||||
@@ -145,7 +153,8 @@
|
||||
Loader {
|
||||
id: streamLoader
|
||||
active: false
|
||||
- asynchronous: true
|
||||
+ // A hidden Qt window has no render frames to drive incubation.
|
||||
+ asynchronous: !vdiKioskLaunch
|
||||
|
||||
onLoaded: {
|
||||
// Set the hint text. We do this here rather than
|
||||
@@ -178,6 +187,9 @@
|
||||
for (var i = 0; i < session.launchWarnings.length; i++) {
|
||||
var text = session.launchWarnings[i]
|
||||
console.warn(text)
|
||||
+ if (vdiKioskLaunch) {
|
||||
+ continue
|
||||
+ }
|
||||
|
||||
// Show the tooltip for 3 seconds
|
||||
var toast = Qt.createQmlObject('import QtQuick.Controls 2.2; ToolTip {}', parent, '')
|
||||
--- a/app/streaming/session.cpp
|
||||
+++ b/app/streaming/session.cpp
|
||||
@@ -1365,6 +1365,19 @@
|
||||
}
|
||||
}
|
||||
|
||||
+ if (m_IsFullScreen && qEnvironmentVariableIntValue("VDI_KIOSK_STREAM") == 1) {
|
||||
+ // No EWMH window manager: size the surface before SDL maps it so the
|
||||
+ // first mapped frame already covers the output.
|
||||
+ SDL_Rect bounds;
|
||||
+ if (SDL_GetDisplayBounds(displayIndex, &bounds) == 0) {
|
||||
+ x = bounds.x;
|
||||
+ y = bounds.y;
|
||||
+ width = bounds.w;
|
||||
+ height = bounds.h;
|
||||
+ return;
|
||||
+ }
|
||||
+ }
|
||||
+
|
||||
SDL_Rect usableBounds;
|
||||
if (SDL_GetDisplayUsableBounds(displayIndex, &usableBounds) == 0) {
|
||||
// If the stream resolution fits within the usable display area, use it directly
|
||||
@@ -1817,6 +1830,9 @@
|
||||
|
||||
// We always want a resizable window with High DPI enabled
|
||||
Uint32 defaultWindowFlags = SDL_WINDOW_ALLOW_HIGHDPI | SDL_WINDOW_RESIZABLE;
|
||||
+ if (m_IsFullScreen && qEnvironmentVariableIntValue("VDI_KIOSK_STREAM") == 1) {
|
||||
+ defaultWindowFlags |= SDL_WINDOW_BORDERLESS;
|
||||
+ }
|
||||
|
||||
// If we're starting in windowed mode and the Moonlight GUI is maximized or
|
||||
// minimized, match that with the streaming window.
|
||||
Reference in new issue
Block a user