Skip to content

Commit e58cd30

Browse files
committed
pref: using map-reduce to fetch window preview for x11
Avoid lagging during multi window preview.
1 parent 5a69c64 commit e58cd30

File tree

2 files changed

+20
-14
lines changed

2 files changed

+20
-14
lines changed

panels/dock/taskmanager/CMakeLists.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -83,6 +83,7 @@ qt_generate_wayland_protocol_client_sources(dock-taskmanager
8383
target_link_libraries(dock-taskmanager PRIVATE
8484
dde-shell-frame
8585
Qt${QT_VERSION_MAJOR}::WaylandClientPrivate
86+
Qt${QT_VERSION_MAJOR}::Concurrent
8687
yaml-cpp
8788
PkgConfig::WaylandClient
8889
)

panels/dock/taskmanager/x11preview.cpp

Lines changed: 19 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -11,22 +11,23 @@
1111
#include <cstdint>
1212
#include <unistd.h>
1313

14-
#include <QFile>
15-
#include <QTimer>
16-
#include <QEvent>
17-
#include <QWindow>
18-
#include <QPixmap>
19-
#include <QLayout>
20-
#include <QScreen>
21-
#include <QPainter>
14+
#include <DIconButton>
2215
#include <QByteArray>
23-
#include <QDBusReply>
24-
#include <QMouseEvent>
2516
#include <QDBusInterface>
26-
#include <QLoggingCategory>
17+
#include <QDBusReply>
2718
#include <QDBusUnixFileDescriptor>
19+
#include <QEvent>
20+
#include <QFile>
21+
#include <QLayout>
22+
#include <QLoggingCategory>
23+
#include <QMouseEvent>
24+
#include <QPainter>
2825
#include <QPainterPath>
29-
#include <DIconButton>
26+
#include <QPixmap>
27+
#include <QScreen>
28+
#include <QTimer>
29+
#include <QWindow>
30+
#include <QtConcurrent>
3031

3132
#include <DStyle>
3233
#include <DPlatformHandle>
@@ -161,9 +162,13 @@ class AppItemWindowModel : public QAbstractListModel
161162
{
162163
m_previewPixmaps.clear();
163164
if (!m_item.isNull()) {
164-
for (const auto &window : m_item->getAppendWindows()) {
165+
const auto previewPixmaps = QtConcurrent::blockingMapped(m_item->getAppendWindows(), [this](const QPointer<AbstractWindow> &window) {
165166
auto previewPixmap = fetchWindowPreview(window->id());
166-
m_previewPixmaps.insert(window->id(), previewPixmap);
167+
return QPair<uint32_t, QPixmap>{window->id(), previewPixmap};
168+
});
169+
170+
for (const auto &item : previewPixmaps) {
171+
m_previewPixmaps.insert(item.first, item.second);
167172
}
168173
}
169174
}

0 commit comments

Comments
 (0)