summaryrefslogtreecommitdiffstats
path: root/Allow-explicit-raises-from-same-client-not-just-sa.patch
diff options
context:
space:
mode:
Diffstat (limited to 'Allow-explicit-raises-from-same-client-not-just-sa.patch')
-rw-r--r--Allow-explicit-raises-from-same-client-not-just-sa.patch73
1 files changed, 73 insertions, 0 deletions
diff --git a/Allow-explicit-raises-from-same-client-not-just-sa.patch b/Allow-explicit-raises-from-same-client-not-just-sa.patch
new file mode 100644
index 0000000..2db720a
--- /dev/null
+++ b/Allow-explicit-raises-from-same-client-not-just-sa.patch
@@ -0,0 +1,73 @@
+From 7e116a394689718567406837740679c1f1f0d74f Mon Sep 17 00:00:00 2001
+From: Owen W. Taylor <otaylor@fishsoup.net>
+Date: Mon, 19 Oct 2009 19:41:54 -0400
+Subject: [PATCH] Allow explicit raises from same client, not just same app
+
+We currently allow XRaiseWindow when the same application (defined
+by the window group) is focused, but the kind of old applications
+that XRaiseWindow are frequently not setting the window group.
+
+Expand the check to allow the same X client (defined by the looking
+at client ID) to raise windows above the focus window.
+
+https://bugzilla.gnome.org/show_bug.cgi?id=567528
+---
+ src/core/window.c | 22 ++++++++++++++++++++++
+ 1 files changed, 22 insertions(+), 0 deletions(-)
+
+diff --git a/src/core/window.c b/src/core/window.c
+index 6de86ee..8d029a2 100644
+--- a/src/core/window.c
++++ b/src/core/window.c
+@@ -47,6 +47,7 @@
+ #include "effects.h"
+
+ #include <X11/Xatom.h>
++#include <X11/Xlibint.h> /* For display->resource_mask */
+ #include <string.h>
+
+ #ifdef HAVE_SHAPE
+@@ -72,6 +73,9 @@ static gboolean process_property_notify (MetaWindow *window,
+ static void meta_window_show (MetaWindow *window);
+ static void meta_window_hide (MetaWindow *window);
+
++static gboolean meta_window_same_client (MetaWindow *window,
++ MetaWindow *other_window);
++
+ static void meta_window_save_rect (MetaWindow *window);
+ static void save_user_window_placement (MetaWindow *window);
+ static void force_save_user_window_placement (MetaWindow *window);
+@@ -4708,6 +4712,7 @@ meta_window_configure_request (MetaWindow *window,
+ }
+ else if (active_window &&
+ !meta_window_same_application (window, active_window) &&
++ !meta_window_same_client (window, active_window) &&
+ XSERVER_TIME_IS_BEFORE (window->net_wm_user_time,
+ active_window->net_wm_user_time))
+ {
+@@ -7544,6 +7549,23 @@ meta_window_same_application (MetaWindow *window,
+ group==other_group;
+ }
+
++/* Generally meta_window_same_application() is a better idea
++ * of "sameness", since it handles the case where multiple apps
++ * want to look like the same app or the same app wants to look
++ * like multiple apps, but in the case of workarounds for legacy
++ * applications (which likely aren't setting the group properly
++ * anyways), it may be desirable to check this as well.
++ */
++static gboolean
++meta_window_same_client (MetaWindow *window,
++ MetaWindow *other_window)
++{
++ int resource_mask = window->display->xdisplay->resource_mask;
++
++ return ((window->xwindow & ~resource_mask) ==
++ (other_window->xwindow & ~resource_mask));
++}
++
+ void
+ meta_window_refresh_resize_popup (MetaWindow *window)
+ {
+--
+1.6.5.rc2 \ No newline at end of file