metacity/Allow-explicit-raises-from-same-client-not-just-sa.patch
Owen Taylor 97b03230fd - Require gnome-themes rather than nodoka-metacity-theme (rhbz 532455,
Stijn Hoop)
- Add patches for GNOME bugs
445447 - Application-induced window raise fails when raise_on_click off
    (rhbz 526045)
530702 - compiz doesn't start if metacity compositor is enabled (rhbz
    537791)
559816 - Doesn't update keybindings being disabled/cleared (rhbz 532282)
567528 - Cannot raise windows from applications in Tcl/Tk and Java (rhbz
    503522)
577576 - Failed to read saved session file warning on new sessions (rhbz
    493245)
598231 - When Chromium rings the bell, metacity quits(rhbz 532282)
598995 - Don't focus ancestor window on a different workspace (rhbz 237158)
599097 - For mouse and sloppy focus, return to "mouse mode" on motion (rhbz
    530261)
599248 - Add no_focus_windows preference to list windows that shouldn't be
    focused (rhbz 530262)
599261 - Add a new_windows_always_on_top preference (rhbz 530263)
599262 - Add XFCE Terminal as a terminal
604319 - XIOError unknown display (rhbz 537845)
2009-12-10 23:33:00 +00:00

73 lines
2.8 KiB
Diff

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