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;
|
QDBusServiceWatcher *m_watcher = nullptr;
|
||||||
bool m_connectedToNotificationServer = false;
|
bool m_connectedToNotificationServer = false;
|
||||||
QString m_activeWindow;
|
QString m_activeWindow;
|
||||||
|
TaskManager::Actions m_windowActions;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
UkuiTaskManager *q = nullptr;
|
UkuiTaskManager *q = nullptr;
|
||||||
|
@ -96,6 +97,7 @@ UkuiTaskManager::Private::Private(UkuiTaskManager *q) : q(q)
|
||||||
UkuiTaskManager::Private::~Private()
|
UkuiTaskManager::Private::~Private()
|
||||||
{
|
{
|
||||||
qDeleteAll(m_items);
|
qDeleteAll(m_items);
|
||||||
|
qDeleteAll(m_windowActions);
|
||||||
}
|
}
|
||||||
|
|
||||||
void UkuiTaskManager::Private::loadSettings()
|
void UkuiTaskManager::Private::loadSettings()
|
||||||
|
@ -553,45 +555,56 @@ UkuiTaskManager &UkuiTaskManager::self()
|
||||||
|
|
||||||
TaskManager::Actions UkuiTaskManager::windowActions(const QString &winId)
|
TaskManager::Actions UkuiTaskManager::windowActions(const QString &winId)
|
||||||
{
|
{
|
||||||
TaskManager::Actions actions;
|
if(d->m_windowActions.isEmpty()) {
|
||||||
auto action = new Action("Close", tr("Close"), QIcon::fromTheme("window-close-symbolic"), Action::Type::Close, winId);
|
//关闭
|
||||||
actions.append(action);
|
auto action = new Action("Close", tr("Close"), QIcon::fromTheme("window-close-symbolic"), Action::Type::Close, winId);
|
||||||
connect(action, &Action::actionTriggered, this, &UkuiTaskManager::closeWindow);
|
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);
|
//还原
|
||||||
actions.append(action);
|
action = new Action("Restore", tr("Restore"), QIcon::fromTheme("window-restore-symbolic"), Action::Type::Restore, winId);
|
||||||
connect(action, &Action::actionTriggered, this, &UkuiTaskManager::restoreWindow);
|
connect(action, &Action::actionTriggered, this, &UkuiTaskManager::restoreWindow);
|
||||||
if(!WindowManager::isMaximized(winId) && !WindowManager::isMinimized(winId)) {
|
d->m_windowActions.append(action);
|
||||||
action->setEnabled(false);
|
//最大化
|
||||||
|
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);
|
||||||
}
|
}
|
||||||
|
for (auto action : d->m_windowActions) {
|
||||||
action = new Action("Maximize", tr("Maximize"), QIcon::fromTheme("window-maximize-symbolic"), Action::Type::Maximize, winId);
|
switch (action->type()) {
|
||||||
actions.append(action);
|
case Action::Close:
|
||||||
connect(actions.last(), &Action::actionTriggered, this, &UkuiTaskManager::maximizeWindow);
|
break;
|
||||||
if(WindowManager::isMaximized(winId) && !WindowManager::isMinimized(winId)) {
|
case Action::Minimize:
|
||||||
action->setEnabled(false);
|
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;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
return d->m_windowActions;
|
||||||
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;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
bool UkuiTaskManager::windowIsActivated(const QString &winId)
|
bool UkuiTaskManager::windowIsActivated(const QString &winId)
|
||||||
|
|
Loading…
Reference in New Issue