forked from AuroraMiddleware/gtk
x11: Avoid spurious focus events on grabs
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. This patch reappliesdb4a6040af
which was backed out in18406b7b04
to give developers a chance to get their X servers fixed. As we want to get this bugfix in for 3.4, we need to commit it now. https://bugzilla.gnome.org/show_bug.cgi?id=657578
This commit is contained in:
parent
f9b23d70ef
commit
858a654676
@ -663,6 +663,7 @@ gdk_x11_device_manager_core_translate_event (GdkEventTranslator *translator,
|
||||
case FocusOut:
|
||||
if (window)
|
||||
_gdk_device_manager_core_handle_focus (window,
|
||||
xevent->xfocus.window,
|
||||
device_manager->core_keyboard,
|
||||
NULL,
|
||||
xevent->type == FocusIn,
|
||||
@ -794,6 +795,7 @@ _gdk_x11_event_translate_keyboard_string (GdkEventKey *event)
|
||||
*/
|
||||
void
|
||||
_gdk_device_manager_core_handle_focus (GdkWindow *window,
|
||||
Window original,
|
||||
GdkDevice *device,
|
||||
GdkDevice *source_device,
|
||||
gboolean focus_in,
|
||||
@ -818,6 +820,9 @@ _gdk_device_manager_core_handle_focus (GdkWindow *window,
|
||||
if (!toplevel)
|
||||
return;
|
||||
|
||||
if (toplevel->focus_window == original)
|
||||
return;
|
||||
|
||||
had_focus = HAS_FOCUS (toplevel);
|
||||
|
||||
switch (detail)
|
||||
|
@ -1561,6 +1561,7 @@ gdk_x11_device_manager_xi2_translate_event (GdkEventTranslator *translator,
|
||||
GUINT_TO_POINTER (xev->sourceid));
|
||||
|
||||
_gdk_device_manager_core_handle_focus (window,
|
||||
xev->event,
|
||||
device,
|
||||
source_device,
|
||||
(ev->evtype == XI_FocusIn) ? TRUE : FALSE,
|
||||
|
@ -18,6 +18,8 @@
|
||||
#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"
|
||||
|
||||
@ -36,6 +38,7 @@ struct _GdkX11DeviceManagerCoreClass
|
||||
};
|
||||
|
||||
void _gdk_device_manager_core_handle_focus (GdkWindow *window,
|
||||
Window original,
|
||||
GdkDevice *device,
|
||||
GdkDevice *source_device,
|
||||
gboolean focus_in,
|
||||
|
Loading…
Reference in New Issue
Block a user