diff --git a/containments/homescreens/halcyon/homescreen.cpp b/containments/homescreens/halcyon/homescreen.cpp index 57d8557ea2e1dd3c137ca6da2309f90e101107c5..20b304c372357c89d2cfd8b6a7719af3f52eee52 100644 --- a/containments/homescreens/halcyon/homescreen.cpp +++ b/containments/homescreens/halcyon/homescreen.cpp @@ -40,6 +40,16 @@ HomeScreen::HomeScreen(QObject *parent, const KPluginMetaData &data, const QVari HomeScreen::~HomeScreen() = default; +bool HomeScreen::showingDesktop() const +{ + return KWindowSystem::showingDesktop(); +} + +void HomeScreen::setShowingDesktop(bool showingDesktop) +{ + KWindowSystem::setShowingDesktop(showingDesktop); +} + K_PLUGIN_CLASS_WITH_JSON(HomeScreen, "package/metadata.json") #include "homescreen.moc" diff --git a/containments/homescreens/halcyon/homescreen.h b/containments/homescreens/halcyon/homescreen.h index 1427f0673455990f8c5ed0dee586b9084bdf6eba..3051967d74ca75436eccfc1971bf65eb1484eccb 100644 --- a/containments/homescreens/halcyon/homescreen.h +++ b/containments/homescreens/halcyon/homescreen.h @@ -10,8 +10,15 @@ class HomeScreen : public Plasma::Containment { Q_OBJECT + Q_PROPERTY(bool showingDesktop READ showingDesktop WRITE setShowingDesktop NOTIFY showingDesktopChanged) public: HomeScreen(QObject *parent, const KPluginMetaData &data, const QVariantList &args); ~HomeScreen() override; + + bool showingDesktop() const; + void setShowingDesktop(bool showingDesktop); + +Q_SIGNALS: + void showingDesktopChanged(bool showingDesktop); }; diff --git a/containments/homescreens/halcyon/package/contents/ui/main.qml b/containments/homescreens/halcyon/package/contents/ui/main.qml index 4c35c4aacd7effc833a4f1c36eede66a0dc00e56..1df10e57ef573045411074f5ae7eba6472de226c 100644 --- a/containments/homescreens/halcyon/package/contents/ui/main.qml +++ b/containments/homescreens/halcyon/package/contents/ui/main.qml @@ -39,6 +39,26 @@ MobileShell.HomeScreen { } } + Plasmoid.onActivated: { + // Always close action drawer + if (MobileShell.TopPanelControls.actionDrawerVisible) { + MobileShell.TopPanelControls.closeActionDrawer(); + } + + // there's a couple of steps: + // - minimize windows (only if we are in an app) + // - open app drawer + // - close app drawer and, if necessary, restore windows + if (!plasmoid.nativeInterface.showingDesktop && !MobileShell.HomeScreenControls.homeScreenVisible) { + plasmoid.nativeInterface.showingDesktop = true; + } else if (homescreen.page == 0) { + homescreen.page = 1; + } else { + plasmoid.nativeInterface.showingDesktop = false; + homescreen.page = 0; + } + } + // homescreen component contentItem: Item { HomeScreen {