summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorElijah Newren <newren gmail com>2006-02-27 22:17:58 +0000
committerElijah Newren <newren@src.gnome.org>2006-02-27 22:17:58 +0000
commit3a484f1069572d8c424b20fc7177caad5cc6d196 (patch)
treec15117096e367890a02748efdedc8d8574be96e5
parentc6e1649e6c300ae677e5ab491ee3f651e6e560f7 (diff)
downloadmetacity-3a484f1069572d8c424b20fc7177caad5cc6d196.tar.gz
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
-rw-r--r--ChangeLog11
-rw-r--r--src/group.c10
-rw-r--r--src/window.c9
3 files changed, 28 insertions, 2 deletions
diff --git a/ChangeLog b/ChangeLog
index 9d1aebee..3c5561c6 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,16 @@
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>
+
* configure.in:
Patch from Sylvain Bertrand to fix build issues with library
search order. #330695.
diff --git a/src/group.c b/src/group.c
index 2d8d69c8..8f79ad5f 100644
--- a/src/group.c
+++ b/src/group.c
@@ -123,7 +123,10 @@ meta_window_compute_group (MetaWindow* window)
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,
&window->xgroup_leader);
else
@@ -138,7 +141,10 @@ meta_window_compute_group (MetaWindow* window)
}
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,
window->xgroup_leader);
else
diff --git a/src/window.c b/src/window.c
index 8c12bd40..5f817804 100644
--- a/src/window.c
+++ b/src/window.c
@@ -5468,6 +5468,15 @@ update_transient_for (MetaWindow *window)
/* update stacking constraints */
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