summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorElijah Newren <newren@gmail.com>2005-11-16 22:27:43 +0000
committerElijah Newren <newren@src.gnome.org>2005-11-16 22:27:43 +0000
commit9c4436733e2cbdfbed889bc8b3f0e935443c6fd7 (patch)
treeb22b72fa0f3f77e9d9758c377e2fcda8840f3518
parentcad637b61f4c74e437bad146784564e68e8d3cfc (diff)
downloadmetacity-9c4436733e2cbdfbed889bc8b3f0e935443c6fd7.tar.gz
handle the case where one strut completely overlaps the other. Patch from
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
-rw-r--r--ChangeLog9
-rw-r--r--src/boxes.c4
-rw-r--r--src/testboxes.c19
3 files changed, 31 insertions, 1 deletions
diff --git a/ChangeLog b/ChangeLog
index 2c803c13..d5ae47f7 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -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__);
}