fix(task-manager):修复预览图action内存泄漏

This commit is contained in:
iaom 2024-02-28 15:02:28 +08:00
parent af51dec749
commit 9abab8b9d2
1 changed files with 50 additions and 37 deletions

View File

@ -84,6 +84,7 @@ public:
QDBusServiceWatcher *m_watcher = nullptr;
bool m_connectedToNotificationServer = false;
QString m_activeWindow;
TaskManager::Actions m_windowActions;
private:
UkuiTaskManager *q = nullptr;
@ -96,6 +97,7 @@ UkuiTaskManager::Private::Private(UkuiTaskManager *q) : q(q)
UkuiTaskManager::Private::~Private()
{
qDeleteAll(m_items);
qDeleteAll(m_windowActions);
}
void UkuiTaskManager::Private::loadSettings()
@ -553,45 +555,56 @@ UkuiTaskManager &UkuiTaskManager::self()
TaskManager::Actions UkuiTaskManager::windowActions(const QString &winId)
{
TaskManager::Actions actions;
auto action = new Action("Close", tr("Close"), QIcon::fromTheme("window-close-symbolic"), Action::Type::Close, winId);
actions.append(action);
connect(action, &Action::actionTriggered, this, &UkuiTaskManager::closeWindow);
action = new Action("Restore", tr("Restore"), QIcon::fromTheme("window-restore-symbolic"), Action::Type::Restore, winId);
actions.append(action);
connect(action, &Action::actionTriggered, this, &UkuiTaskManager::restoreWindow);
if(!WindowManager::isMaximized(winId) && !WindowManager::isMinimized(winId)) {
action->setEnabled(false);
if(d->m_windowActions.isEmpty()) {
//关闭
auto action = new Action("Close", tr("Close"), QIcon::fromTheme("window-close-symbolic"), Action::Type::Close, winId);
connect(action, &Action::actionTriggered, this, &UkuiTaskManager::closeWindow);
d->m_windowActions.append(action);
//还原
action = new Action("Restore", tr("Restore"), QIcon::fromTheme("window-restore-symbolic"), Action::Type::Restore, winId);
connect(action, &Action::actionTriggered, this, &UkuiTaskManager::restoreWindow);
d->m_windowActions.append(action);
//最大化
action = new Action("Maximize", tr("Maximize"), QIcon::fromTheme("window-maximize-symbolic"), Action::Type::Maximize, winId);
connect(action, &Action::actionTriggered, this, &UkuiTaskManager::maximizeWindow);
d->m_windowActions.append(action);
//最小化
action = new Action("Minimize", tr("Minimize"), QIcon::fromTheme("window-minimize-symbolic"), Action::Type::Minimize, winId);
connect(action, &Action::actionTriggered, this, &UkuiTaskManager::minimizeWindow);
d->m_windowActions.append(action);
//置顶
action = new Action("Keep above", tr("Keep above"), QIcon::fromTheme("ukui-fixed-symbolic"), Action::Type::KeepAbove, winId);
connect(action, &Action::actionTriggered, this, &UkuiTaskManager::keepAbove);
d->m_windowActions.append(action);
//取消置顶
action = new Action("Unset keep above", tr("Unset keep above"), QIcon::fromTheme("ukui-unfixed-symbolic"), Action::Type::UnsetKeepAbove, winId);
connect(action, &Action::actionTriggered, this, &UkuiTaskManager::unsetKeepAbove);
d->m_windowActions.append(action);
}
action = new Action("Maximize", tr("Maximize"), QIcon::fromTheme("window-maximize-symbolic"), Action::Type::Maximize, winId);
actions.append(action);
connect(actions.last(), &Action::actionTriggered, this, &UkuiTaskManager::maximizeWindow);
if(WindowManager::isMaximized(winId) && !WindowManager::isMinimized(winId)) {
action->setEnabled(false);
for (auto action : d->m_windowActions) {
switch (action->type()) {
case Action::Close:
break;
case Action::Minimize:
action->setEnabled(!WindowManager::isMinimized(winId));
break;
case Action::Maximize:
action->setEnabled(!WindowManager::isMaximized(winId) || WindowManager::isMinimized(winId));
break;
case Action::Restore:
action->setEnabled(WindowManager::isMaximized(winId) || WindowManager::isMinimized(winId));
break;
case Action::KeepAbove:
action->setEnabled(!WindowManager::isKeepAbove(winId));
break;
case Action::UnsetKeepAbove:
action->setEnabled(WindowManager::isKeepAbove(winId));
break;
default:
break;
}
}
action = new Action("Minimize", tr("Minimize"), QIcon::fromTheme("window-minimize-symbolic"), Action::Type::Minimize, winId);
actions.append(action);
connect(action, &Action::actionTriggered, this, &UkuiTaskManager::minimizeWindow);
if(WindowManager::isMinimized(winId)) {
action->setEnabled(false);
}
action = new Action("Keep above", tr("Keep above"), QIcon::fromTheme("ukui-fixed-symbolic"), Action::Type::KeepAbove, winId);
actions.append(action);
connect(action, &Action::actionTriggered, this, &UkuiTaskManager::keepAbove);
if(WindowManager::isKeepAbove(winId)) {
action->setEnabled(false);
}
action = new Action("Unset keep above", tr("Unset keep above"), QIcon::fromTheme("ukui-unfixed-symbolic"), Action::Type::UnsetKeepAbove, winId);
actions.append(action);
connect(action, &Action::actionTriggered, this, &UkuiTaskManager::unsetKeepAbove);
if(!WindowManager::isKeepAbove(winId)) {
action->setEnabled(false);
}
return actions;
return d->m_windowActions;
}
bool UkuiTaskManager::windowIsActivated(const QString &winId)