Fix window placement on wayland and add close buttons

We explicitly set a parent. We can't assign to
ApplicationWindow.transientParent though, only to
Window.transientParent, so we just call setTransientParent in C++.
This commit is contained in:
Nicolas Werner 2021-08-04 02:27:50 +02:00
parent 619525e62f
commit 87e81498b7
No known key found for this signature in database
GPG key ID: C8D75E610773F2D9
17 changed files with 52 additions and 36 deletions

View file

@ -30,12 +30,12 @@ ApplicationWindow {
} }
title: qsTr("Invite users to %1").arg(plainRoomName) title: qsTr("Invite users to %1").arg(plainRoomName)
x: MainWindow.x + (MainWindow.width / 2) - (width / 2)
y: MainWindow.y + (MainWindow.height / 2) - (height / 2)
height: 380 height: 380
width: 340 width: 340
palette: Nheko.colors palette: Nheko.colors
color: Nheko.colors.window color: Nheko.colors.window
flags: Qt.Dialog | Qt.WindowCloseButtonHint
Component.onCompleted: Nheko.reparent(inviteDialogRoot)
Shortcut { Shortcut {
sequence: "Ctrl+Enter" sequence: "Ctrl+Enter"

View file

@ -7,7 +7,7 @@ import "./voip"
import QtQuick 2.12 import QtQuick 2.12
import QtQuick.Controls 2.3 import QtQuick.Controls 2.3
import QtQuick.Layouts 1.2 import QtQuick.Layouts 1.2
import QtQuick.Window 2.2 import QtQuick.Window 2.13
import im.nheko 1.0 import im.nheko 1.0
Rectangle { Rectangle {

View file

@ -10,7 +10,7 @@ import QtGraphicalEffects 1.0
import QtQuick 2.15 import QtQuick 2.15
import QtQuick.Controls 2.15 import QtQuick.Controls 2.15
import QtQuick.Layouts 1.2 import QtQuick.Layouts 1.2
import QtQuick.Window 2.2 import QtQuick.Window 2.13
import im.nheko 1.0 import im.nheko 1.0
ScrollView { ScrollView {

View file

@ -11,13 +11,12 @@ ApplicationWindow {
property alias rawMessage: rawMessageView.text property alias rawMessage: rawMessageView.text
x: MainWindow.x + (MainWindow.width / 2) - (width / 2)
y: MainWindow.y + (MainWindow.height / 2) - (height / 2)
height: 420 height: 420
width: 420 width: 420
palette: Nheko.colors palette: Nheko.colors
color: Nheko.colors.window color: Nheko.colors.window
flags: Qt.Tool | Qt.WindowStaysOnTopHint flags: Qt.Tool | Qt.WindowStaysOnTopHint | Qt.WindowCloseButtonHint
Component.onCompleted: Nheko.reparent(rawMessageRoot)
Shortcut { Shortcut {
sequence: StandardKey.Cancel sequence: StandardKey.Cancel
@ -40,6 +39,7 @@ ApplicationWindow {
background: Rectangle { background: Rectangle {
color: Nheko.colors.base color: Nheko.colors.base
} }
} }
} }
@ -48,4 +48,5 @@ ApplicationWindow {
standardButtons: DialogButtonBox.Ok standardButtons: DialogButtonBox.Ok
onAccepted: rawMessageRoot.close() onAccepted: rawMessageRoot.close()
} }
} }

View file

@ -13,15 +13,14 @@ ApplicationWindow {
property ReadReceiptsProxy readReceipts property ReadReceiptsProxy readReceipts
property Room room property Room room
x: MainWindow.x + (MainWindow.width / 2) - (width / 2)
y: MainWindow.y + (MainWindow.height / 2) - (height / 2)
height: 380 height: 380
width: 340 width: 340
minimumHeight: 380 minimumHeight: 380
minimumWidth: headerTitle.width + 2 * Nheko.paddingMedium minimumWidth: headerTitle.width + 2 * Nheko.paddingMedium
palette: Nheko.colors palette: Nheko.colors
color: Nheko.colors.window color: Nheko.colors.window
flags: Qt.Dialog flags: Qt.Dialog | Qt.WindowCloseButtonHint
Component.onCompleted: Nheko.reparent(readReceiptsRoot)
Shortcut { Shortcut {
sequence: StandardKey.Cancel sequence: StandardKey.Cancel

View file

@ -6,7 +6,7 @@ import "./ui"
import QtQuick 2.12 import QtQuick 2.12
import QtQuick.Controls 2.12 import QtQuick.Controls 2.12
import QtQuick.Layouts 1.12 import QtQuick.Layouts 1.12
import QtQuick.Window 2.12 import QtQuick.Window 2.13
import im.nheko 1.0 import im.nheko 1.0
ApplicationWindow { ApplicationWindow {
@ -15,13 +15,13 @@ ApplicationWindow {
property MemberList members property MemberList members
title: qsTr("Members of %1").arg(members.roomName) title: qsTr("Members of %1").arg(members.roomName)
x: MainWindow.x + (MainWindow.width / 2) - (width / 2)
y: MainWindow.y + (MainWindow.height / 2) - (height / 2)
height: 650 height: 650
width: 420 width: 420
minimumHeight: 420 minimumHeight: 420
palette: Nheko.colors palette: Nheko.colors
color: Nheko.colors.window color: Nheko.colors.window
flags: Qt.Dialog | Qt.WindowCloseButtonHint
Component.onCompleted: Nheko.reparent(roomMembersRoot)
Shortcut { Shortcut {
sequence: StandardKey.Cancel sequence: StandardKey.Cancel

View file

@ -7,7 +7,7 @@ import Qt.labs.platform 1.1 as Platform
import QtQuick 2.15 import QtQuick 2.15
import QtQuick.Controls 2.3 import QtQuick.Controls 2.3
import QtQuick.Layouts 1.2 import QtQuick.Layouts 1.2
import QtQuick.Window 2.3 import QtQuick.Window 2.13
import im.nheko 1.0 import im.nheko 1.0
ApplicationWindow { ApplicationWindow {
@ -15,14 +15,13 @@ ApplicationWindow {
property var roomSettings property var roomSettings
x: MainWindow.x + (MainWindow.width / 2) - (width / 2)
y: MainWindow.y + (MainWindow.height / 2) - (height / 2)
minimumWidth: 420 minimumWidth: 420
minimumHeight: 650 minimumHeight: 650
palette: Nheko.colors palette: Nheko.colors
color: Nheko.colors.window color: Nheko.colors.window
modality: Qt.NonModal modality: Qt.NonModal
flags: Qt.Dialog flags: Qt.Dialog | Qt.WindowCloseButtonHint
Component.onCompleted: Nheko.reparent(roomSettingsDialog)
title: qsTr("Room Settings") title: qsTr("Room Settings")
Shortcut { Shortcut {

View file

@ -9,10 +9,10 @@ import "./emoji"
import "./voip" import "./voip"
import Qt.labs.platform 1.1 as Platform import Qt.labs.platform 1.1 as Platform
import QtGraphicalEffects 1.0 import QtGraphicalEffects 1.0
import QtQuick 2.9 import QtQuick 2.15
import QtQuick.Controls 2.5 import QtQuick.Controls 2.15
import QtQuick.Layouts 1.3 import QtQuick.Layouts 1.3
import QtQuick.Window 2.2 import QtQuick.Window 2.15
import im.nheko 1.0 import im.nheko 1.0
import im.nheko.EmojiModel 1.0 import im.nheko.EmojiModel 1.0

View file

@ -7,7 +7,7 @@ import "./emoji"
import QtQuick 2.12 import QtQuick 2.12
import QtQuick.Controls 2.3 import QtQuick.Controls 2.3
import QtQuick.Layouts 1.2 import QtQuick.Layouts 1.2
import QtQuick.Window 2.2 import QtQuick.Window 2.13
import im.nheko 1.0 import im.nheko 1.0
Item { Item {

View file

@ -13,7 +13,7 @@ import QtGraphicalEffects 1.0
import QtQuick 2.9 import QtQuick 2.9
import QtQuick.Controls 2.5 import QtQuick.Controls 2.5
import QtQuick.Layouts 1.3 import QtQuick.Layouts 1.3
import QtQuick.Window 2.2 import QtQuick.Window 2.13
import im.nheko 1.0 import im.nheko 1.0
import im.nheko.EmojiModel 1.0 import im.nheko.EmojiModel 1.0

View file

@ -4,19 +4,20 @@
import "./device-verification" import "./device-verification"
import "./ui" import "./ui"
import QtQuick 2.9 import QtQuick 2.15
import QtQuick.Controls 2.3 import QtQuick.Controls 2.15
import QtQuick.Layouts 1.2 import QtQuick.Layouts 1.2
import QtQuick.Window 2.3 import QtQuick.Window 2.13
import im.nheko 1.0 import im.nheko 1.0
ApplicationWindow { ApplicationWindow {
// this does not work in ApplicationWindow, just in Window
//transientParent: Nheko.mainwindow()
id: userProfileDialog id: userProfileDialog
property var profile property var profile
x: MainWindow.x + (MainWindow.width / 2) - (width / 2)
y: MainWindow.y + (MainWindow.height / 2) - (height / 2)
height: 650 height: 650
width: 420 width: 420
minimumHeight: 420 minimumHeight: 420
@ -24,7 +25,8 @@ ApplicationWindow {
color: Nheko.colors.window color: Nheko.colors.window
title: profile.isGlobalUserProfile ? qsTr("Global User Profile") : qsTr("Room User Profile") title: profile.isGlobalUserProfile ? qsTr("Global User Profile") : qsTr("Room User Profile")
modality: Qt.NonModal modality: Qt.NonModal
flags: Qt.Dialog flags: Qt.Dialog | Qt.WindowCloseButtonHint
Component.onCompleted: Nheko.reparent(userProfileDialog)
Shortcut { Shortcut {
sequence: StandardKey.Cancel sequence: StandardKey.Cancel

View file

@ -5,7 +5,7 @@
import QtQuick 2.12 import QtQuick 2.12
import QtQuick.Controls 2.3 import QtQuick.Controls 2.3
import QtQuick.Layouts 1.2 import QtQuick.Layouts 1.2
import QtQuick.Window 2.2 import QtQuick.Window 2.13
import im.nheko 1.0 import im.nheko 1.0
Item { Item {

View file

@ -4,7 +4,7 @@
import QtQuick 2.10 import QtQuick 2.10
import QtQuick.Controls 2.3 import QtQuick.Controls 2.3
import QtQuick.Window 2.10 import QtQuick.Window 2.13
import im.nheko 1.0 import im.nheko 1.0
ApplicationWindow { ApplicationWindow {
@ -14,13 +14,12 @@ ApplicationWindow {
onClosing: TimelineManager.removeVerificationFlow(flow) onClosing: TimelineManager.removeVerificationFlow(flow)
title: stack.currentItem.title title: stack.currentItem.title
flags: Qt.Dialog
modality: Qt.NonModal modality: Qt.NonModal
palette: Nheko.colors palette: Nheko.colors
height: stack.implicitHeight height: stack.implicitHeight
width: stack.implicitWidth width: stack.implicitWidth
x: MainWindow.x + (MainWindow.width / 2) - (width / 2) flags: Qt.Dialog | Qt.WindowCloseButtonHint
y: MainWindow.y + (MainWindow.height / 2) - (height / 2) Component.onCompleted: Nheko.reparent(dialog)
StackView { StackView {
id: stack id: stack

View file

@ -20,14 +20,13 @@ ApplicationWindow {
readonly property int stickerDimPad: 128 + Nheko.paddingSmall readonly property int stickerDimPad: 128 + Nheko.paddingSmall
title: qsTr("Image pack settings") title: qsTr("Image pack settings")
x: MainWindow.x + (MainWindow.width / 2) - (width / 2)
y: MainWindow.y + (MainWindow.height / 2) - (height / 2)
height: 400 height: 400
width: 600 width: 600
palette: Nheko.colors palette: Nheko.colors
color: Nheko.colors.base color: Nheko.colors.base
modality: Qt.NonModal modality: Qt.NonModal
flags: Qt.Dialog flags: Qt.Dialog | Qt.WindowCloseButtonHint
Component.onCompleted: Nheko.reparent(win)
AdaptiveLayout { AdaptiveLayout {
id: adaptiveView id: adaptiveView
@ -202,6 +201,12 @@ ApplicationWindow {
color: Nheko.colors.window color: Nheko.colors.window
ColumnLayout { ColumnLayout {
//Button {
// Layout.alignment: Qt.AlignHCenter
// text: qsTr("Edit")
// enabled: currentPack.canEdit
//}
id: packinfo id: packinfo
property string packName: currentPack ? currentPack.packname : "" property string packName: currentPack ? currentPack.packname : ""

View file

@ -16,6 +16,7 @@ ApplicationWindow {
modality: Qt.NonModal modality: Qt.NonModal
flags: Qt.Dialog flags: Qt.Dialog
Component.onCompleted: Nheko.reparent(inputDialog)
width: 350 width: 350
height: fontMetrics.lineSpacing * 7 height: fontMetrics.lineSpacing * 7

View file

@ -6,6 +6,7 @@
#include <QDesktopServices> #include <QDesktopServices>
#include <QUrl> #include <QUrl>
#include <QWindow>
#include "Cache_p.h" #include "Cache_p.h"
#include "ChatPage.h" #include "ChatPage.h"
@ -140,3 +141,9 @@ Nheko::openJoinRoomDialog() const
MainWindow::instance()->openJoinRoomDialog( MainWindow::instance()->openJoinRoomDialog(
[](const QString &room_id) { ChatPage::instance()->joinRoom(room_id); }); [](const QString &room_id) { ChatPage::instance()->joinRoom(room_id); });
} }
void
Nheko::reparent(QWindow *win) const
{
win->setTransientParent(MainWindow::instance()->windowHandle());
}

View file

@ -11,6 +11,8 @@
#include "Theme.h" #include "Theme.h"
#include "UserProfile.h" #include "UserProfile.h"
class QWindow;
class Nheko : public QObject class Nheko : public QObject
{ {
Q_OBJECT Q_OBJECT
@ -49,6 +51,7 @@ public:
Q_INVOKABLE void openLogoutDialog() const; Q_INVOKABLE void openLogoutDialog() const;
Q_INVOKABLE void openCreateRoomDialog() const; Q_INVOKABLE void openCreateRoomDialog() const;
Q_INVOKABLE void openJoinRoomDialog() const; Q_INVOKABLE void openJoinRoomDialog() const;
Q_INVOKABLE void reparent(QWindow *win) const;
public slots: public slots:
void updateUserProfile(); void updateUserProfile();