mirror of
https://gitlab.gnome.org/GNOME/gtk.git
synced 2024-11-13 04:10:13 +00:00
Don't unnecessarily set the event mask as that can cause X errors
For instance, two clients selecting for button events can cause BadAccess. This fixes bug 592624, where a gdk_window_reparent caused us to re-set the event mask, breaking the workaround for the mozilla BadAccess bug.
This commit is contained in:
parent
2400e1440e
commit
cf73930869
@ -1451,6 +1451,7 @@ gdk_window_reparent (GdkWindow *window,
|
|||||||
GdkScreen *screen;
|
GdkScreen *screen;
|
||||||
gboolean show, was_mapped;
|
gboolean show, was_mapped;
|
||||||
gboolean do_reparent_to_impl;
|
gboolean do_reparent_to_impl;
|
||||||
|
GdkEventMask old_native_event_mask;
|
||||||
|
|
||||||
g_return_if_fail (GDK_IS_WINDOW (window));
|
g_return_if_fail (GDK_IS_WINDOW (window));
|
||||||
g_return_if_fail (new_parent == NULL || GDK_IS_WINDOW (new_parent));
|
g_return_if_fail (new_parent == NULL || GDK_IS_WINDOW (new_parent));
|
||||||
@ -1501,9 +1502,11 @@ gdk_window_reparent (GdkWindow *window,
|
|||||||
new_parent_private->window_type == GDK_WINDOW_FOREIGN)
|
new_parent_private->window_type == GDK_WINDOW_FOREIGN)
|
||||||
gdk_window_ensure_native (window);
|
gdk_window_ensure_native (window);
|
||||||
|
|
||||||
|
old_native_event_mask = 0;
|
||||||
do_reparent_to_impl = FALSE;
|
do_reparent_to_impl = FALSE;
|
||||||
if (gdk_window_has_impl (private))
|
if (gdk_window_has_impl (private))
|
||||||
{
|
{
|
||||||
|
old_native_event_mask = get_native_event_mask (private);
|
||||||
/* Native window */
|
/* Native window */
|
||||||
show = GDK_WINDOW_IMPL_GET_IFACE (private->impl)->reparent (window, new_parent, x, y);
|
show = GDK_WINDOW_IMPL_GET_IFACE (private->impl)->reparent (window, new_parent, x, y);
|
||||||
}
|
}
|
||||||
@ -1570,7 +1573,13 @@ gdk_window_reparent (GdkWindow *window,
|
|||||||
/* We might have changed window type for a native windows, so we
|
/* We might have changed window type for a native windows, so we
|
||||||
need to change the event mask too. */
|
need to change the event mask too. */
|
||||||
if (gdk_window_has_impl (private))
|
if (gdk_window_has_impl (private))
|
||||||
GDK_WINDOW_IMPL_GET_IFACE (private->impl)->set_events (window, get_native_event_mask (private));
|
{
|
||||||
|
GdkEventMask native_event_mask = get_native_event_mask (private);
|
||||||
|
|
||||||
|
if (native_event_mask != old_native_event_mask)
|
||||||
|
GDK_WINDOW_IMPL_GET_IFACE (private->impl)->set_events (window,
|
||||||
|
native_event_mask);
|
||||||
|
}
|
||||||
|
|
||||||
/* Inherit parent redirect if we don't have our own */
|
/* Inherit parent redirect if we don't have our own */
|
||||||
if (private->parent && private->redirect == NULL)
|
if (private->parent && private->redirect == NULL)
|
||||||
|
Loading…
Reference in New Issue
Block a user