From 9c4436733e2cbdfbed889bc8b3f0e935443c6fd7 Mon Sep 17 00:00:00 2001 From: Elijah Newren Date: Wed, 16 Nov 2005 22:27:43 +0000 Subject: handle the case where one strut completely overlaps the other. Patch from 2005-11-16 Elijah Newren * src/boxes.c (get_disjoint_strut_list_in_region): handle the case where one strut completely overlaps the other. Patch from Ray Strode. * src/testboxes.c (get_strut_list, test_find_onscreen_edges): add a test case that would segfault without the above fix --- ChangeLog | 9 +++++++++ src/boxes.c | 4 ++++ src/testboxes.c | 19 ++++++++++++++++++- 3 files changed, 31 insertions(+), 1 deletion(-) diff --git a/ChangeLog b/ChangeLog index 2c803c13..d5ae47f7 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,12 @@ +2005-11-16 Elijah Newren + + * src/boxes.c (get_disjoint_strut_list_in_region): handle the case + where one strut completely overlaps the other. Patch from Ray + Strode. + + * src/testboxes.c (get_strut_list, test_find_onscreen_edges): + add a test case that would segfault without the above fix + 2005-11-16 Elijah Newren * src/constraints.c (setup_constraint_info): diff --git a/src/boxes.c b/src/boxes.c index d11c3967..975572b3 100644 --- a/src/boxes.c +++ b/src/boxes.c @@ -1266,6 +1266,10 @@ get_disjoint_strut_list_in_region (const GSList *old_struts, else tmp = replace_rect_with_list (tmp, cur_leftover); compare = replace_rect_with_list (compare, comp_leftover); + + if (compare == NULL) + break; + cur = tmp->data; } diff --git a/src/testboxes.c b/src/testboxes.c index 77762907..127cf261 100644 --- a/src/testboxes.c +++ b/src/testboxes.c @@ -230,7 +230,7 @@ get_strut_list (int which) struts = NULL; - g_assert (which >=0 && which <= 5); + g_assert (which >=0 && which <= 6); switch (which) { case 0: @@ -259,6 +259,10 @@ get_strut_list (int which) struts = g_slist_prepend (struts, new_meta_rect ( 0, 0, 800, 1200)); struts = g_slist_prepend (struts, new_meta_rect ( 800, 10, 800, 1200)); break; + case 6: + struts = g_slist_prepend (struts, new_meta_rect ( 0, 0, 1600, 40)); + struts = g_slist_prepend (struts, new_meta_rect ( 0, 0, 1600, 20)); + break; } return struts; @@ -1108,6 +1112,19 @@ test_find_onscreen_edges () meta_rectangle_free_list_and_elements (tmp); meta_rectangle_free_list_and_elements (edges); + /*************************************************/ + /* Make sure test region 6 has the correct edges */ + /*************************************************/ + edges = get_screen_edges (6); + tmp = NULL; + tmp = g_list_prepend (tmp, new_onscreen_edge ( 0, 1200, 1600, 0, bottom)); + tmp = g_list_prepend (tmp, new_onscreen_edge ( 0, 40, 1600, 0, top)); + tmp = g_list_prepend (tmp, new_onscreen_edge (1600, 40, 0, 1160, right)); + tmp = g_list_prepend (tmp, new_onscreen_edge ( 0, 40, 0, 1160, left)); + verify_edge_lists_are_equal (edges, tmp); + meta_rectangle_free_list_and_elements (tmp); + meta_rectangle_free_list_and_elements (edges); + printf ("%s passed.\n", __PRETTY_FUNCTION__); } -- cgit v1.2.1