[mutter/override-redirect-exclusion: 11/15] Avoid moving and resizing override-redirect windows
- From: Owen Taylor <otaylor src gnome org>
- To: svn-commits-list gnome org
- Subject: [mutter/override-redirect-exclusion: 11/15] Avoid moving and resizing override-redirect windows
- Date: Tue, 16 Jun 2009 09:59:03 -0400 (EDT)
commit 2ebedb822d0d5dce6c6a2a47b007b2703a021d8c
Author: Owen W. Taylor <otaylor fishsoup net>
Date: Mon Jun 15 18:25:07 2009 -0400
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
src/core/window-props.c | 2 +-
src/core/window.c | 44 +++++++++++++++++++++++++++++++-------------
2 files changed, 32 insertions(+), 14 deletions(-)
---
diff --git a/src/core/window-props.c b/src/core/window-props.c
index b1370ed..6b5a6c4 100644
--- a/src/core/window-props.c
+++ b/src/core/window-props.c
@@ -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);
}
diff --git a/src/core/window.c b/src/core/window.c
index 1c81d8e..4fab34a 100644
--- a/src/core/window.c
+++ b/src/core/window.c
@@ -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;
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]