SPDX-FileCopyrightText: 2012-2016 Eike Hein <hein@kde.org>
SPDX-FileCopyrightText: 2020 Nate Graham <nate@kde.org>
SPDX-License-Identifier: GPL-2.0-or-later
*/
.import QtQml 2.15 as QtQml
.import org.kde.taskmanager 0.1 as TaskManager
.import org.kde.plasma.core 2.0 as PlasmaCore
function wheelActivateNextPrevTask(anchor, wheelDelta, eventDelta) {
wheelDelta += eventDelta;
var increment = 0;
while (wheelDelta >= 120) {
wheelDelta -= 120;
increment++;
}
while (wheelDelta <= -120) {
wheelDelta += 120;
increment--;
}
while (increment != 0) {
activateNextPrevTask(anchor, increment < 0)
increment += (increment < 0) ? 1 : -1;
}
return wheelDelta;
}
function activateNextPrevTask(anchor, next) {
var taskIndexList = [];
var activeTaskIndex = tasksModel.activeTask;
for (var i = 0; i < taskList.children.length - 1; ++i) {
var task = taskList.children[i];
var modelIndex = task.modelIndex(i);
if (task.m.IsLauncher !== true && task.m.IsStartup !== true) {
if (task.m.IsGroupParent === true) {
if (task == anchor) {
taskIndexList = [];
}
for (var j = 0; j < tasksModel.rowCount(modelIndex); ++j) {
const childModelIndex = tasksModel.makeModelIndex(i, j);
const childHidden = tasksModel.data(childModelIndex, TaskManager.AbstractTasksModel.IsHidden);
if (!plasmoid.configuration.wheelSkipMinimized || !childHidden) {
taskIndexList.push(childModelIndex);
}
}
if (task == anchor) {
break;
}
} else {
if (!plasmoid.configuration.wheelSkipMinimized || !task.m.IsHidden) {
taskIndexList.push(modelIndex);
}
}
}
}
if (!taskIndexList.length) {
return;
}
var target = taskIndexList[0];
for (var i = 0; i < taskIndexList.length; ++i) {
if (taskIndexList[i] === activeTaskIndex)
{
if (next && i < (taskIndexList.length - 1)) {
target = taskIndexList[i + 1];
} else if (!next) {
if (i) {
target = taskIndexList[i - 1];
} else {
target = taskIndexList[taskIndexList.length - 1];
}
}
break;
}
}
tasksModel.requestActivate(target);
}
function activateTask(index, model, modifiers, task) {
if (modifiers & Qt.ShiftModifier) {
tasksModel.requestNewInstance(index);
} else if (model.IsGroupParent === true) {
if (plasmoid.configuration.groupedTaskVisualization === 0) {
let childTaskList = [];
let highestStacking = -1;
let lastUsedTask = undefined;
for (let i = 0; i < tasksModel.rowCount(task.modelIndex(index)); ++i) {
const childTaskModelIndex = tasksModel.makeModelIndex(task.itemIndex, i);
childTaskList.push(childTaskModelIndex);
const stacking = tasksModel.data(childTaskModelIndex, TaskManager.AbstractTasksModel.StackingOrder);
if (stacking > highestStacking) {
highestStacking = stacking;
lastUsedTask = childTaskModelIndex;
}
}
if (!childTaskList.some(index => tasksModel.data(index, TaskManager.AbstractTasksModel.IsActive))) {
tasksModel.requestActivate(lastUsedTask);
} else {
for (let j = 0; j < childTaskList.length; ++j) {
const childTask = childTaskList[j];
if (tasksModel.data(childTask, TaskManager.AbstractTasksModel.IsActive)) {
let nextTask = j + 1;
if (nextTask >= childTaskList.length) {
nextTask = 0;
}
tasksModel.requestActivate(childTaskList[nextTask]);
break;
}
}
}
}
else if (plasmoid.configuration.showToolTips
&& plasmoid.configuration.groupedTaskVisualization === 1
) {
if (tasks.toolTipOpenedByClick) {
task.toolTipAreaItem.hideImmediately();
} else {
tasks.toolTipOpenedByClick = task;
task.showToolTip();
task.toolTipAreaItem.onContainsMouseChanged();
}
}
else if (backend.windowViewAvailable
&& (plasmoid.configuration.groupedTaskVisualization === 2
|| plasmoid.configuration.groupedTaskVisualization === 1)
) {
task.hideToolTipTemporarily();
tasks.activateWindowView(model.WinIdList);
}
else {
if (!!groupDialog) {
task.hideToolTipTemporarily();
groupDialog.visible = false;
} else {
createGroupDialog(task);
}
}
} else {
if (model.IsMinimized === true) {
tasksModel.requestToggleMinimized(index);
tasksModel.requestActivate(index);
} else if (model.IsActive === true && plasmoid.configuration.minimizeActiveTaskOnClick) {
tasksModel.requestToggleMinimized(index);
} else {
tasksModel.requestActivate(index);
}
}
}
function insertIndexAt(above, x, y) {
if (above) {
return above.itemIndex;
} else {
var distance = tasks.vertical ? x : y;
var step = tasks.vertical ? LayoutManager.taskWidth() : LayoutManager.taskHeight();
var stripe = Math.ceil(distance / step);
if (stripe === LayoutManager.calculateStripes()) {
return tasksModel.count - 1;
} else {
return stripe * LayoutManager.tasksPerStripe();
}
}
}
function publishIconGeometries(taskItems) {
for (var i = 0; i < taskItems.length - 1; ++i) {
var task = taskItems[i];
if (task.IsLauncher !== true && task.m.IsStartup !== true) {
tasksModel.requestPublishDelegateGeometry(tasksModel.makeModelIndex(task.itemIndex),
backend.globalRect(task), task);
}
}
}
function taskPrefix(prefix) {
var effectivePrefix;
switch (plasmoid.location) {
case PlasmaCore.Types.LeftEdge:
effectivePrefix = "west-" + prefix;
break;
case PlasmaCore.Types.TopEdge:
effectivePrefix = "north-" + prefix;
break;
case PlasmaCore.Types.RightEdge:
effectivePrefix = "east-" + prefix;
break;
default:
effectivePrefix = "south-" + prefix;
}
return [effectivePrefix, prefix];
}
function taskPrefixHovered(prefix) {
var effectivePrefix = taskPrefix(prefix);
if ("" !== prefix)
effectivePrefix = [
...taskPrefix(prefix + "-hover"),
...taskPrefix("hover"),
...effectivePrefix
];
return effectivePrefix;
}
function createGroupDialog(visualParent) {
if (!visualParent) {
return;
}
if (!!tasks.groupDialog) {
tasks.groupDialog.visualParent = visualParent;
return;
}
if (groupDialogComponent.status === QtQml.Component.Ready) {
tasks.groupDialog = groupDialogComponent.createObject(tasks,
{
visualParent: visualParent,
}
);
}
}