Skip to content

Commit c210c2a

Browse files
committed
feat: add preview follows the system opacity.
as title. PMS-BUG-314371
1 parent 50edcae commit c210c2a

6 files changed

Lines changed: 51 additions & 0 deletions

File tree

panels/dock/taskmanager/taskmanager.cpp

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -152,6 +152,14 @@ bool TaskManager::init()
152152
m_windowFullscreen = isFullscreen;
153153
emit windowFullscreenChanged(isFullscreen);
154154
});
155+
156+
// 设置preview opacity
157+
DS_NAMESPACE::DAppletBridge appearanceBridge("org.deepin.ds.dde-appearance");
158+
auto appearanceApplet = appearanceBridge.applet();
159+
if (!appearanceApplet.isNull()) {
160+
modifyOpacityChanged();
161+
connect(appearanceApplet, SIGNAL(opacityChanged()), this, SLOT(modifyOpacityChanged()));
162+
}
155163
return true;
156164
}
157165

@@ -418,6 +426,19 @@ void TaskManager::activateWindow(uint32_t windowID)
418426
#endif
419427
}
420428

429+
void TaskManager::modifyOpacityChanged()
430+
{
431+
DS_NAMESPACE::DAppletBridge appearanceBridge("org.deepin.ds.dde-appearance");
432+
auto appearanceApplet = appearanceBridge.applet();
433+
if (!appearanceApplet.isNull()) {
434+
double opacity = appearanceApplet->property("opacity").toReal();
435+
auto x11Monitor = qobject_cast<X11WindowMonitor*>(m_windowMonitor.data());
436+
x11Monitor->setPreviewOpacity(opacity);
437+
}else{
438+
qWarning() << "modifyOpacityChanged: appearanceApplet is null";
439+
}
440+
}
441+
421442
D_APPLET_CLASS(TaskManager)
422443
}
423444

panels/dock/taskmanager/taskmanager.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -101,6 +101,7 @@ class TaskManager : public DS_NAMESPACE::DContainment, public AbstractTaskManage
101101
Q_INVOKABLE void setAppItemWindowIconGeometry(const QString& appid, QObject* relativePositionItem, const int& x1, const int& y1, const int& x2, const int& y2);
102102
Q_INVOKABLE void activateWindow(uint32_t windowID);
103103

104+
104105
Q_SIGNALS:
105106
void dataModelChanged();
106107
void windowSplitChanged();
@@ -109,6 +110,7 @@ class TaskManager : public DS_NAMESPACE::DContainment, public AbstractTaskManage
109110

110111
private Q_SLOTS:
111112
void handleWindowAdded(QPointer<AbstractWindow> window);
113+
void modifyOpacityChanged();
112114

113115
private:
114116
void loadDockedAppItems();

panels/dock/taskmanager/x11preview.cpp

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -401,6 +401,7 @@ X11WindowPreviewContainer::X11WindowPreviewContainer(X11WindowMonitor* monitor,
401401
, m_isDockPreviewCount(0)
402402
, m_model(new AppItemWindowModel(this))
403403
, m_titleWidget(new QWidget())
404+
, m_systemOpacity(0.2)
404405
{
405406
m_hideTimer = new QTimer(this);
406407
m_hideTimer->setSingleShot(true);
@@ -754,4 +755,16 @@ void X11WindowPreviewContainer::updatePreviewIconFromBase64(const QString &base6
754755
m_previewIcon->setPixmap(QIcon::fromTheme(m_previewItem->icon()).pixmap(PREVIEW_TITLE_HEIGHT, PREVIEW_TITLE_HEIGHT));
755756
}
756757
}
758+
759+
double X11WindowPreviewContainer::Opacity() const
760+
{
761+
return m_systemOpacity;
762+
}
763+
764+
void X11WindowPreviewContainer::setOpacity(double opacity)
765+
{
766+
m_systemOpacity = opacity;
767+
update();
768+
}
769+
757770
}

panels/dock/taskmanager/x11preview.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -68,6 +68,8 @@ class X11WindowPreviewContainer: public DBlurEffectWidget
6868
explicit X11WindowPreviewContainer(X11WindowMonitor* monitor, QWidget *parent = nullptr);
6969
void showPreview(const QPointer<AppItem> &item, const QPointer<QWindow> &window, int32_t previewXoffset, int32_t previewYoffset, uint32_t direction);
7070
void hidePreView();
71+
double Opacity() const;
72+
void setOpacity(double opacity);
7173

7274
protected:
7375
bool eventFilter(QObject *watched, QEvent *event) override;
@@ -114,6 +116,7 @@ private Q_SLOTS:
114116
QPointer<AppItem> m_previewItem;
115117

116118
QString m_previewTitleStr;
119+
117120
};
118121

119122
}

panels/dock/taskmanager/x11windowmonitor.cpp

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -109,6 +109,7 @@ void X11WindowMonitor::showItemPreview(const QPointer<AppItem> &item, QObject* r
109109

110110
if (m_windowPreview.isNull()) {
111111
m_windowPreview.reset(new X11WindowPreviewContainer(this));
112+
m_windowPreview->setMaskAlpha(static_cast<int>(m_opacity * 255));
112113
m_windowPreview->windowHandle()->setTransientParent(qobject_cast<QWindow *>(relativePositionItem));
113114
}
114115

@@ -141,6 +142,14 @@ void X11WindowMonitor::cancelPreviewWindow()
141142
.call().waitForFinished();
142143
}
143144

145+
void X11WindowMonitor::setPreviewOpacity(double opacity)
146+
{
147+
m_opacity = opacity;
148+
if (!m_windowPreview.isNull()) {
149+
m_windowPreview->setMaskAlpha(static_cast<int>(m_opacity * 255));
150+
}
151+
}
152+
144153
void X11WindowMonitor::onWindowMapped(xcb_window_t xcb_window)
145154
{
146155
auto window = m_windows.value(xcb_window, nullptr);

panels/dock/taskmanager/x11windowmonitor.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,7 @@ class X11WindowMonitor : public AbstractWindowMonitor
4141
virtual void hideItemPreview() override;
4242
void previewWindow(uint32_t winId);
4343
void cancelPreviewWindow();
44+
void setPreviewOpacity(double opacity);
4445

4546
Q_SIGNALS:
4647
void windowMapped(xcb_window_t window);
@@ -62,5 +63,7 @@ private Q_SLOTS:
6263
QScopedPointer<XcbEventFilter> m_xcbEventFilter;
6364
QScopedPointer<X11WindowPreviewContainer> m_windowPreview;
6465
QHash<xcb_window_t, QSharedPointer<X11Window>> m_windows;
66+
double m_opacity;
67+
6568
};
6669
}

0 commit comments

Comments
 (0)