Minor improvements to taskbar_sort_order = center (issue 478)

git-svn-id: http://tint2.googlecode.com/svn/trunk@752 121b4492-b84c-0410-8b4c-0d4edfb3f3cc
This commit is contained in:
o9000 2015-04-12 20:02:58 +00:00 committed by mrovi9000@gmail.com
parent eb1244a415
commit 7d70189bee

View file

@ -432,11 +432,40 @@ gint compare_tasks_trivial(Task *a, Task *b, Taskbar *taskbar)
return NONTRIVIAL; return NONTRIVIAL;
} }
gint contained_within(Task *a, Task *b)
{
if ((a->win_x <= b->win_x) &&
(a->win_y <= b->win_y) &&
(a->win_x + a->win_w >= b->win_x + b->win_w) &&
(a->win_y + a->win_h >= b->win_y + b->win_h)) {
return 1;
}
return 0;
}
gint compare_task_centers(Task *a, Task *b, Taskbar *taskbar) gint compare_task_centers(Task *a, Task *b, Taskbar *taskbar)
{ {
int trivial = compare_tasks_trivial(a, b, taskbar); int trivial = compare_tasks_trivial(a, b, taskbar);
if (trivial != NONTRIVIAL) if (trivial != NONTRIVIAL)
return trivial; return trivial;
// If a window has the same coordinates and size as the other,
// they are considered to be equal in the comparison.
if ((a->win_x == b->win_x) &&
(a->win_y == b->win_y) &&
(a->win_w == b->win_w) &&
(a->win_h == b->win_h)) {
return 0;
}
// If a window is completely contained in another,
// then it is considered to come after (to the right/bottom) of the other.
if (contained_within(a, b))
return -1;
if (contained_within(b, a))
return 1;
// Compare centers
int a_horiz_c, a_vert_c, b_horiz_c, b_vert_c; int a_horiz_c, a_vert_c, b_horiz_c, b_vert_c;
a_horiz_c = a->win_x + a->win_w / 2; a_horiz_c = a->win_x + a->win_w / 2;
b_horiz_c = b->win_x + b->win_w / 2; b_horiz_c = b->win_x + b->win_w / 2;