From cfac6a645d891bf1c1d326c9a46598f7defa456a Mon Sep 17 00:00:00 2001 From: o9000 Date: Wed, 20 Dec 2017 16:47:55 +0100 Subject: [PATCH] Fix alignment when taskbar_distribute_size = 1 and task_align is not left (issue #688) --- src/panel.c | 41 ++++++++++++++++++++++++++++++++++++++++- 1 file changed, 40 insertions(+), 1 deletion(-) diff --git a/src/panel.c b/src/panel.c index a327050..89478ff 100644 --- a/src/panel.c +++ b/src/panel.c @@ -494,9 +494,11 @@ gboolean resize_panel(void *obj) } } - // Distribute the remaining size between tasks + // Distribute the remaining size between taskbars if (num_tasks > 0) { int task_size = total_size / num_tasks; + if (taskbar_alignment != ALIGN_LEFT) + task_size = MIN(task_size, panel_horizontal ? panel_config.g_task.maximum_width : panel_config.g_task.maximum_height); for (int i = 0; i < panel->num_desktops; i++) { Taskbar *taskbar = &panel->taskbar[i]; if (!taskbar->area.on_screen) @@ -513,6 +515,43 @@ gboolean resize_panel(void *obj) taskbar->area.height += task_size; } } + int slack = total_size - task_size * num_tasks; + if (taskbar_alignment == ALIGN_RIGHT) { + for (int i = 0; i < panel->num_desktops; i++) { + Taskbar *taskbar = &panel->taskbar[i]; + if (!taskbar->area.on_screen) + continue; + if (panel_horizontal) + taskbar->area.width += slack; + else + taskbar->area.height += slack; + break; + } + } else if (taskbar_alignment == ALIGN_CENTER) { + slack /= 2; + for (int i = 0; i < panel->num_desktops; i++) { + Taskbar *taskbar = &panel->taskbar[i]; + if (!taskbar->area.on_screen) + continue; + if (panel_horizontal) + taskbar->area.width += slack; + else + taskbar->area.height += slack; + taskbar->area.alignment = ALIGN_RIGHT; + break; + } + for (int i = panel->num_desktops - 1; i >= 0; i--) { + Taskbar *taskbar = &panel->taskbar[i]; + if (!taskbar->area.on_screen) + continue; + if (panel_horizontal) + taskbar->area.width += slack; + else + taskbar->area.height += slack; + taskbar->area.alignment = ALIGN_LEFT; + break; + } + } } else { // No tasks => expand the first visible taskbar for (int i = 0; i < panel->num_desktops; i++) {