mirror of
https://github.com/brl/mutter.git
synced 2025-02-16 13:24:09 +00:00
track time to avoid sending a deluge of move/resize requests, suggestion
2002-08-10 Havoc Pennington <hp@pobox.com> * src/window.c (update_resize): track time to avoid sending a deluge of move/resize requests, suggestion from xavier.bestel@free.fr bug #86830. Not really sure if this will make a difference or not. We'll see I guess. (update_move): do same on move though it seems less important here. * src/display.h (struct _MetaDisplay): store the last time we sent a move/resize event.
This commit is contained in:
parent
9a72bf1858
commit
f36d236a55
12
ChangeLog
12
ChangeLog
@ -1,3 +1,15 @@
|
|||||||
|
2002-08-10 Havoc Pennington <hp@pobox.com>
|
||||||
|
|
||||||
|
* src/window.c (update_resize): track time to avoid sending a
|
||||||
|
deluge of move/resize requests, suggestion from
|
||||||
|
xavier.bestel@free.fr bug #86830. Not really sure if this will
|
||||||
|
make a difference or not. We'll see I guess.
|
||||||
|
(update_move): do same on move though it seems less important
|
||||||
|
here.
|
||||||
|
|
||||||
|
* src/display.h (struct _MetaDisplay): store the
|
||||||
|
last time we sent a move/resize event.
|
||||||
|
|
||||||
2002-08-10 Havoc Pennington <hp@pobox.com>
|
2002-08-10 Havoc Pennington <hp@pobox.com>
|
||||||
|
|
||||||
* src/window.c (meta_window_notify_focus): add a FIXME comment
|
* src/window.c (meta_window_notify_focus): add a FIXME comment
|
||||||
|
@ -2396,6 +2396,9 @@ meta_display_begin_grab_op (MetaDisplay *display,
|
|||||||
display->grab_initial_root_y = root_y;
|
display->grab_initial_root_y = root_y;
|
||||||
display->grab_current_root_x = root_x;
|
display->grab_current_root_x = root_x;
|
||||||
display->grab_current_root_y = root_y;
|
display->grab_current_root_y = root_y;
|
||||||
|
display->grab_last_moveresize_time.tv_sec = 0;
|
||||||
|
display->grab_last_moveresize_time.tv_usec = 0;
|
||||||
|
|
||||||
if (display->grab_window)
|
if (display->grab_window)
|
||||||
{
|
{
|
||||||
display->grab_initial_window_pos = display->grab_window->rect;
|
display->grab_initial_window_pos = display->grab_window->rect;
|
||||||
|
@ -219,7 +219,8 @@ struct _MetaDisplay
|
|||||||
MetaRectangle grab_initial_window_pos;
|
MetaRectangle grab_initial_window_pos;
|
||||||
MetaRectangle grab_current_window_pos;
|
MetaRectangle grab_current_window_pos;
|
||||||
MetaResizePopup *grab_resize_popup;
|
MetaResizePopup *grab_resize_popup;
|
||||||
|
GTimeVal grab_last_moveresize_time;
|
||||||
|
|
||||||
|
|
||||||
/* Keybindings stuff */
|
/* Keybindings stuff */
|
||||||
MetaKeyBinding *screen_bindings;
|
MetaKeyBinding *screen_bindings;
|
||||||
|
49
src/window.c
49
src/window.c
@ -5817,6 +5817,37 @@ window_query_root_pointer (MetaWindow *window,
|
|||||||
*y = root_y_return;
|
*y = root_y_return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static gboolean
|
||||||
|
check_moveresize_frequency (MetaWindow *window)
|
||||||
|
{
|
||||||
|
GTimeVal current_time;
|
||||||
|
double elapsed;
|
||||||
|
|
||||||
|
g_get_current_time (¤t_time);
|
||||||
|
|
||||||
|
/* use milliseconds, 1000 milliseconds/second */
|
||||||
|
elapsed =
|
||||||
|
((((double)current_time.tv_sec - window->display->grab_last_moveresize_time.tv_sec) * G_USEC_PER_SEC +
|
||||||
|
(current_time.tv_usec - window->display->grab_last_moveresize_time.tv_usec))) / 1000.0;
|
||||||
|
|
||||||
|
#define MAX_RESIZES_PER_SECOND 30.0
|
||||||
|
if (elapsed < (1000.0 / MAX_RESIZES_PER_SECOND))
|
||||||
|
return FALSE;
|
||||||
|
|
||||||
|
/* store latest time */
|
||||||
|
window->display->grab_last_moveresize_time = current_time;
|
||||||
|
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
clear_moveresize_time (MetaWindow *window)
|
||||||
|
{
|
||||||
|
/* Forces the next update to actually do something */
|
||||||
|
window->display->grab_last_moveresize_time.tv_sec = 0;
|
||||||
|
window->display->grab_last_moveresize_time.tv_usec = 0;
|
||||||
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
update_move (MetaWindow *window,
|
update_move (MetaWindow *window,
|
||||||
unsigned int mask,
|
unsigned int mask,
|
||||||
@ -5838,6 +5869,14 @@ update_move (MetaWindow *window,
|
|||||||
new_x = meta_window_find_nearest_vertical_edge (window, new_x);
|
new_x = meta_window_find_nearest_vertical_edge (window, new_x);
|
||||||
new_y = meta_window_find_nearest_horizontal_edge (window, new_y);
|
new_y = meta_window_find_nearest_horizontal_edge (window, new_y);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Force a move regardless of time if a certain delta is exceeded,
|
||||||
|
* so we don't get too out of sync with reality when dropping frames
|
||||||
|
*/
|
||||||
|
#define MOVE_THRESHOLD 15
|
||||||
|
if (!check_moveresize_frequency (window) &&
|
||||||
|
ABS (dx) < MOVE_THRESHOLD && ABS (dy) < MOVE_THRESHOLD)
|
||||||
|
return;
|
||||||
|
|
||||||
meta_window_move (window, TRUE, new_x, new_y);
|
meta_window_move (window, TRUE, new_x, new_y);
|
||||||
}
|
}
|
||||||
@ -5903,6 +5942,14 @@ update_resize (MetaWindow *window,
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Force a move regardless of time if a certain delta
|
||||||
|
* is exceeded
|
||||||
|
*/
|
||||||
|
#define RESIZE_THRESHOLD 15
|
||||||
|
if (!check_moveresize_frequency (window) &&
|
||||||
|
ABS (dx) < RESIZE_THRESHOLD && ABS (dy) < RESIZE_THRESHOLD)
|
||||||
|
return;
|
||||||
|
|
||||||
/* compute gravity of client during operation */
|
/* compute gravity of client during operation */
|
||||||
gravity = meta_resize_gravity_from_grab_op (window->display->grab_op);
|
gravity = meta_resize_gravity_from_grab_op (window->display->grab_op);
|
||||||
g_assert (gravity >= 0);
|
g_assert (gravity >= 0);
|
||||||
@ -5921,6 +5968,7 @@ meta_window_handle_mouse_grab_op_event (MetaWindow *window,
|
|||||||
{
|
{
|
||||||
case META_GRAB_OP_MOVING:
|
case META_GRAB_OP_MOVING:
|
||||||
case META_GRAB_OP_KEYBOARD_MOVING:
|
case META_GRAB_OP_KEYBOARD_MOVING:
|
||||||
|
clear_moveresize_time (window);
|
||||||
update_move (window, event->xbutton.state,
|
update_move (window, event->xbutton.state,
|
||||||
event->xbutton.x_root, event->xbutton.y_root);
|
event->xbutton.x_root, event->xbutton.y_root);
|
||||||
break;
|
break;
|
||||||
@ -5941,6 +5989,7 @@ meta_window_handle_mouse_grab_op_event (MetaWindow *window,
|
|||||||
case META_GRAB_OP_KEYBOARD_RESIZING_NE:
|
case META_GRAB_OP_KEYBOARD_RESIZING_NE:
|
||||||
case META_GRAB_OP_KEYBOARD_RESIZING_SW:
|
case META_GRAB_OP_KEYBOARD_RESIZING_SW:
|
||||||
case META_GRAB_OP_KEYBOARD_RESIZING_NW:
|
case META_GRAB_OP_KEYBOARD_RESIZING_NW:
|
||||||
|
clear_moveresize_time (window);
|
||||||
update_resize (window, event->xbutton.x_root, event->xbutton.y_root);
|
update_resize (window, event->xbutton.x_root, event->xbutton.y_root);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user