We want to avoid handling focus events for the private focus window,
otherwise the keyboard grab taken by for example buttons will cause a
spurious FOCUS_OUT/FOCUS_IN on the toplevel.
The code that did this seems to have been lost in the XI2 transition for
GTK3.
https://bugzilla.gnome.org/show_bug.cgi?id=657578
case FocusIn:
case FocusOut:
_gdk_device_manager_core_handle_focus (window,
+ xevent->xfocus.window,
device_manager->core_keyboard,
NULL,
xevent->type == FocusIn,
*/
void
_gdk_device_manager_core_handle_focus (GdkWindow *window,
+ Window original,
GdkDevice *device,
GdkDevice *source_device,
gboolean focus_in,
if (!toplevel)
return;
+ if (toplevel->focus_window == original)
+ return;
+
had_focus = HAS_FOCUS (toplevel);
switch (detail)
GUINT_TO_POINTER (xev->sourceid));
_gdk_device_manager_core_handle_focus (window,
+ xev->event,
device,
source_device,
(ev->evtype == XI_FocusIn) ? TRUE : FALSE,
#ifndef __GDK_DEVICE_MANAGER_PRIVATE_CORE_H__
#define __GDK_DEVICE_MANAGER_PRIVATE_CORE_H__
+#include <X11/Xlib.h>
+
#include "gdkx11devicemanager-core.h"
#include "gdkdevicemanagerprivate.h"
};
void _gdk_device_manager_core_handle_focus (GdkWindow *window,
+ Window original,
GdkDevice *device,
GdkDevice *source_device,
gboolean focus_in,