diff options
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.patch | 73 |
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 |