forked from openkylin/ukui-panel
fix(task-manager):修复预览图action内存泄漏
This commit is contained in:
parent
af51dec749
commit
9abab8b9d2
|
@ -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)
|
||||
|
|
Loading…
Reference in New Issue