diff --git a/panels/dock/waylanddockhelper.cpp b/panels/dock/waylanddockhelper.cpp index 6e72cb112..4b625aeca 100644 --- a/panels/dock/waylanddockhelper.cpp +++ b/panels/dock/waylanddockhelper.cpp @@ -17,15 +17,20 @@ #include #include +#include +#include + namespace dock { WaylandDockHelper::WaylandDockHelper(DockPanel *panel) : DockHelper(panel) , m_isWindowOverlap(false) , m_isCurrentActiveWindowFullscreened(false) + , m_showingDesktop(false) , m_panel(panel) { m_xwindowControl.reset(new TreeLandXWindowControl()); m_regionWatchManager.reset(new TreeLandRegionWatchManager()); + setupKWinDBusConnection(); DS_NAMESPACE::DAppletBridge bridge("org.deepin.ds.dock.taskmanager"); if (auto applet = bridge.applet()) { connect(applet, SIGNAL(windowFullscreenChanged(bool)), this, SLOT(setCurrentActiveWindowFullscreened(bool))); @@ -123,6 +128,9 @@ void WaylandDockHelper::setCurrentActiveWindowFullscreened(bool isFullscreen) bool WaylandDockHelper::isWindowOverlap() { + if (m_showingDesktop) { + return false; + } return m_isWindowOverlap; } @@ -204,6 +212,25 @@ bool WaylandDockHelper::moveXEmbedWindow(uint32_t wid, double dx, double dy, QQu return true; } +void WaylandDockHelper::setupKWinDBusConnection() +{ + QDBusInterface kwin("org.kde.KWin", "/KWin", "org.kde.KWin", QDBusConnection::sessionBus()); + if (kwin.isValid()) { + m_showingDesktop = kwin.property("showingDesktop").toBool(); + kwin.connection().connect("org.kde.KWin", "/KWin", "org.kde.KWin", + "showingDesktopChanged", this, SLOT(onShowingDesktopChanged(bool))); + } +} + +void WaylandDockHelper::onShowingDesktopChanged(bool showing) +{ + m_showingDesktop = showing; + if (showing) { + m_panel->requestClosePopup(); + } + Q_EMIT isWindowOverlapChanged(isWindowOverlap()); +} + WallpaperColorManager::WallpaperColorManager(WaylandDockHelper *helper) : QWaylandClientExtensionTemplate(treeland_wallpaper_color_manager_v1_interface.version) , m_helper(helper) diff --git a/panels/dock/waylanddockhelper.h b/panels/dock/waylanddockhelper.h index d135ea389..c69d80334 100644 --- a/panels/dock/waylanddockhelper.h +++ b/panels/dock/waylanddockhelper.h @@ -50,15 +50,18 @@ class WaylandDockHelper : public DockHelper protected Q_SLOTS: void setCurrentActiveWindowFullscreened(bool); + void onShowingDesktopChanged(bool showing); private: void updateRegionWatchPos(); void initWallpaperColorManager(); + void setupKWinDBusConnection(); private: friend class TreeLandRegionWatch; bool m_isWindowOverlap; bool m_isCurrentActiveWindowFullscreened; + bool m_showingDesktop; DockPanel *m_panel; QScopedPointer m_wallpaperColorManager; QScopedPointer m_regionWatch;