mirror of
https://github.com/brl/mutter.git
synced 2024-11-25 09:30:45 -05:00
Avoid some crashes when dragging windows partially offscreen. Possible (or
2007-04-03 Elijah Newren <newren gmail com> Avoid some crashes when dragging windows partially offscreen. Possible (or at least partial) fix for #353513. * src/edge-resistance.c (apply_edge_resistance): be more careful about calls to find_index_of_edge_near_position() returning possibly invalid indices. Also, add a warning comment to find_index_of_edge_near_position(). svn path=/trunk/; revision=3147
This commit is contained in:
parent
930c7ea270
commit
350225ea37
10
ChangeLog
10
ChangeLog
@ -1,3 +1,13 @@
|
|||||||
|
2007-04-03 Elijah Newren <newren gmail com>
|
||||||
|
|
||||||
|
Avoid some crashes when dragging windows partially offscreen.
|
||||||
|
Possible (or at least partial) fix for #353513.
|
||||||
|
|
||||||
|
* src/edge-resistance.c (apply_edge_resistance): be more careful
|
||||||
|
about calls to find_index_of_edge_near_position() returning
|
||||||
|
possibly invalid indices. Also, add a warning comment to
|
||||||
|
find_index_of_edge_near_position().
|
||||||
|
|
||||||
2007-04-03 Elijah Newren <newren gmail com>
|
2007-04-03 Elijah Newren <newren gmail com>
|
||||||
|
|
||||||
Patch from Carlo Wood to do some miscellaneous code cleanups found
|
Patch from Carlo Wood to do some miscellaneous code cleanups found
|
||||||
|
@ -62,6 +62,9 @@ struct MetaEdgeResistanceData
|
|||||||
ResistanceDataForAnEdge bottom_data;
|
ResistanceDataForAnEdge bottom_data;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/* !WARNING!: this function can return invalid indices (namely, either -1 or
|
||||||
|
* edges->len); this is by design, but you need to remember this.
|
||||||
|
*/
|
||||||
static int
|
static int
|
||||||
find_index_of_edge_near_position (const GArray *edges,
|
find_index_of_edge_near_position (const GArray *edges,
|
||||||
int position,
|
int position,
|
||||||
@ -330,6 +333,7 @@ apply_edge_resistance (MetaWindow *window,
|
|||||||
gboolean keyboard_op)
|
gboolean keyboard_op)
|
||||||
{
|
{
|
||||||
int i, begin, end;
|
int i, begin, end;
|
||||||
|
int last_edge;
|
||||||
gboolean increasing = new_pos > old_pos;
|
gboolean increasing = new_pos > old_pos;
|
||||||
int increment = increasing ? 1 : -1;
|
int increment = increasing ? 1 : -1;
|
||||||
|
|
||||||
@ -366,6 +370,13 @@ apply_edge_resistance (MetaWindow *window,
|
|||||||
begin = find_index_of_edge_near_position (edges, old_pos, increasing, xdir);
|
begin = find_index_of_edge_near_position (edges, old_pos, increasing, xdir);
|
||||||
end = find_index_of_edge_near_position (edges, new_pos, !increasing, xdir);
|
end = find_index_of_edge_near_position (edges, new_pos, !increasing, xdir);
|
||||||
|
|
||||||
|
/* begin and end can be outside the array index, if the window is partially
|
||||||
|
* off the screen
|
||||||
|
*/
|
||||||
|
last_edge = edges->len - 1;
|
||||||
|
begin = CLAMP (begin, 0, last_edge);
|
||||||
|
end = CLAMP (end, 0, last_edge);
|
||||||
|
|
||||||
/* Loop over all these edges we're moving past/to. */
|
/* Loop over all these edges we're moving past/to. */
|
||||||
i = begin;
|
i = begin;
|
||||||
while ((increasing && i <= end) ||
|
while ((increasing && i <= end) ||
|
||||||
|
Loading…
Reference in New Issue
Block a user