forked from openkylin/ukui-panel
perf(task-manager):优化窗口更新信号处理机制
This commit is contained in:
parent
d9e8959455
commit
900c9adf4a
|
@ -32,32 +32,32 @@
|
||||||
<context>
|
<context>
|
||||||
<name>TaskManager::UkuiTaskManager</name>
|
<name>TaskManager::UkuiTaskManager</name>
|
||||||
<message>
|
<message>
|
||||||
<location filename="ukui-task-manager.cpp" line="511"/>
|
<location filename="ukui-task-manager.cpp" line="586"/>
|
||||||
<source>Close</source>
|
<source>Close</source>
|
||||||
<translation>关闭</translation>
|
<translation>关闭</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="ukui-task-manager.cpp" line="515"/>
|
<location filename="ukui-task-manager.cpp" line="590"/>
|
||||||
<source>Restore</source>
|
<source>Restore</source>
|
||||||
<translation>还原</translation>
|
<translation>还原</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="ukui-task-manager.cpp" line="522"/>
|
<location filename="ukui-task-manager.cpp" line="597"/>
|
||||||
<source>Maximize</source>
|
<source>Maximize</source>
|
||||||
<translation>最大化</translation>
|
<translation>最大化</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="ukui-task-manager.cpp" line="529"/>
|
<location filename="ukui-task-manager.cpp" line="604"/>
|
||||||
<source>Minimize</source>
|
<source>Minimize</source>
|
||||||
<translation>最小化</translation>
|
<translation>最小化</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="ukui-task-manager.cpp" line="536"/>
|
<location filename="ukui-task-manager.cpp" line="611"/>
|
||||||
<source>Keep above</source>
|
<source>Keep above</source>
|
||||||
<translation>置顶</translation>
|
<translation>置顶</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="ukui-task-manager.cpp" line="542"/>
|
<location filename="ukui-task-manager.cpp" line="617"/>
|
||||||
<source>Unset keep above</source>
|
<source>Unset keep above</source>
|
||||||
<translation>取消置顶</translation>
|
<translation>取消置顶</translation>
|
||||||
</message>
|
</message>
|
||||||
|
|
|
@ -319,6 +319,59 @@ void TaskManagerItem::windowChanged(const QString &winID)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void TaskManagerItem::iconChanged(const QString &windowId)
|
||||||
|
{
|
||||||
|
Q_UNUSED(windowId)
|
||||||
|
if(!hasLauncher()) {
|
||||||
|
d->m_icon = WindowManager::windowIcon(winIDs().at(0));
|
||||||
|
if(d->m_icon.isNull()) {
|
||||||
|
d->m_icon = d->m_xdf.icon();
|
||||||
|
}
|
||||||
|
Q_EMIT dataUpdated(QVector<int>{UkuiTaskManager::Icon});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void TaskManagerItem::titleChanged(const QString &windowId)
|
||||||
|
{
|
||||||
|
Q_UNUSED(windowId)
|
||||||
|
if(!hasLauncher()) {
|
||||||
|
if (d->m_name.isEmpty()) {
|
||||||
|
d->m_name = WindowManager::windowTitle(winIDs().at(0));
|
||||||
|
}
|
||||||
|
Q_EMIT dataUpdated(QVector<int>{UkuiTaskManager::Name});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void TaskManagerItem::desktopChanged(const QString &windowId)
|
||||||
|
{
|
||||||
|
if(currentDesktopWinIDs().contains(windowId)) {
|
||||||
|
if(!WindowManager::isOnAllDesktops(windowId) && !WindowManager::isOnCurrentDesktop(windowId)) {
|
||||||
|
d->m_winIDsOnCurrentDesktop.removeAll(windowId);
|
||||||
|
Q_EMIT dataUpdated(QVector<int>{UkuiTaskManager::CurrentDesktopWinIDList});
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
if(WindowManager::isOnAllDesktops(windowId) || WindowManager::isOnCurrentDesktop(windowId)) {
|
||||||
|
d->m_winIDsOnCurrentDesktop.append(windowId);
|
||||||
|
Q_EMIT dataUpdated(QVector<int>{UkuiTaskManager::CurrentDesktopWinIDList});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void TaskManagerItem::demandsAttentionChanged(const QString &windowId)
|
||||||
|
{
|
||||||
|
if(WindowManager::isDemandsAttention(windowId)) {
|
||||||
|
if(!d->m_demandsAttentionWinIDs.contains(windowId)) {
|
||||||
|
d->m_demandsAttentionWinIDs.append(windowId);
|
||||||
|
Q_EMIT dataUpdated(QVector<int>{UkuiTaskManager::DemandsAttentionWinIDList});
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
if(d->m_demandsAttentionWinIDs.contains(windowId)) {
|
||||||
|
d->m_demandsAttentionWinIDs.removeAll(windowId);
|
||||||
|
Q_EMIT dataUpdated(QVector<int>{UkuiTaskManager::DemandsAttentionWinIDList});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void TaskManagerItem::refreshWinIdsOnCurrentDesktop()
|
void TaskManagerItem::refreshWinIdsOnCurrentDesktop()
|
||||||
{
|
{
|
||||||
d->m_winIDsOnCurrentDesktop.clear();
|
d->m_winIDsOnCurrentDesktop.clear();
|
||||||
|
|
|
@ -47,6 +47,11 @@ public:
|
||||||
void addWinID(const QString &winID);
|
void addWinID(const QString &winID);
|
||||||
void removeWinID(const QString &winID);
|
void removeWinID(const QString &winID);
|
||||||
void windowChanged(const QString &winID);
|
void windowChanged(const QString &winID);
|
||||||
|
void iconChanged(const QString& windowId);
|
||||||
|
void titleChanged(const QString& windowId);
|
||||||
|
void desktopChanged(const QString& windowId);
|
||||||
|
void demandsAttentionChanged(const QString& windowId);
|
||||||
|
|
||||||
const QString &group() const;
|
const QString &group() const;
|
||||||
void setGroup(const QString &group);
|
void setGroup(const QString &group);
|
||||||
bool hasLauncher() const;
|
bool hasLauncher() const;
|
||||||
|
|
|
@ -56,9 +56,13 @@ public:
|
||||||
explicit Private(UkuiTaskManager *q = nullptr);
|
explicit Private(UkuiTaskManager *q = nullptr);
|
||||||
~Private();
|
~Private();
|
||||||
|
|
||||||
void onWindowAdded(const QString &windowId);
|
void windowAdded(const QString &windowId);
|
||||||
void onWindowRemoved(const QString &windowId);
|
void windowRemoved(const QString &windowId);
|
||||||
void onWindowChanged(const QString& windowId);
|
void iconChanged(const QString& windowId);
|
||||||
|
void titleChanged(const QString& windowId);
|
||||||
|
void desktopChanged(const QString& windowId);
|
||||||
|
void demandsAttentionChanged(const QString& windowId);
|
||||||
|
void skipTaskbarChanged(const QString& windowId);
|
||||||
void loadSettings();
|
void loadSettings();
|
||||||
void save() const;
|
void save() const;
|
||||||
void loadWindows();
|
void loadWindows();
|
||||||
|
@ -118,7 +122,7 @@ void UkuiTaskManager::Private::loadSettings()
|
||||||
m_settings->endGroup();
|
m_settings->endGroup();
|
||||||
}
|
}
|
||||||
|
|
||||||
void UkuiTaskManager::Private::onWindowAdded(const QString &windowId)
|
void UkuiTaskManager::Private::windowAdded(const QString &windowId)
|
||||||
{
|
{
|
||||||
//过滤不需要显示的窗口
|
//过滤不需要显示的窗口
|
||||||
if(WindowManager::skipTaskBar(windowId)) {
|
if(WindowManager::skipTaskBar(windowId)) {
|
||||||
|
@ -142,7 +146,7 @@ void UkuiTaskManager::Private::onWindowAdded(const QString &windowId)
|
||||||
newItem(windowId);
|
newItem(windowId);
|
||||||
}
|
}
|
||||||
|
|
||||||
void UkuiTaskManager::Private::onWindowRemoved(const QString &windowId)
|
void UkuiTaskManager::Private::windowRemoved(const QString &windowId)
|
||||||
{
|
{
|
||||||
for (int index = 0; index < m_items.size(); ++index) {
|
for (int index = 0; index < m_items.size(); ++index) {
|
||||||
auto item = m_items.at(index);
|
auto item = m_items.at(index);
|
||||||
|
@ -158,7 +162,43 @@ void UkuiTaskManager::Private::onWindowRemoved(const QString &windowId)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void UkuiTaskManager::Private::onWindowChanged(const QString &windowId)
|
void UkuiTaskManager::Private::iconChanged(const QString &windowId)
|
||||||
|
{
|
||||||
|
for(const auto item : m_items) {
|
||||||
|
if(item->winIDs().contains(windowId)) {
|
||||||
|
item->iconChanged(windowId);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void UkuiTaskManager::Private::titleChanged(const QString &windowId)
|
||||||
|
{
|
||||||
|
for(const auto item : m_items) {
|
||||||
|
if(item->winIDs().contains(windowId)) {
|
||||||
|
item->titleChanged(windowId);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void UkuiTaskManager::Private::desktopChanged(const QString &windowId)
|
||||||
|
{
|
||||||
|
for(const auto item : m_items) {
|
||||||
|
if(item->winIDs().contains(windowId)) {
|
||||||
|
item->desktopChanged(windowId);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void UkuiTaskManager::Private::demandsAttentionChanged(const QString &windowId)
|
||||||
|
{
|
||||||
|
for(const auto item : m_items) {
|
||||||
|
if(item->winIDs().contains(windowId)) {
|
||||||
|
item->demandsAttentionChanged(windowId);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void UkuiTaskManager::Private::skipTaskbarChanged(const QString &windowId)
|
||||||
{
|
{
|
||||||
bool skipTaskBar = WindowManager::skipTaskBar(windowId);
|
bool skipTaskBar = WindowManager::skipTaskBar(windowId);
|
||||||
QString windowGroup = WindowManager::windowGroup(windowId);
|
QString windowGroup = WindowManager::windowGroup(windowId);
|
||||||
|
@ -173,8 +213,6 @@ void UkuiTaskManager::Private::onWindowChanged(const QString &windowId)
|
||||||
delete m_items.takeAt(index);
|
delete m_items.takeAt(index);
|
||||||
q->endRemoveRows();
|
q->endRemoveRows();
|
||||||
}
|
}
|
||||||
} else {
|
|
||||||
item->windowChanged(windowId);
|
|
||||||
}
|
}
|
||||||
handled = true;
|
handled = true;
|
||||||
break;
|
break;
|
||||||
|
@ -194,7 +232,7 @@ void UkuiTaskManager::Private::onWindowChanged(const QString &windowId)
|
||||||
void UkuiTaskManager::Private::loadWindows()
|
void UkuiTaskManager::Private::loadWindows()
|
||||||
{
|
{
|
||||||
for (const QString &winID: WindowManager::windows()) {
|
for (const QString &winID: WindowManager::windows()) {
|
||||||
onWindowAdded(winID);
|
windowAdded(winID);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -280,25 +318,28 @@ UkuiTaskManager::UkuiTaskManager(QObject *parent) : QAbstractListModel(parent),
|
||||||
//加载当前打开的窗口
|
//加载当前打开的窗口
|
||||||
d->loadWindows();
|
d->loadWindows();
|
||||||
connect(WindowManager::self(), &WindowManager::windowAdded, this, [&](const QString &winId) {
|
connect(WindowManager::self(), &WindowManager::windowAdded, this, [&](const QString &winId) {
|
||||||
d->onWindowAdded(winId);
|
d->windowAdded(winId);
|
||||||
});
|
});
|
||||||
connect(WindowManager::self(), &WindowManager::windowRemoved, this, [&](const QString &winId) {
|
connect(WindowManager::self(), &WindowManager::windowRemoved, this, [&](const QString &winId) {
|
||||||
d->onWindowRemoved(winId);
|
d->windowRemoved(winId);
|
||||||
});
|
});
|
||||||
connect(WindowManager::self(), &WindowManager::titleChanged, this, [&](const QString &winId) {
|
connect(WindowManager::self(), &WindowManager::titleChanged, this, [&](const QString &winId) {
|
||||||
d->onWindowChanged(winId);
|
d->titleChanged(winId);
|
||||||
});
|
});
|
||||||
connect(WindowManager::self(), &WindowManager::iconChanged, this, [&](const QString &winId) {
|
connect(WindowManager::self(), &WindowManager::iconChanged, this, [&](const QString &winId) {
|
||||||
d->onWindowChanged(winId);
|
d->iconChanged(winId);
|
||||||
});
|
});
|
||||||
connect(WindowManager::self(), &WindowManager::onAllDesktopsChanged, this, [&](const QString &winId) {
|
connect(WindowManager::self(), &WindowManager::onAllDesktopsChanged, this, [&](const QString &winId) {
|
||||||
d->onWindowChanged(winId);
|
d->desktopChanged(winId);
|
||||||
|
});
|
||||||
|
connect(WindowManager::self(), &WindowManager::windowDesktopChanged, this, [&](const QString &winId) {
|
||||||
|
d->desktopChanged(winId);
|
||||||
});
|
});
|
||||||
connect(WindowManager::self(), &WindowManager::demandsAttentionChanged, this, [&](const QString &winId) {
|
connect(WindowManager::self(), &WindowManager::demandsAttentionChanged, this, [&](const QString &winId) {
|
||||||
d->onWindowChanged(winId);
|
d->demandsAttentionChanged(winId);
|
||||||
});
|
});
|
||||||
connect(WindowManager::self(), &WindowManager::skipTaskbarChanged, this, [&](const QString &winId) {
|
connect(WindowManager::self(), &WindowManager::skipTaskbarChanged, this, [&](const QString &winId) {
|
||||||
d->onWindowChanged(winId);
|
d->skipTaskbarChanged(winId);
|
||||||
});
|
});
|
||||||
auto conn = QDBusConnection::sessionBus();
|
auto conn = QDBusConnection::sessionBus();
|
||||||
d->m_watcher = new QDBusServiceWatcher(QStringLiteral("org.freedesktop.Notifications"),
|
d->m_watcher = new QDBusServiceWatcher(QStringLiteral("org.freedesktop.Notifications"),
|
||||||
|
|
|
@ -64,6 +64,7 @@ WindowManager::WindowManager(QObject *parent) : QObject(parent)
|
||||||
connect(WindowManagerPrivate::interface(), &AbstractWindowManager::iconChanged, this, &WindowManager::iconChanged);
|
connect(WindowManagerPrivate::interface(), &AbstractWindowManager::iconChanged, this, &WindowManager::iconChanged);
|
||||||
connect(WindowManagerPrivate::interface(), &AbstractWindowManager::skipTaskbarChanged, this, &WindowManager::skipTaskbarChanged);
|
connect(WindowManagerPrivate::interface(), &AbstractWindowManager::skipTaskbarChanged, this, &WindowManager::skipTaskbarChanged);
|
||||||
connect(WindowManagerPrivate::interface(), &AbstractWindowManager::onAllDesktopsChanged, this, &WindowManager::onAllDesktopsChanged);
|
connect(WindowManagerPrivate::interface(), &AbstractWindowManager::onAllDesktopsChanged, this, &WindowManager::onAllDesktopsChanged);
|
||||||
|
connect(WindowManagerPrivate::interface(), &AbstractWindowManager::windowDesktopChanged, this, &WindowManager::windowDesktopChanged);
|
||||||
connect(WindowManagerPrivate::interface(), &AbstractWindowManager::demandsAttentionChanged, this, &WindowManager::demandsAttentionChanged);
|
connect(WindowManagerPrivate::interface(), &AbstractWindowManager::demandsAttentionChanged, this, &WindowManager::demandsAttentionChanged);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -64,6 +64,7 @@ Q_SIGNALS:
|
||||||
void iconChanged(QString wid);
|
void iconChanged(QString wid);
|
||||||
void skipTaskbarChanged(QString wid);
|
void skipTaskbarChanged(QString wid);
|
||||||
void onAllDesktopsChanged(QString wid);
|
void onAllDesktopsChanged(QString wid);
|
||||||
|
void windowDesktopChanged(QString wid);
|
||||||
void demandsAttentionChanged(QString wid);
|
void demandsAttentionChanged(QString wid);
|
||||||
private:
|
private:
|
||||||
WindowManager(QObject *parent = nullptr);
|
WindowManager(QObject *parent = nullptr);
|
||||||
|
|
Loading…
Reference in New Issue