Patch from Thomas Thurman to work around buggy application grouping with

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

        Patch from Thomas Thurman to work around buggy application
        grouping with transient windows.  #328211

        * src/group.c (meta_window_compute_group):
        Put transients in the same group with their parent, always.

        * src/window.c (update_transient_for):
        Update group too
This commit is contained in:
Elijah Newren 2006-02-27 22:19:11 +00:00 committed by Elijah Newren
parent 6a08faf99b
commit 04a4f7c363
3 changed files with 28 additions and 2 deletions

View File

@ -1,3 +1,14 @@
2006-02-27 Elijah Newren <newren gmail com>
Patch from Thomas Thurman to work around buggy application
grouping with transient windows. #328211
* src/group.c (meta_window_compute_group):
Put transients in the same group with their parent, always.
* src/window.c (update_transient_for):
Update group too
2006-02-27 Elijah Newren <newren gmail com> 2006-02-27 Elijah Newren <newren gmail com>
* configure.in: * configure.in:

View File

@ -123,7 +123,10 @@ meta_window_compute_group (MetaWindow* window)
if (window->display->groups_by_leader) if (window->display->groups_by_leader)
{ {
if (window->xgroup_leader != None) if (window->xtransient_for != None)
group = g_hash_table_lookup (window->display->groups_by_leader,
&window->xtransient_for);
else if (window->xgroup_leader != None)
group = g_hash_table_lookup (window->display->groups_by_leader, group = g_hash_table_lookup (window->display->groups_by_leader,
&window->xgroup_leader); &window->xgroup_leader);
else else
@ -138,7 +141,10 @@ meta_window_compute_group (MetaWindow* window)
} }
else else
{ {
if (window->xgroup_leader != None) if (window->xtransient_for != None)
group = meta_group_new (window->display,
window->xtransient_for);
else if (window->xgroup_leader != None)
group = meta_group_new (window->display, group = meta_group_new (window->display,
window->xgroup_leader); window->xgroup_leader);
else else

View File

@ -5468,6 +5468,15 @@ update_transient_for (MetaWindow *window)
/* update stacking constraints */ /* update stacking constraints */
meta_stack_update_transient (window->screen->stack, window); meta_stack_update_transient (window->screen->stack, window);
/* possibly change its group. We treat being a window's transient as
* equivalent to making it your group leader, to work around shortcomings
* in programs such as xmms-- see #328211.
*/
if (window->xtransient_for != None &&
window->xgroup_leader != None &&
window->xtransient_for != window->xgroup_leader)
meta_window_group_leader_changed (window);
} }
static void static void