diff options
-rw-r--r-- | ChangeLog | 9 | ||||
-rw-r--r-- | src/boxes.c | 4 | ||||
-rw-r--r-- | src/testboxes.c | 19 |
3 files changed, 31 insertions, 1 deletions
@@ -1,5 +1,14 @@ 2005-11-16 Elijah Newren <newren@gmail.com> + * 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 <newren@gmail.com> + * src/constraints.c (setup_constraint_info): * src/workspace.[ch]: (meta_workspace_get_onscreen_region, meta_workspace_get_onxinerama_region): 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__); } |