mirror of
https://invent.kde.org/marcoa/shift-shell.git
synced 2026-06-11 16:57:43 +00:00
Show running windows in the app drawer with previews, window actions, and virtual desktop controls. Hide dock task icons while the panel is open so the same windows are not duplicated. Use TaskManager to move windows between desktops, and expose desktop activation through the containment.
111 lines
3 KiB
C++
111 lines
3 KiB
C++
// SPDX-FileCopyrightText: 2015 Marco Martin <mart@kde.org>
|
|
// SPDX-FileCopyrightText: 2022-2023 Devin Lin <devin@kde.org>
|
|
// SPDX-License-Identifier: GPL-2.0-or-later
|
|
|
|
#include "homescreen.h"
|
|
|
|
#include <virtualdesktopinfo.h>
|
|
|
|
#include <KWindowSystem>
|
|
|
|
#include <QDBusConnection>
|
|
#include <QDBusMessage>
|
|
#include <QDebug>
|
|
#include <QQmlEngine>
|
|
#include <QQmlExtensionPlugin>
|
|
#include <QQuickItem>
|
|
|
|
K_PLUGIN_CLASS_WITH_JSON(HomeScreen, "metadata.json")
|
|
|
|
HomeScreen::HomeScreen(QObject *parent, const KPluginMetaData &data, const QVariantList &args)
|
|
: Plasma::Containment{parent, data, args}
|
|
, m_folioSettings{new FolioSettings{this}}
|
|
, m_homeScreenState{new HomeScreenState{this}}
|
|
, m_widgetsManager{new WidgetsManager{this}}
|
|
, m_applicationListModel{new ApplicationListModel{this}}
|
|
, m_applicationListSearchModel{new ApplicationListSearchModel{this, m_applicationListModel}}
|
|
, m_favouritesModel{new FavouritesModel{this}}
|
|
, m_pageListModel{new PageListModel{this}}
|
|
{
|
|
// HomeScreenState init() has dependencies on other objects
|
|
m_homeScreenState->init();
|
|
|
|
setHasConfigurationInterface(true);
|
|
|
|
connect(KWindowSystem::self(), &KWindowSystem::showingDesktopChanged, this, &HomeScreen::showingDesktopChanged);
|
|
|
|
connect(this, &Plasma::Containment::appletAdded, this, &HomeScreen::onAppletAdded);
|
|
connect(this, &Plasma::Containment::appletAboutToBeRemoved, this, &HomeScreen::onAppletAboutToBeRemoved);
|
|
}
|
|
|
|
HomeScreen::~HomeScreen() = default;
|
|
|
|
void HomeScreen::configChanged()
|
|
{
|
|
Plasma::Containment::configChanged();
|
|
}
|
|
|
|
void HomeScreen::onAppletAdded(Plasma::Applet *applet, const QRectF &geometryHint)
|
|
{
|
|
Q_UNUSED(geometryHint)
|
|
widgetsManager()->addWidget(applet);
|
|
}
|
|
|
|
void HomeScreen::onAppletAboutToBeRemoved(Plasma::Applet *applet)
|
|
{
|
|
widgetsManager()->removeWidget(applet);
|
|
}
|
|
|
|
FolioSettings *HomeScreen::folioSettings()
|
|
{
|
|
return m_folioSettings;
|
|
}
|
|
|
|
HomeScreenState *HomeScreen::homeScreenState()
|
|
{
|
|
return m_homeScreenState;
|
|
}
|
|
|
|
WidgetsManager *HomeScreen::widgetsManager()
|
|
{
|
|
return m_widgetsManager;
|
|
}
|
|
|
|
ApplicationListModel *HomeScreen::applicationListModel()
|
|
{
|
|
return m_applicationListModel;
|
|
}
|
|
|
|
ApplicationListSearchModel *HomeScreen::applicationListSearchModel()
|
|
{
|
|
return m_applicationListSearchModel;
|
|
}
|
|
|
|
FavouritesModel *HomeScreen::favouritesModel()
|
|
{
|
|
return m_favouritesModel;
|
|
}
|
|
|
|
PageListModel *HomeScreen::pageListModel()
|
|
{
|
|
return m_pageListModel;
|
|
}
|
|
|
|
void HomeScreen::triggerOverview() const
|
|
{
|
|
QDBusMessage message = QDBusMessage::createMethodCall("org.kde.kglobalaccel", "/component/kwin", "org.kde.kglobalaccel.Component", "invokeShortcut");
|
|
message.setArguments({QStringLiteral("Overview")});
|
|
QDBusConnection::sessionBus().send(message);
|
|
}
|
|
|
|
void HomeScreen::activateVirtualDesktop(const QVariant &desktop) const
|
|
{
|
|
if (!desktop.isValid() || desktop.toString().isEmpty()) {
|
|
return;
|
|
}
|
|
|
|
TaskManager::VirtualDesktopInfo virtualDesktopInfo;
|
|
virtualDesktopInfo.requestActivate(desktop);
|
|
}
|
|
|
|
#include "homescreen.moc"
|