diff options
author | Elijah Newren <newren gmail com> | 2006-03-30 19:22:38 +0000 |
---|---|---|
committer | Elijah Newren <newren@src.gnome.org> | 2006-03-30 19:22:38 +0000 |
commit | 127a89886b93f3279ec00341e18fd8e25e38dacc (patch) | |
tree | 52f25dfe9d3e203ad8498cb0693c1ec74aa361d6 | |
parent | 82a6c9948556eda8fbad0c136dd92dfa045bc518 (diff) | |
download | metacity-127a89886b93f3279ec00341e18fd8e25e38dacc.tar.gz |
Fix grouping in the presence of ancestors; caught by Björn. #336184
2006-03-29 Elijah Newren <newren gmail com>
Fix grouping in the presence of ancestors; caught by Björn.
#336184
* src/group.c (meta_window_compute_group): Use new
meta_window_find_root_ancestor() function to get ancestor; for the
computed group, use the ancestor's group instead of the ancestor
itself
* src/window.[ch] (meta_window_find_root_ancestor,
meta_window_raise): split meta_window_find_root_ancestor()
functionality of meta_window_raise() and make it available
elsewhere
-rw-r--r-- | ChangeLog | 15 | ||||
-rw-r--r-- | src/group.c | 18 | ||||
-rw-r--r-- | src/window.c | 12 | ||||
-rw-r--r-- | src/window.h | 2 |
4 files changed, 38 insertions, 9 deletions
@@ -1,5 +1,20 @@ 2006-03-29 Elijah Newren <newren gmail com> + Fix grouping in the presence of ancestors; caught by Björn. + #336184 + + * src/group.c (meta_window_compute_group): Use new + meta_window_find_root_ancestor() function to get ancestor; for the + computed group, use the ancestor's group instead of the ancestor + itself + + * src/window.[ch] (meta_window_find_root_ancestor, + meta_window_raise): split meta_window_find_root_ancestor() + functionality of meta_window_raise() and make it available + elsewhere + +2006-03-29 Elijah Newren <newren gmail com> + * rationales.txt: Add bugs about pointer warping; update raise-on-click ones. diff --git a/src/group.c b/src/group.c index 8f79ad5f..a2f79819 100644 --- a/src/group.c +++ b/src/group.c @@ -116,16 +116,21 @@ void meta_window_compute_group (MetaWindow* window) { MetaGroup *group; + MetaWindow *ancestor; /* use window->xwindow if no window->xgroup_leader */ group = NULL; + /* Determine the ancestor of the window; its group setting will override the + * normal grouping rules; see bug 328211. + */ + ancestor = meta_window_find_root_ancestor (window); + if (window->display->groups_by_leader) { - if (window->xtransient_for != None) - group = g_hash_table_lookup (window->display->groups_by_leader, - &window->xtransient_for); + if (ancestor != window) + group = ancestor->group; else if (window->xgroup_leader != None) group = g_hash_table_lookup (window->display->groups_by_leader, &window->xgroup_leader); @@ -141,9 +146,9 @@ meta_window_compute_group (MetaWindow* window) } else { - if (window->xtransient_for != None) + if (ancestor != window && ancestor->xgroup_leader != None) group = meta_group_new (window->display, - window->xtransient_for); + ancestor->xgroup_leader); else if (window->xgroup_leader != None) group = meta_group_new (window->display, window->xgroup_leader); @@ -154,8 +159,7 @@ meta_window_compute_group (MetaWindow* window) window->group = group; } - window->group->windows = g_slist_prepend (window->group->windows, - window); + window->group->windows = g_slist_prepend (window->group->windows, window); meta_topic (META_DEBUG_GROUPS, "Adding %s to group with leader 0x%lx\n", diff --git a/src/window.c b/src/window.c index 4f384de9..33f28022 100644 --- a/src/window.c +++ b/src/window.c @@ -3993,12 +3993,20 @@ find_root_ancestor (MetaWindow *window, return TRUE; } -void -meta_window_raise (MetaWindow *window) +MetaWindow * +meta_window_find_root_ancestor (MetaWindow *window) { MetaWindow *ancestor; ancestor = window; meta_window_foreach_ancestor (window, find_root_ancestor, &ancestor); + return ancestor; +} + +void +meta_window_raise (MetaWindow *window) +{ + MetaWindow *ancestor; + ancestor = meta_window_find_root_ancestor (window); meta_topic (META_DEBUG_WINDOW_OPS, "Raising window %s, ancestor of %s\n", diff --git a/src/window.h b/src/window.h index 7b9a9eb8..49ac0293 100644 --- a/src/window.h +++ b/src/window.h @@ -555,6 +555,8 @@ gboolean meta_window_is_ancestor_of_transient (MetaWindow *window, void meta_window_foreach_ancestor (MetaWindow *window, MetaWindowForeachFunc func, void *data); +MetaWindow* meta_window_find_root_ancestor (MetaWindow *window); + void meta_window_begin_grab_op (MetaWindow *window, MetaGrabOp op, |