mirror of
https://github.com/brl/mutter.git
synced 2025-02-16 13:24:09 +00:00
Avoid moving and resizing override-redirect windows
Override-redirect windows should not be moved or resized by the window manager. - Mark override-redirect windows as already placed to avoid placing them when first shown. - Don't move-resize newly created override-redirect MetaWindow - Don't queue a resize on override-redirect windows when reading their WM_TRANSIENT_FOR hint. - Add g_return_if_fail (!window->override_redirect) to catch unexpected code paths that might result in override-redirect windows being moved or resized. http://bugzilla.gnome.org/show_bug.cgi?id=582639
This commit is contained in:
parent
d6576d9b70
commit
2ebedb822d
@ -1446,7 +1446,7 @@ reload_transient_for (MetaWindow *window,
|
||||
window->xtransient_for != window->xgroup_leader)
|
||||
meta_window_group_leader_changed (window);
|
||||
|
||||
if (!window->constructing)
|
||||
if (!window->constructing && !window->override_redirect)
|
||||
meta_window_queue (window, META_QUEUE_MOVE_RESIZE);
|
||||
}
|
||||
|
||||
|
@ -678,8 +678,9 @@ meta_window_new_with_attrs (MetaDisplay *display,
|
||||
window->hidden = 0;
|
||||
/* if already mapped, no need to worry about focus-on-first-time-showing */
|
||||
window->showing_for_first_time = !window->mapped;
|
||||
/* if already mapped we don't want to do the placement thing */
|
||||
window->placed = (window->mapped && !window->hidden);
|
||||
/* if already mapped we don't want to do the placement thing;
|
||||
* override-redirect windows are placed by the app */
|
||||
window->placed = ((window->mapped && !window->hidden) || window->override_redirect);
|
||||
if (window->placed)
|
||||
meta_topic (META_DEBUG_PLACEMENT,
|
||||
"Not placing window 0x%lx since it's already mapped\n",
|
||||
@ -963,13 +964,14 @@ meta_window_new_with_attrs (MetaDisplay *display,
|
||||
*/
|
||||
flags =
|
||||
META_IS_CONFIGURE_REQUEST | META_IS_MOVE_ACTION | META_IS_RESIZE_ACTION;
|
||||
meta_window_move_resize_internal (window,
|
||||
flags,
|
||||
window->size_hints.win_gravity,
|
||||
window->size_hints.x,
|
||||
window->size_hints.y,
|
||||
window->size_hints.width,
|
||||
window->size_hints.height);
|
||||
if (!window->override_redirect)
|
||||
meta_window_move_resize_internal (window,
|
||||
flags,
|
||||
window->size_hints.win_gravity,
|
||||
window->size_hints.x,
|
||||
window->size_hints.y,
|
||||
window->size_hints.width,
|
||||
window->size_hints.height);
|
||||
|
||||
/* Now try applying saved stuff from the session */
|
||||
{
|
||||
@ -1958,6 +1960,9 @@ meta_window_queue (MetaWindow *window, guint queuebits)
|
||||
{
|
||||
guint queuenum;
|
||||
|
||||
/* Easier to debug by checking here rather than in the idle */
|
||||
g_return_if_fail (!((queuebits & META_QUEUE_MOVE_RESIZE) != 0 && window->override_redirect));
|
||||
|
||||
for (queuenum=0; queuenum<NUMBER_OF_QUEUES; queuenum++)
|
||||
{
|
||||
if (queuebits & 1<<queuenum)
|
||||
@ -3609,6 +3614,8 @@ meta_window_move_resize_internal (MetaWindow *window,
|
||||
MetaRectangle new_rect;
|
||||
MetaRectangle old_rect;
|
||||
|
||||
g_return_if_fail (!window->override_redirect);
|
||||
|
||||
is_configure_request = (flags & META_IS_CONFIGURE_REQUEST) != 0;
|
||||
do_gravity_adjust = (flags & META_DO_GRAVITY_ADJUST) != 0;
|
||||
is_user_action = (flags & META_IS_USER_ACTION) != 0;
|
||||
@ -4009,6 +4016,8 @@ meta_window_resize (MetaWindow *window,
|
||||
int x, y;
|
||||
MetaMoveResizeFlags flags;
|
||||
|
||||
g_return_if_fail (!window->override_redirect);
|
||||
|
||||
meta_window_get_position (window, &x, &y);
|
||||
|
||||
flags = (user_op ? META_IS_USER_ACTION : 0) | META_IS_RESIZE_ACTION;
|
||||
@ -4024,8 +4033,12 @@ meta_window_move (MetaWindow *window,
|
||||
int root_x_nw,
|
||||
int root_y_nw)
|
||||
{
|
||||
MetaMoveResizeFlags flags =
|
||||
(user_op ? META_IS_USER_ACTION : 0) | META_IS_MOVE_ACTION;
|
||||
MetaMoveResizeFlags flags;
|
||||
|
||||
g_return_if_fail (!window->override_redirect);
|
||||
|
||||
flags = (user_op ? META_IS_USER_ACTION : 0) | META_IS_MOVE_ACTION;
|
||||
|
||||
meta_window_move_resize_internal (window,
|
||||
flags,
|
||||
NorthWestGravity,
|
||||
@ -4042,8 +4055,11 @@ meta_window_move_resize (MetaWindow *window,
|
||||
int w,
|
||||
int h)
|
||||
{
|
||||
MetaMoveResizeFlags flags =
|
||||
(user_op ? META_IS_USER_ACTION : 0) |
|
||||
MetaMoveResizeFlags flags;
|
||||
|
||||
g_return_if_fail (!window->override_redirect);
|
||||
|
||||
flags = (user_op ? META_IS_USER_ACTION : 0) |
|
||||
META_IS_MOVE_ACTION | META_IS_RESIZE_ACTION;
|
||||
meta_window_move_resize_internal (window,
|
||||
flags,
|
||||
@ -7157,6 +7173,8 @@ meta_window_shove_titlebar_onscreen (MetaWindow *window)
|
||||
int horiz_amount, vert_amount;
|
||||
int newx, newy;
|
||||
|
||||
g_return_if_fail (!window->override_redirect);
|
||||
|
||||
/* If there's no titlebar, don't bother */
|
||||
if (!window->frame)
|
||||
return;
|
||||
|
Loading…
x
Reference in New Issue
Block a user