diff --git a/src/modules/dock/waylandmanager.cpp b/src/modules/dock/waylandmanager.cpp index 2052e2a..e536da0 100644 --- a/src/modules/dock/waylandmanager.cpp +++ b/src/modules/dock/waylandmanager.cpp @@ -50,10 +50,18 @@ void WaylandManager::registerWindow(const QString &objPath) return; } - QString appId = plasmaWindow->AppId(); - QStringList list {"dde-dock", "dde-launcher", "dde-clipboard", "dde-osd", "dde-polkit-agent", "dde-simple-egl", "dmcs"}; - if (list.indexOf(appId) >= 0) + if (!plasmaWindow->IsValid() || !plasmaWindow->isValid()) { + qWarning() << "PlasmaWindow is not valid:" << objPath; + delete plasmaWindow; return; + } + + QString appId = plasmaWindow->AppId(); + QStringList list {"dde-dock", "dde-launcher", "dde-clipboard", "dde-osd", "dde-polkit-agent", "dde-simple-egl", "dmcs", "dde-lock"}; + if (list.indexOf(appId) >= 0 || appId.startsWith("No such object path")) { + delete plasmaWindow; + return; + } XWindow winId = XCB->allocId(); // XCB中未发现释放XID接口 XWindow realId = plasmaWindow->WindowId(); diff --git a/src/modules/dock/windowinfok.cpp b/src/modules/dock/windowinfok.cpp index 9a8254b..775bdee 100644 --- a/src/modules/dock/windowinfok.cpp +++ b/src/modules/dock/windowinfok.cpp @@ -40,7 +40,7 @@ WindowInfoK::WindowInfoK(PlasmaWindow *window, XWindow _xid) WindowInfoK::~WindowInfoK() { - + delete m_plasmaWindow; } bool WindowInfoK::shouldSkip()