(Originally sent to alex directly, sending to list for wider distribution) @@ _gdk_display_enable_motion_hints + { + serial = _gdk_windowing_window_get_next_serial (display); + /* We might not actually generate the next request, so + make sure this triggers always, this may cause it to + trigger slightly to early, but this is just a hint + anyway. */ s/slightly to/slightly too/ @@ gdk_window_real_window_get_pointer + normal_child = GDK_WINDOW_IMPL_GET_IFACE (private->impl)->get_pointer (window, + &tmpx, &tmpy, + &tmp_mask); + /* We got the coords on the impl, conver to the window */ convert +/* returns old clip region */ +void +_gdk_gc_add_drawable_clip (GdkGC *gc, + guint32 region_tag, + GdkRegion *region, + int offset_x, + int offset_y) No it doesn't. @@ gdk_gc_copy + if (dst_priv->old_clip_region) + gdk_region_destroy (dst_priv->old_clip_region); + + if (src_priv->old_clip_region) + dst_priv->old_clip_region = gdk_region_copy (src_priv->old_clip_region); + else + dst_priv->old_clip_region = NULL; /* etc */ This is a style thing, but gdk_region_destroy() is safe to call with a NULL argument. Likewise, gdk_region_copy() returns NULL when called with a NULL argument. g_object_ref() isn't safe like this if G_DISABLE_CHECKS, which is kind of mad. +void _gdk_syntesize_crossing_events_for_geometry_change (GdkWindow *changed_window); synthesize +static void miSetExtents (GdkRegion *pReg); Booo forward decls. Could just move the def up. + /* The reparent will have put the native window topmost in the native parent, + * which may be wrong wrt other native windows in the non-native hierarchy, + * so restack */ + above = find_native_sibling_above (private->parent, private); + if (above) + { + listhead.data = window; + GDK_WINDOW_IMPL_GET_IFACE (private->impl)->restack_under ((GdkWindow *)above, + &listhead); + } This is duplicated in gdk_window_reparent and gdk_window_ensure_native. Might be worth unifying. + /* We approach this by taking the new move and pushing it ahead of moves + starting at the end of the list and stopping when its not safe to do so. + Its not safe to push past a move is either the source of the new move + is in the destination of the old move, or if the destination of the new + move is in the source of the new move, or if the destination of the new + move overlaps the destination of the old move. We simplify this by It's not safe. s/move is either/move if either/ + if (1) /* Enable flicker free handling of moves. */ + append_move_region (impl_window, region, dx, dy); + else + do_move_region_bits_on_impl (impl_window, + region, dx, dy); Safe to remove the if (1) now? + /* Right order, since native_chilren is bottom-opmost first */ children, topmost Seems like big chunks of gdk_window_move_resize_internal and gdk_window_scroll are duplicated but not exactly. Might be worth refactoring? @@ gdk_pointer_grab + /* We need a native window for confine to to work, ensure we have one */ + if (confine_to) + { + if (!gdk_window_ensure_native (confine_to)) + { + g_warning ("Can't confine to grabbed window, not native"); + confine_to = NULL; + } + } This kinda sucks. Might be possible to create an input-only window coincident with the csw you're trying to confine to, and then garbage-collect it when the grab goes away. Although, you might have to suppress crossing events when it unmaps? Hmm. Also I have no idea if non-X11 backends have input-only windows. + /* We synthesize all crossing events due to grabs outselves, ourselves @@ gdk_x11_drawable_get_xid + /* Try to ensure the window has a native window */ + if (!_gdk_window_has_impl (window)) + { + gdk_window_ensure_native (window); + + /* We sync here to ensure the window is created in the Xserver when + * this function returns. This is required because the returned XID + * for this window must be valid immediately, even with another + * connection to the Xserver */ + gdk_display_sync (gdk_drawable_get_display (window)); It's not clear to me that _gdk_window_has_impl() succeeding implies that the XID is known by the server yet. So only syncing if it fails might not be enough anyway? Looking at gdk_window_new() it seems like you can return from that without round-tripping. - ajax
Attachment:
signature.asc
Description: This is a digitally signed message part