mirror of
https://github.com/overte-org/overte.git
synced 2025-04-20 03:44:02 +02:00
- center default native window
- close button destroys window by default unless Desktop.CLOSE_BUTTON_HIDES flag is set
This commit is contained in:
parent
d886bc2d9c
commit
3f6793b462
3 changed files with 26 additions and 42 deletions
|
@ -28,6 +28,8 @@ Windows.Window {
|
|||
// Don't destroy on close... otherwise the JS/C++ will have a dangling pointer
|
||||
destroyOnCloseButton: false;
|
||||
|
||||
signal selfDestruct();
|
||||
|
||||
property var flags: 0;
|
||||
|
||||
property var source;
|
||||
|
@ -67,8 +69,14 @@ Windows.Window {
|
|||
x = interactiveWindowPosition.x;
|
||||
y = interactiveWindowPosition.y;
|
||||
} else if (presentationMode === Desktop.PresentationMode.NATIVE && nativeWindow) {
|
||||
nativeWindow.x = interactiveWindowPosition.x;
|
||||
nativeWindow.y = interactiveWindowPosition.y;
|
||||
if (interactiveWindowPosition.x === 0 && interactiveWindowPosition.y === 0) {
|
||||
// default position for native window in center of main application window
|
||||
nativeWindow.x = Math.floor(Window.x + (Window.innerWidth / 2) - (interactiveWindowSize.width / 2));
|
||||
nativeWindow.y = Math.floor(Window.y + (Window.innerHeight / 2) - (interactiveWindowSize.height / 2));
|
||||
} else {
|
||||
nativeWindow.x = interactiveWindowPosition.x;
|
||||
nativeWindow.y = interactiveWindowPosition.y;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -83,7 +91,6 @@ Windows.Window {
|
|||
}
|
||||
|
||||
function setupPresentationMode() {
|
||||
console.warn(presentationMode);
|
||||
if (presentationMode === Desktop.PresentationMode.VIRTUAL) {
|
||||
if (nativeWindow) {
|
||||
nativeWindow.setVisible(false);
|
||||
|
@ -104,7 +111,6 @@ Windows.Window {
|
|||
}
|
||||
|
||||
Component.onCompleted: {
|
||||
|
||||
x = interactiveWindowPosition.x;
|
||||
y = interactiveWindowPosition.y;
|
||||
width = interactiveWindowSize.width;
|
||||
|
@ -161,6 +167,11 @@ Windows.Window {
|
|||
}
|
||||
});
|
||||
|
||||
nativeWindow.closing.connect(function(closeEvent) {
|
||||
closeEvent.accepted = false;
|
||||
windowClosed();
|
||||
});
|
||||
|
||||
// finally set the initial window mode:
|
||||
setupPresentationMode();
|
||||
|
||||
|
@ -243,10 +254,10 @@ Windows.Window {
|
|||
onWindowClosed: {
|
||||
// set invisible on close, to make it not re-appear unintended after switching PresentationMode
|
||||
interactiveWindowVisible = false;
|
||||
}
|
||||
|
||||
onWindowDestroyed: {
|
||||
console.warn("destroyed");
|
||||
if ((flags & Desktop.CLOSE_BUTTON_HIDES) !== Desktop.CLOSE_BUTTON_HIDES) {
|
||||
selfDestruct();
|
||||
}
|
||||
}
|
||||
|
||||
Item {
|
||||
|
|
|
@ -84,7 +84,8 @@ InteractiveWindow::InteractiveWindow(const QString& sourceUrl, const QVariantMap
|
|||
connect(object, SIGNAL(interactiveWindowVisibleChanged()), this, SIGNAL(visibleChanged()), Qt::QueuedConnection);
|
||||
connect(object, SIGNAL(presentationModeChanged()), this, SIGNAL(presentationModeChanged()), Qt::QueuedConnection);
|
||||
connect(object, SIGNAL(titleChanged()), this, SIGNAL(titleChanged()), Qt::QueuedConnection);
|
||||
|
||||
connect(object, SIGNAL(windowClosed()), this, SIGNAL(closed()), Qt::QueuedConnection);
|
||||
connect(object, SIGNAL(selfDestruct()), this, SLOT(close()), Qt::QueuedConnection);
|
||||
|
||||
QUrl sourceURL{ sourceUrl };
|
||||
// If the passed URL doesn't correspond to a known scheme, assume it's a local file path
|
||||
|
@ -182,7 +183,6 @@ bool InteractiveWindow::isVisible() const {
|
|||
return result;
|
||||
}
|
||||
|
||||
// The tool window itself has special logic based on whether any tabs are enabled
|
||||
if (_qmlWindow.isNull()) {
|
||||
return false;
|
||||
}
|
||||
|
|
|
@ -47,46 +47,19 @@ using namespace InteractiveWindowEnums;
|
|||
* @hifi-interface
|
||||
* @hifi-client-en
|
||||
*
|
||||
* @property {string} mode
|
||||
* @property {string} title
|
||||
* @property {Vec2} position
|
||||
* @property {Vec2} size
|
||||
* @property {boolean} visible
|
||||
* @property {Desktop.PresentationMode} presentationMode
|
||||
*
|
||||
*/
|
||||
class InteractiveWindow : public QObject {
|
||||
Q_OBJECT
|
||||
|
||||
/**jsdoc
|
||||
* title of the window
|
||||
*
|
||||
* @name InteractiveWindow#title
|
||||
* @type string
|
||||
* @default "InteractiveWindow"
|
||||
*/
|
||||
Q_PROPERTY(QString title READ getTitle WRITE setTitle)
|
||||
|
||||
/**jsdoc
|
||||
* window position on current desktop
|
||||
*
|
||||
* @name InteractiveWindow#position
|
||||
* @type Vec2
|
||||
*/
|
||||
Q_PROPERTY(glm::vec2 position READ getPosition WRITE setPosition)
|
||||
|
||||
/**jsdoc
|
||||
* window size
|
||||
*
|
||||
* @name InteractiveWindow#size
|
||||
* @type Vec2
|
||||
*/
|
||||
Q_PROPERTY(glm::vec2 size READ getSize WRITE setSize)
|
||||
|
||||
/**jsdoc
|
||||
* visibility of the window
|
||||
*
|
||||
* @name InteractiveWindow#visible
|
||||
* @type boolean
|
||||
* @default true
|
||||
* @example
|
||||
* // Toggle window visiblity;
|
||||
* interactiveWindow.visible = !interactiveWindow.visible;
|
||||
*/
|
||||
Q_PROPERTY(bool visible READ isVisible WRITE setVisible)
|
||||
Q_PROPERTY(int presentationMode READ getPresentationMode WRITE setPresentationMode)
|
||||
|
||||
|
|
Loading…
Reference in a new issue