diff --git a/resources/qml/PrivacyScreen.qml b/resources/qml/PrivacyScreen.qml index 6ad2a5574683a2666c409ca8952acf55c451cb43..fb3818df39c6d21d2c60cfc10e473a8aa96d4eed 100644 --- a/resources/qml/PrivacyScreen.qml +++ b/resources/qml/PrivacyScreen.qml @@ -26,7 +26,7 @@ Item { } } - target: MainWindow + target: TimelineManager } Timer { diff --git a/resources/qml/device-verification/DeviceVerification.qml b/resources/qml/device-verification/DeviceVerification.qml index c00a0bdbae95c304607a5baf3c9c8dffc348748d..90dc9ac47a005911b84ab8eebc5ff0ac1e4d3700 100644 --- a/resources/qml/device-verification/DeviceVerification.qml +++ b/resources/qml/device-verification/DeviceVerification.qml @@ -21,7 +21,6 @@ ApplicationWindow { minimumHeight: stack.implicitHeight width: stack.implicitWidth flags: Qt.Dialog | Qt.WindowCloseButtonHint | Qt.WindowTitleHint - Component.onCompleted: Nheko.reparent(dialog) StackView { id: stack diff --git a/resources/qml/dialogs/ImagePackEditorDialog.qml b/resources/qml/dialogs/ImagePackEditorDialog.qml index 3ba04d9499d14edbff2d5f098538d71615965c9d..9c46a4908a0f63fe3b053a5fca5fef44236b2bd9 100644 --- a/resources/qml/dialogs/ImagePackEditorDialog.qml +++ b/resources/qml/dialogs/ImagePackEditorDialog.qml @@ -12,8 +12,6 @@ import QtQuick.Layouts 1.12 import im.nheko 1.0 ApplicationWindow { - //Component.onCompleted: Nheko.reparent(win) - id: win property int avatarSize: Math.ceil(fontMetrics.lineSpacing * 2.3) diff --git a/resources/qml/dialogs/ImagePackSettingsDialog.qml b/resources/qml/dialogs/ImagePackSettingsDialog.qml index fa079855a7f6d53eadb0051831dd36d323863761..18c32c416ccdcb350ead52d9b2208e9094a3d60a 100644 --- a/resources/qml/dialogs/ImagePackSettingsDialog.qml +++ b/resources/qml/dialogs/ImagePackSettingsDialog.qml @@ -28,7 +28,6 @@ ApplicationWindow { color: Nheko.colors.base modality: Qt.NonModal flags: Qt.Dialog | Qt.WindowCloseButtonHint | Qt.WindowTitleHint - Component.onCompleted: Nheko.reparent(win) Component { id: packEditor diff --git a/resources/qml/dialogs/InputDialog.qml b/resources/qml/dialogs/InputDialog.qml index 63ca3181888e74a7c1663d6b0b5362df512f898d..cf1474dc60a5cb712c2f4ab62b16262b4f566226 100644 --- a/resources/qml/dialogs/InputDialog.qml +++ b/resources/qml/dialogs/InputDialog.qml @@ -18,7 +18,6 @@ ApplicationWindow { modality: Qt.NonModal flags: Qt.Dialog - Component.onCompleted: Nheko.reparent(inputDialog) width: 350 height: fontMetrics.lineSpacing * 7 diff --git a/resources/qml/dialogs/InviteDialog.qml b/resources/qml/dialogs/InviteDialog.qml index 917bc8567e38aeaacadc38fedb87d1eb5d64cd44..e7dd4e3a2ecaf51470b29f60e08232d6b83b8e01 100644 --- a/resources/qml/dialogs/InviteDialog.qml +++ b/resources/qml/dialogs/InviteDialog.qml @@ -37,7 +37,6 @@ ApplicationWindow { palette: Nheko.colors color: Nheko.colors.window flags: Qt.Dialog | Qt.WindowCloseButtonHint | Qt.WindowTitleHint - Component.onCompleted: Nheko.reparent(inviteDialogRoot) Shortcut { sequence: "Ctrl+Enter" diff --git a/resources/qml/dialogs/JoinRoomDialog.qml b/resources/qml/dialogs/JoinRoomDialog.qml index 9ce6bcf15ecc7a50f5c2eba835dc11b213f9f705..e49f538d66c4cdf1603bfdc12faebe48a225e912 100644 --- a/resources/qml/dialogs/JoinRoomDialog.qml +++ b/resources/qml/dialogs/JoinRoomDialog.qml @@ -17,7 +17,6 @@ ApplicationWindow { flags: Qt.Dialog | Qt.WindowCloseButtonHint | Qt.WindowTitleHint palette: Nheko.colors color: Nheko.colors.window - Component.onCompleted: Nheko.reparent(joinRoomRoot) width: 350 height: fontMetrics.lineSpacing * 7 diff --git a/resources/qml/dialogs/PhoneNumberInputDialog.qml b/resources/qml/dialogs/PhoneNumberInputDialog.qml index 399b11d51cc62c7eaa683908dd8b722353361fff..9c36c98ff63cb38bf13174b7a256cf4fd512f254 100644 --- a/resources/qml/dialogs/PhoneNumberInputDialog.qml +++ b/resources/qml/dialogs/PhoneNumberInputDialog.qml @@ -19,7 +19,6 @@ ApplicationWindow { modality: Qt.NonModal flags: Qt.Dialog - Component.onCompleted: Nheko.reparent(inputDialog) width: 350 height: fontMetrics.lineSpacing * 7 diff --git a/resources/qml/dialogs/RawMessageDialog.qml b/resources/qml/dialogs/RawMessageDialog.qml index 34104394e1a4cc70aea1478b211507c908faec48..774b078bee63350360a1e36bb0fdac2ada9b14bd 100644 --- a/resources/qml/dialogs/RawMessageDialog.qml +++ b/resources/qml/dialogs/RawMessageDialog.qml @@ -17,7 +17,6 @@ ApplicationWindow { palette: Nheko.colors color: Nheko.colors.window flags: Qt.Tool | Qt.WindowStaysOnTopHint | Qt.WindowCloseButtonHint | Qt.WindowTitleHint - Component.onCompleted: Nheko.reparent(rawMessageRoot) Shortcut { sequence: StandardKey.Cancel diff --git a/resources/qml/dialogs/ReadReceipts.qml b/resources/qml/dialogs/ReadReceipts.qml index aced4374b201f562aa6019dd2b502094bd6e4ac6..da87996e07d7e49d4c90cad0857c194e7ddaa62b 100644 --- a/resources/qml/dialogs/ReadReceipts.qml +++ b/resources/qml/dialogs/ReadReceipts.qml @@ -22,7 +22,6 @@ ApplicationWindow { palette: Nheko.colors color: Nheko.colors.window flags: Qt.Dialog | Qt.WindowCloseButtonHint | Qt.WindowTitleHint - Component.onCompleted: Nheko.reparent(readReceiptsRoot) Shortcut { sequence: StandardKey.Cancel diff --git a/resources/qml/dialogs/RoomDirectory.qml b/resources/qml/dialogs/RoomDirectory.qml index f458ac51c034e6f2317fbb344b27bdebe879cee5..99da63bb7592c3ba587ed4ab46738c5095bf8323 100644 --- a/resources/qml/dialogs/RoomDirectory.qml +++ b/resources/qml/dialogs/RoomDirectory.qml @@ -22,7 +22,6 @@ ApplicationWindow { color: Nheko.colors.window modality: Qt.WindowModal flags: Qt.Dialog | Qt.WindowCloseButtonHint | Qt.WindowTitleHint - Component.onCompleted: Nheko.reparent(roomDirectoryWindow) title: qsTr("Explore Public Rooms") Shortcut { diff --git a/resources/qml/dialogs/RoomMembers.qml b/resources/qml/dialogs/RoomMembers.qml index 89cce4148af5dbe888cd5e7382e5b3e94ddc0e3e..55d5488bc046f60c2707b4808a0564511d9a3a59 100644 --- a/resources/qml/dialogs/RoomMembers.qml +++ b/resources/qml/dialogs/RoomMembers.qml @@ -24,7 +24,6 @@ ApplicationWindow { palette: Nheko.colors color: Nheko.colors.window flags: Qt.Dialog | Qt.WindowCloseButtonHint | Qt.WindowTitleHint - Component.onCompleted: Nheko.reparent(roomMembersRoot) Shortcut { sequence: StandardKey.Cancel diff --git a/resources/qml/dialogs/RoomSettings.qml b/resources/qml/dialogs/RoomSettings.qml index c9f2b1a133977f6564eb10f89302ea540fcbc33e..48d2e2b726958a44cd6e593a72bc9db236296590 100644 --- a/resources/qml/dialogs/RoomSettings.qml +++ b/resources/qml/dialogs/RoomSettings.qml @@ -23,7 +23,6 @@ ApplicationWindow { color: Nheko.colors.window modality: Qt.NonModal flags: Qt.Dialog | Qt.WindowCloseButtonHint | Qt.WindowTitleHint - Component.onCompleted: Nheko.reparent(roomSettingsDialog) title: qsTr("Room Settings") Shortcut { diff --git a/resources/qml/dialogs/UserProfile.qml b/resources/qml/dialogs/UserProfile.qml index 29ce2c3feb8c0f83492756852d6db67878b96814..73c4e68bff379b191b81cfa747ae6c5e768954b5 100644 --- a/resources/qml/dialogs/UserProfile.qml +++ b/resources/qml/dialogs/UserProfile.qml @@ -13,9 +13,6 @@ import QtQuick.Window 2.13 import im.nheko 1.0 ApplicationWindow { - // this does not work in ApplicationWindow, just in Window - //transientParent: Nheko.mainwindow() - id: userProfileDialog property var profile @@ -29,7 +26,6 @@ ApplicationWindow { title: profile.isGlobalUserProfile ? qsTr("Global User Profile") : qsTr("Room User Profile") modality: Qt.NonModal flags: Qt.Dialog | Qt.WindowCloseButtonHint | Qt.WindowTitleHint - Component.onCompleted: Nheko.reparent(userProfileDialog) Shortcut { sequence: StandardKey.Cancel diff --git a/src/ChatPage.cpp b/src/ChatPage.cpp index fc90e6c71c4cf872863aa986ddea4f2818dbd1c1..f30e0466c06847fa71860a0c4d883214adfc2eb5 100644 --- a/src/ChatPage.cpp +++ b/src/ChatPage.cpp @@ -175,8 +175,6 @@ ChatPage::ChatPage(QSharedPointer<UserSettings> userSettings, QObject *parent) &ChatPage::initializeEmptyViews, view_manager_, &TimelineViewManager::initializeRoomlist); - connect( - this, &ChatPage::chatFocusChanged, view_manager_, &TimelineViewManager::chatFocusChanged); connect(this, &ChatPage::syncUI, this, [this](const mtx::responses::Sync &sync) { view_manager_->sync(sync); diff --git a/src/ChatPage.h b/src/ChatPage.h index 5e3b509df1fea2f5e79abfbe4ef7c89b613a0d79..4b7351a5e3a41a47d7e1cec6916d0054b386baca 100644 --- a/src/ChatPage.h +++ b/src/ChatPage.h @@ -143,7 +143,6 @@ signals: void retrievedPresence(const QString &statusMsg, mtx::presence::PresenceState state); void themeChanged(); void decryptSidebarChanged(); - void chatFocusChanged(const bool focused); //! Signals for device verificaiton void receivedDeviceVerificationAccept(const mtx::events::msg::KeyVerificationAccept &message); diff --git a/src/MainWindow.cpp b/src/MainWindow.cpp index 5e7fe6ce94a83df4b82a0265dfcba2c1fcc50061..03a99b0f1e5e839a5550c003a42bb45e9d11958d 100644 --- a/src/MainWindow.cpp +++ b/src/MainWindow.cpp @@ -130,8 +130,6 @@ MainWindow::MainWindow(QWindow *parent) connect(chat_page_, SIGNAL(contentLoaded()), this, SLOT(removeOverlayProgressBar())); - connect(this, &MainWindow::focusChanged, chat_page_, &ChatPage::chatFocusChanged); - // connect(login_page_, &LoginPage::loginOk, this, [this](const mtx::responses::Login &res) { // http::client()->set_user(res.user_id); // showChatPage(); @@ -342,10 +340,6 @@ MainWindow::event(QEvent *event) if (type == QEvent::Close) { closeEvent(static_cast<QCloseEvent *>(event)); - } else if (type == QEvent::WindowActivate) { - emit focusChanged(true); - } else if (type == QEvent::WindowDeactivate) { - emit focusChanged(false); } return QQuickView::event(event); diff --git a/src/MainWindow.h b/src/MainWindow.h index 04311e12b1d528817ec286b0891883681f38e8c2..ea919f4d05074a520c1a08ae81f6ba2b1f1a9d74 100644 --- a/src/MainWindow.h +++ b/src/MainWindow.h @@ -91,7 +91,6 @@ private slots: virtual void setWindowTitle(int notificationCount); signals: - void focusChanged(const bool focused); void reload(); void secretsChanged(); diff --git a/src/timeline/TimelineModel.cpp b/src/timeline/TimelineModel.cpp index e769fa40ac6be6f753bc158baa1e9d99cd23402b..6b380f79ad7c17044200f43be8ad61f34c6ecc8f 100644 --- a/src/timeline/TimelineModel.cpp +++ b/src/timeline/TimelineModel.cpp @@ -1031,7 +1031,7 @@ TimelineModel::setCurrentIndex(int index) if (index != oldIndex) emit currentIndexChanged(index); - if (!MainWindow::instance()->isActive()) + if (MainWindow::instance() != QGuiApplication::focusWindow()) return; if (!currentId.startsWith('m')) { diff --git a/src/timeline/TimelineViewManager.cpp b/src/timeline/TimelineViewManager.cpp index 5d2a44439fbe0de091c5f8e55568c1be591ae8f6..0abd102bef7bd1940e65e2c608e8d71345f67225 100644 --- a/src/timeline/TimelineViewManager.cpp +++ b/src/timeline/TimelineViewManager.cpp @@ -5,6 +5,7 @@ #include "TimelineViewManager.h" +#include <QApplication> #include <QDropEvent> #include <QFileDialog> #include <QMetaType> @@ -157,6 +158,16 @@ TimelineViewManager::TimelineViewManager(CallManager *, ChatPage *parent) isInitialSync_ = true; emit initialSyncChanged(true); }); + connect(qobject_cast<QApplication *>(QApplication::instance()), + &QApplication::focusWindowChanged, + this, + &TimelineViewManager::focusChanged); +} + +bool +TimelineViewManager::isWindowFocused() const +{ + return MainWindow::instance() == QApplication::focusWindow(); } void diff --git a/src/timeline/TimelineViewManager.h b/src/timeline/TimelineViewManager.h index 424d78d6ea76d36046ec8ecd8c7107f8014c25a9..9419f224177c77feaa31f79613f3dbf4a67dc3fb 100644 --- a/src/timeline/TimelineViewManager.h +++ b/src/timeline/TimelineViewManager.h @@ -41,8 +41,7 @@ class TimelineViewManager : public QObject Q_PROPERTY( bool isInitialSync MEMBER isInitialSync_ READ isInitialSync NOTIFY initialSyncChanged) - Q_PROPERTY( - bool isWindowFocused MEMBER isWindowFocused_ READ isWindowFocused NOTIFY focusChanged) + Q_PROPERTY(bool isWindowFocused READ isWindowFocused NOTIFY focusChanged) public: TimelineViewManager(CallManager *callManager, ChatPage *parent = nullptr); @@ -54,7 +53,7 @@ public: void clearAll() { rooms_->clear(); } Q_INVOKABLE bool isInitialSync() const { return isInitialSync_; } - bool isWindowFocused() const { return isWindowFocused_; } + bool isWindowFocused() const; Q_INVOKABLE void openImageOverlay(TimelineModel *room, QString mxcUrl, QString eventId); Q_INVOKABLE void openImagePackSettings(QString roomid); Q_INVOKABLE void saveMedia(QString mxcUrl); @@ -93,11 +92,6 @@ public slots: void updateReadReceipts(const QString &room_id, const std::vector<QString> &event_ids); void receivedSessionKey(const std::string &room_id, const std::string &session_id); void initializeRoomlist(); - void chatFocusChanged(bool focused) - { - isWindowFocused_ = focused; - emit focusChanged(); - } void showEvent(const QString &room_id, const QString &event_id); @@ -117,7 +111,6 @@ public slots: private: bool isInitialSync_ = true; - bool isWindowFocused_ = false; RoomlistModel *rooms_ = nullptr; CommunitiesModel *communities_ = nullptr;