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"