diff --git a/applets/taskmanager/package/contents/code/layout.js b/applets/taskmanager/package/contents/code/layout.js --- a/applets/taskmanager/package/contents/code/layout.js +++ b/applets/taskmanager/package/contents/code/layout.js @@ -38,15 +38,15 @@ } function launcherLayoutTasks() { - return Math.round(tasksModel.launcherCount / Math.floor(preferredMinWidth() / launcherWidth())); + return Math.round(tasksModel.logicalLauncherCount / Math.floor(preferredMinWidth() / launcherWidth())); } function launcherLayoutWidthDiff() { - return (launcherLayoutTasks() * taskWidth()) - (tasksModel.launcherCount * launcherWidth()); + return (launcherLayoutTasks() * taskWidth()) - (tasksModel.logicalLauncherCount * launcherWidth()); } function logicalTaskCount() { - var count = (tasksModel.count - tasksModel.launcherCount) + launcherLayoutTasks(); + var count = (tasksModel.count - tasksModel.logicalLauncherCount) + launcherLayoutTasks(); return Math.max(tasksModel.count ? 1 : 0, count); } @@ -197,15 +197,15 @@ function layout(container) { var item; var stripes = calculateStripes(); - var taskCount = tasksModel.count - tasksModel.launcherCount; + var taskCount = tasksModel.count - tasksModel.logicalLauncherCount; var width = taskWidth(); var adjustedWidth = width; var height = taskHeight(); if (!tasks.vertical && stripes == 1 && taskCount) { - var shrink = ((tasksModel.count - tasksModel.launcherCount) * preferredMaxWidth()) - + (tasksModel.launcherCount * launcherWidth()) > taskList.width; + var shrink = ((tasksModel.count - tasksModel.logicalLauncherCount) * preferredMaxWidth()) + + (tasksModel.logicalLauncherCount * launcherWidth()) > taskList.width; width = Math.min(shrink ? width + Math.floor(launcherLayoutWidthDiff() / taskCount) : width, preferredMaxWidth()); } @@ -220,9 +220,10 @@ adjustedWidth = width; if (!tasks.vertical && !tasks.iconsOnly && (plasmoid.configuration.separateLaunchers || stripes == 1)) { - if (item.m.IsLauncher === true) { + if (item.m.IsLauncher === true + || (!plasmoid.configuration.separateLaunchers && item.m.IsStartup === true && item.m.HasLauncher === true)) { adjustedWidth = launcherWidth(); - } else if (stripes > 1 && i == tasksModel.launcherCount) { + } else if (stripes > 1 && i == tasksModel.logicalLauncherCount) { adjustedWidth += launcherLayoutWidthDiff(); } } diff --git a/applets/taskmanager/package/contents/ui/main.qml b/applets/taskmanager/package/contents/ui/main.qml --- a/applets/taskmanager/package/contents/ui/main.qml +++ b/applets/taskmanager/package/contents/ui/main.qml @@ -88,6 +88,24 @@ TaskManager.TasksModel { id: tasksModel + readonly property int logicalLauncherCount: { + if (plasmoid.configuration.separateLaunchers) { + return launcherCount; + } + + var startupsWithLaunchers = 0; + + for (var i = 0; i < taskRepeater.count; ++i) { + var item = taskRepeater.itemAt(i); + + if (item && item.m.IsStartup === true && item.m.HasLauncher === true) { + ++startupsWithLaunchers; + } + } + + return launcherCount + startupsWithLaunchers; + } + virtualDesktop: virtualDesktopInfo.currentDesktop screenGeometry: plasmoid.screenGeometry activity: activityInfo.currentActivity