Ignore edge resistance for size-increment windows when resizing with the

2006-10-02  Elijah Newren  <newren gmail com>

	Ignore edge resistance for size-increment windows when resizing
	with the keyboard.  #346782.

	* src/edge-resistance.c (apply_edge_resistance_to_each_side):
	ignore edge resistance for size-increment windows when resizing
	with the keyboard, (apply_edge_resistance_to_each_side,
	meta_window_edge_resistance_for_move,
	meta_window_edge_resistance_for_resize): pass a is_resize
	parameter as well
This commit is contained in:
Elijah Newren 2006-10-02 22:48:40 +00:00 committed by Elijah Newren
parent c4fa0d118c
commit 25910508ae
2 changed files with 84 additions and 44 deletions

View File

@ -1,3 +1,15 @@
2006-10-02 Elijah Newren <newren gmail com>
Ignore edge resistance for size-increment windows when resizing
with the keyboard. #346782.
* src/edge-resistance.c (apply_edge_resistance_to_each_side):
ignore edge resistance for size-increment windows when resizing
with the keyboard, (apply_edge_resistance_to_each_side,
meta_window_edge_resistance_for_move,
meta_window_edge_resistance_for_resize): pass a is_resize
parameter as well
2006-10-01 Elijah Newren <newren gmail com> 2006-10-01 Elijah Newren <newren gmail com>
* src/display.c (meta_display_set_input_focus_window): * src/display.c (meta_display_set_input_focus_window):

View File

@ -530,7 +530,8 @@ apply_edge_resistance_to_each_side (MetaDisplay *display,
MetaRectangle *new_outer, MetaRectangle *new_outer,
GSourceFunc timeout_func, GSourceFunc timeout_func,
gboolean auto_snap, gboolean auto_snap,
gboolean keyboard_op) gboolean keyboard_op,
gboolean is_resize)
{ {
MetaEdgeResistanceData *edge_data; MetaEdgeResistanceData *edge_data;
MetaRectangle modified_rect; MetaRectangle modified_rect;
@ -577,47 +578,68 @@ apply_edge_resistance_to_each_side (MetaDisplay *display,
} }
else else
{ {
/* Now, apply the normal edge resistance */ /* Disable edge resistance for resizes when windows have size
new_left = apply_edge_resistance (window, * increment hints; see #346782. For all other cases, apply
BOX_LEFT (*old_outer), * them.
BOX_LEFT (*new_outer), */
old_outer, if (!is_resize || window->size_hints.width_inc == 1)
new_outer, {
edge_data->left_edges, /* Now, apply the normal horizontal edge resistance */
&edge_data->left_data, new_left = apply_edge_resistance (window,
timeout_func, BOX_LEFT (*old_outer),
TRUE, BOX_LEFT (*new_outer),
keyboard_op); old_outer,
new_right = apply_edge_resistance (window, new_outer,
BOX_RIGHT (*old_outer), edge_data->left_edges,
BOX_RIGHT (*new_outer), &edge_data->left_data,
old_outer, timeout_func,
new_outer, TRUE,
edge_data->right_edges, keyboard_op);
&edge_data->right_data, new_right = apply_edge_resistance (window,
timeout_func, BOX_RIGHT (*old_outer),
TRUE, BOX_RIGHT (*new_outer),
keyboard_op); old_outer,
new_top = apply_edge_resistance (window, new_outer,
BOX_TOP (*old_outer), edge_data->right_edges,
BOX_TOP (*new_outer), &edge_data->right_data,
old_outer, timeout_func,
new_outer, TRUE,
edge_data->top_edges, keyboard_op);
&edge_data->top_data, }
timeout_func, else
FALSE, {
keyboard_op); new_left = new_outer->x;
new_bottom = apply_edge_resistance (window, new_right = new_outer->x + new_outer->width;
BOX_BOTTOM (*old_outer), }
BOX_BOTTOM (*new_outer), /* Same for vertical resizes... */
old_outer, if (!is_resize || window->size_hints.height_inc == 1)
new_outer, {
edge_data->bottom_edges, new_top = apply_edge_resistance (window,
&edge_data->bottom_data, BOX_TOP (*old_outer),
timeout_func, BOX_TOP (*new_outer),
FALSE, old_outer,
keyboard_op); new_outer,
edge_data->top_edges,
&edge_data->top_data,
timeout_func,
FALSE,
keyboard_op);
new_bottom = apply_edge_resistance (window,
BOX_BOTTOM (*old_outer),
BOX_BOTTOM (*new_outer),
old_outer,
new_outer,
edge_data->bottom_edges,
&edge_data->bottom_data,
timeout_func,
FALSE,
keyboard_op);
}
else
{
new_top = new_outer->y;
new_bottom = new_outer->y + new_outer->height;
}
} }
/* Determine whether anything changed, and save the changes */ /* Determine whether anything changed, and save the changes */
@ -1104,6 +1126,7 @@ meta_window_edge_resistance_for_move (MetaWindow *window,
gboolean is_keyboard_op) gboolean is_keyboard_op)
{ {
MetaRectangle old_outer, proposed_outer, new_outer; MetaRectangle old_outer, proposed_outer, new_outer;
gboolean is_resize;
if (window == window->display->grab_window && if (window == window->display->grab_window &&
window->display->grab_wireframe_active) window->display->grab_wireframe_active)
@ -1122,13 +1145,15 @@ meta_window_edge_resistance_for_move (MetaWindow *window,
new_outer = proposed_outer; new_outer = proposed_outer;
window->display->grab_last_user_action_was_snap = snap; window->display->grab_last_user_action_was_snap = snap;
is_resize = FALSE;
if (apply_edge_resistance_to_each_side (window->display, if (apply_edge_resistance_to_each_side (window->display,
window, window,
&old_outer, &old_outer,
&new_outer, &new_outer,
timeout_func, timeout_func,
snap, snap,
is_keyboard_op)) is_keyboard_op,
is_resize))
{ {
/* apply_edge_resistance_to_each_side independently applies /* apply_edge_resistance_to_each_side independently applies
* resistance to both the right and left edges of new_outer as both * resistance to both the right and left edges of new_outer as both
@ -1196,6 +1221,7 @@ meta_window_edge_resistance_for_resize (MetaWindow *window,
{ {
MetaRectangle old_outer, new_outer; MetaRectangle old_outer, new_outer;
int proposed_outer_width, proposed_outer_height; int proposed_outer_width, proposed_outer_height;
gboolean is_resize;
if (window == window->display->grab_window && if (window == window->display->grab_window &&
window->display->grab_wireframe_active) window->display->grab_wireframe_active)
@ -1217,13 +1243,15 @@ meta_window_edge_resistance_for_resize (MetaWindow *window,
proposed_outer_height); proposed_outer_height);
window->display->grab_last_user_action_was_snap = snap; window->display->grab_last_user_action_was_snap = snap;
is_resize = TRUE;
if (apply_edge_resistance_to_each_side (window->display, if (apply_edge_resistance_to_each_side (window->display,
window, window,
&old_outer, &old_outer,
&new_outer, &new_outer,
timeout_func, timeout_func,
snap, snap,
is_keyboard_op)) is_keyboard_op,
is_resize))
{ {
*new_width = old_width + (new_outer.width - old_outer.width); *new_width = old_width + (new_outer.width - old_outer.width);
*new_height = old_height + (new_outer.height - old_outer.height); *new_height = old_height + (new_outer.height - old_outer.height);