Commit 1d0ca716 authored by Carlos Garnacho's avatar Carlos Garnacho Committed by Matthias Clasen

x11: Avoid setting has_pointer_focus if a EWMH compliant WM is present

This is mostly useful to have focus behave sanely on lack of WM, so avoid
any check there if we're positive there is a WM handling focus.

https://bugzilla.gnome.org/show_bug.cgi?id=677329
parent 305568f7
......@@ -807,6 +807,7 @@ _gdk_device_manager_core_handle_focus (GdkWindow *window,
int mode)
{
GdkToplevelX11 *toplevel;
GdkX11Screen *x11_screen;
gboolean had_focus;
g_return_if_fail (GDK_IS_WINDOW (window));
......@@ -828,6 +829,7 @@ _gdk_device_manager_core_handle_focus (GdkWindow *window,
return;
had_focus = HAS_FOCUS (toplevel);
x11_screen = GDK_X11_SCREEN (gdk_window_get_screen (window));
switch (detail)
{
......@@ -841,6 +843,7 @@ _gdk_device_manager_core_handle_focus (GdkWindow *window,
* has_focus_window case.
*/
if (toplevel->has_pointer &&
!x11_screen->wmspec_check_window &&
mode != NotifyGrab &&
#ifdef XINPUT_2
mode != XINotifyPassiveGrab &&
......@@ -871,7 +874,8 @@ _gdk_device_manager_core_handle_focus (GdkWindow *window,
* but the pointer focus is ignored while a
* grab is in effect
*/
if (mode != NotifyGrab &&
if (!x11_screen->wmspec_check_window &&
mode != NotifyGrab &&
#ifdef XINPUT_2
mode != XINotifyPassiveGrab &&
mode != XINotifyPassiveUngrab &&
......
......@@ -132,11 +132,16 @@ static void
handle_focus_change (GdkEventCrossing *event)
{
GdkToplevelX11 *toplevel;
GdkX11Screen *x11_screen;
gboolean focus_in, had_focus;
toplevel = _gdk_x11_window_get_toplevel (event->window);
x11_screen = GDK_X11_SCREEN (gdk_window_get_screen (event->window));
focus_in = (event->type == GDK_ENTER_NOTIFY);
if (x11_screen->wmspec_check_window)
return;
if (!toplevel || event->detail == GDK_NOTIFY_INFERIOR)
return;
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment