File indexing completed on 2024-06-02 05:56:53
0001 // SPDX-FileCopyrightText: 2023-2024 Laurent Montel <montel.org> 0002 // 0003 // SPDX-License-Identifier: GPL-2.0-only OR GPL-3.0-only OR LicenseRef-KDE-Accepted-GPL 0004 // Code based on neochat code 0005 0006 #include "windowcontroller.h" 0007 0008 #include "config-alpaka.h" 0009 #include <KConfig> 0010 #include <KWindowConfig> 0011 0012 #ifdef HAVE_WINDOWSYSTEM 0013 #if HAVE_X11 0014 #include <KStartupInfo> 0015 #endif 0016 #include <KWindowSystem> 0017 #endif 0018 0019 #include <KSharedConfig> 0020 0021 WindowController &WindowController::instance() 0022 { 0023 static WindowController instance; 0024 return instance; 0025 } 0026 0027 WindowController *WindowController::create(QQmlEngine *engine, QJSEngine *) 0028 { 0029 engine->setObjectOwnership(&instance(), QQmlEngine::CppOwnership); 0030 return &instance(); 0031 } 0032 0033 void WindowController::setWindow(QWindow *window) 0034 { 0035 mWindow = window; 0036 0037 Q_EMIT windowChanged(); 0038 } 0039 0040 QWindow *WindowController::window() const 0041 { 0042 return mWindow; 0043 } 0044 0045 void WindowController::restoreGeometry() 0046 { 0047 const auto stateConfig = KSharedConfig::openStateConfig(); 0048 const KConfigGroup windowGroup = stateConfig->group(QStringLiteral("Window")); 0049 0050 KWindowConfig::restoreWindowSize(mWindow, windowGroup); 0051 KWindowConfig::restoreWindowPosition(mWindow, windowGroup); 0052 } 0053 0054 void WindowController::saveGeometry() 0055 { 0056 const auto stateConfig = KSharedConfig::openStateConfig(); 0057 KConfigGroup windowGroup = stateConfig->group(QStringLiteral("Window")); 0058 0059 KWindowConfig::saveWindowPosition(mWindow, windowGroup); 0060 KWindowConfig::saveWindowSize(mWindow, windowGroup); 0061 0062 stateConfig->sync(); 0063 } 0064 0065 void WindowController::showAndRaiseWindow(const QString &startupId) 0066 { 0067 if (!mWindow->isVisible()) { 0068 mWindow->show(); 0069 restoreGeometry(); 0070 } 0071 0072 #ifdef HAVE_WINDOWSYSTEM 0073 if (!startupId.isEmpty()) { 0074 if (KWindowSystem::isPlatformX11()) { 0075 #if HAVE_X11 0076 KStartupInfo::setNewStartupId(mWindow, startupId.toUtf8()); 0077 #endif 0078 } else if (KWindowSystem::isPlatformWayland()) { 0079 KWindowSystem::setCurrentXdgActivationToken(startupId); 0080 } 0081 } 0082 0083 KWindowSystem::activateWindow(mWindow); 0084 #endif 0085 } 0086 0087 #include "moc_windowcontroller.cpp"