Refactor window handling code
Currently when we want to show/raise the window in reaction to the tray icon/notification being clicked etc we do this by emitting a signal on the controller. This is connected to in main.qml, which does some things, then calls back to controller to do more things. This is quite convoluted. Instead introduce a new class WindowController that is responsible for all things window, in particular showing/raising and config saving
This commit is contained in:
committed by
Tobias Fella
parent
736c4b02ed
commit
55847cb9cc
55
src/windowcontroller.cpp
Normal file
55
src/windowcontroller.cpp
Normal file
@@ -0,0 +1,55 @@
|
||||
// SPDX-FileCopyrightText: 2022 Nicolas Fella <nicolas.fella@gmx.de>
|
||||
// SPDX-License-Identifier: GPL-2.0-or-later
|
||||
|
||||
#include "windowcontroller.h"
|
||||
|
||||
#include <KConfig>
|
||||
#include <KWindowConfig>
|
||||
|
||||
#ifdef HAVE_WINDOWSYSTEM
|
||||
#include <KWindowSystem>
|
||||
#endif
|
||||
|
||||
#include <QStandardPaths>
|
||||
|
||||
WindowController &WindowController::instance()
|
||||
{
|
||||
static WindowController instance;
|
||||
return instance;
|
||||
}
|
||||
|
||||
void WindowController::setWindow(QWindow *window)
|
||||
{
|
||||
m_window = window;
|
||||
}
|
||||
|
||||
void WindowController::restoreGeometry()
|
||||
{
|
||||
KConfig dataResource("data", KConfig::SimpleConfig, QStandardPaths::AppDataLocation);
|
||||
KConfigGroup windowGroup(&dataResource, "Window");
|
||||
KWindowConfig::restoreWindowSize(m_window, windowGroup);
|
||||
KWindowConfig::restoreWindowPosition(m_window, windowGroup);
|
||||
}
|
||||
|
||||
void WindowController::saveGeometry()
|
||||
{
|
||||
KConfig dataResource("data", KConfig::SimpleConfig, QStandardPaths::AppDataLocation);
|
||||
KConfigGroup windowGroup(&dataResource, "Window");
|
||||
KWindowConfig::saveWindowPosition(m_window, windowGroup);
|
||||
KWindowConfig::saveWindowSize(m_window, windowGroup);
|
||||
}
|
||||
|
||||
void WindowController::showAndRaiseWindow(const QString &xdgActivationToken)
|
||||
{
|
||||
if (!m_window->isVisible()) {
|
||||
m_window->show();
|
||||
}
|
||||
|
||||
#ifdef HAVE_WINDOWSYSTEM
|
||||
if (!xdgActivationToken.isEmpty()) {
|
||||
KWindowSystem::setCurrentXdgActivationToken(xdgActivationToken);
|
||||
}
|
||||
|
||||
KWindowSystem::activateWindow(m_window);
|
||||
#endif
|
||||
}
|
||||
Reference in New Issue
Block a user