diff --git a/panels/dock/taskmanager/taskmanager.cpp b/panels/dock/taskmanager/taskmanager.cpp index d13cb962f..5411b2576 100644 --- a/panels/dock/taskmanager/taskmanager.cpp +++ b/panels/dock/taskmanager/taskmanager.cpp @@ -152,6 +152,14 @@ bool TaskManager::init() m_windowFullscreen = isFullscreen; emit windowFullscreenChanged(isFullscreen); }); + + // 设置preview opacity + DS_NAMESPACE::DAppletBridge appearanceBridge("org.deepin.ds.dde-appearance"); + auto appearanceApplet = appearanceBridge.applet(); + if (appearanceApplet) { + modifyOpacityChanged(); + connect(appearanceApplet, SIGNAL(opacityChanged()), this, SLOT(modifyOpacityChanged())); + } return true; } @@ -418,6 +426,19 @@ void TaskManager::activateWindow(uint32_t windowID) #endif } +void TaskManager::modifyOpacityChanged() +{ + DS_NAMESPACE::DAppletBridge appearanceBridge("org.deepin.ds.dde-appearance"); + auto appearanceApplet = appearanceBridge.applet(); + if (appearanceApplet) { + double opacity = appearanceApplet->property("opacity").toReal(); + auto x11Monitor = qobject_cast(m_windowMonitor.data()); + x11Monitor->setPreviewOpacity(opacity); + }else{ + qWarning() << "modifyOpacityChanged: appearanceApplet is null"; + } +} + D_APPLET_CLASS(TaskManager) } diff --git a/panels/dock/taskmanager/taskmanager.h b/panels/dock/taskmanager/taskmanager.h index 731b929d5..549c5bc97 100644 --- a/panels/dock/taskmanager/taskmanager.h +++ b/panels/dock/taskmanager/taskmanager.h @@ -109,6 +109,7 @@ class TaskManager : public DS_NAMESPACE::DContainment, public AbstractTaskManage private Q_SLOTS: void handleWindowAdded(QPointer window); + void modifyOpacityChanged(); private: void loadDockedAppItems(); diff --git a/panels/dock/taskmanager/x11windowmonitor.cpp b/panels/dock/taskmanager/x11windowmonitor.cpp index ef070f9e2..bf3fa9bc5 100644 --- a/panels/dock/taskmanager/x11windowmonitor.cpp +++ b/panels/dock/taskmanager/x11windowmonitor.cpp @@ -45,6 +45,7 @@ bool XcbEventFilter::nativeEventFilter(const QByteArray &eventType, void *messag X11WindowMonitor::X11WindowMonitor(QObject* parent) : AbstractWindowMonitor(parent) + , m_opacity(0.2) { monitor = this; connect(this, &X11WindowMonitor::windowMapped, this, &X11WindowMonitor::onWindowMapped); @@ -109,6 +110,7 @@ void X11WindowMonitor::showItemPreview(const QPointer &item, QObject* r if (m_windowPreview.isNull()) { m_windowPreview.reset(new X11WindowPreviewContainer(this)); + m_windowPreview->setMaskAlpha(static_cast(m_opacity * 255)); m_windowPreview->windowHandle()->setTransientParent(qobject_cast(relativePositionItem)); } @@ -141,6 +143,14 @@ void X11WindowMonitor::cancelPreviewWindow() .call().waitForFinished(); } +void X11WindowMonitor::setPreviewOpacity(double opacity) +{ + m_opacity = opacity; + if (!m_windowPreview.isNull()) { + m_windowPreview->setMaskAlpha(static_cast(m_opacity * 255)); + } +} + void X11WindowMonitor::onWindowMapped(xcb_window_t xcb_window) { auto window = m_windows.value(xcb_window, nullptr); diff --git a/panels/dock/taskmanager/x11windowmonitor.h b/panels/dock/taskmanager/x11windowmonitor.h index 74c54f982..3a5e7fa84 100644 --- a/panels/dock/taskmanager/x11windowmonitor.h +++ b/panels/dock/taskmanager/x11windowmonitor.h @@ -41,6 +41,7 @@ class X11WindowMonitor : public AbstractWindowMonitor virtual void hideItemPreview() override; void previewWindow(uint32_t winId); void cancelPreviewWindow(); + void setPreviewOpacity(double opacity); Q_SIGNALS: void windowMapped(xcb_window_t window); @@ -62,5 +63,7 @@ private Q_SLOTS: QScopedPointer m_xcbEventFilter; QScopedPointer m_windowPreview; QHash> m_windows; + double m_opacity; + }; }