Excellent-- here's a patch. What does it show you?
Index: core/edge-resistance.c
===================================================================
--- core/edge-resistance.c (revision 4070)
+++ core/edge-resistance.c (working copy)
@@ -229,6 +229,7 @@
/* Start the search at mid */
edge = g_array_index (edges, MetaEdge*, mid);
compare = horizontal ? edge->rect.x : edge->rect.y;
+ meta_warning ("Calling MREA from %d\n", __LINE__);
edges_align = meta_rectangle_edge_aligns (new_rect, edge);
if (edges_align &&
(!only_forward || !points_on_same_side (position, compare,
old_position)))
@@ -388,6 +389,7 @@
int compare = xdir ? edge->rect.x : edge->rect.y;
/* Find out if this edge is relevant */
+ meta_warning ("Calling MREA from %d\n", __LINE__);
edges_align = meta_rectangle_edge_aligns (new_rect, edge) ||
meta_rectangle_edge_aligns (old_rect, edge);
Index: core/boxes.c
===================================================================
--- core/boxes.c (revision 4070)
+++ core/boxes.c (working copy)
@@ -1158,7 +1158,12 @@
return BOX_LEFT (*rect) <= BOX_RIGHT (edge->rect) &&
BOX_LEFT (edge->rect) <= BOX_RIGHT (*rect);
default:
- g_assert_not_reached ();
+ {
+ char text[30];
+ meta_rectangle_edge_to_string (edge, text);
+ meta_warning ("We would crash here. Edge is %s.", text);
+ return FALSE;
+ }
}
}