Skip to content

Commit

Permalink
Allow explicit raises from same client, not just same app
Browse files Browse the repository at this point in the history
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.

Based on metacity commit: 632d3983fbc402432c6ceae05bea8903ad2f11c0
From: "Owen W. Taylor" <[email protected]>
Gnome bug: https://bugzilla.gnome.org/show_bug.cgi?id=567528
  • Loading branch information
infirit committed Nov 12, 2014
1 parent e8b2d21 commit ad9db61
Showing 1 changed file with 22 additions and 1 deletion.
23 changes: 22 additions & 1 deletion src/core/window.c
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down Expand Up @@ -78,6 +79,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);
Expand Down Expand Up @@ -4883,7 +4887,7 @@ meta_window_configure_request (MetaWindow *window,
window->desc);
}
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))
{
Expand Down Expand Up @@ -7856,6 +7860,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)
{
Expand Down

0 comments on commit ad9db61

Please sign in to comment.