mirror of
https://gitlab.gnome.org/GNOME/gtk.git
synced 2025-01-14 22:30:22 +00:00
gdk/surface: Add API to queue and apply state changes
This will be used to compress state changes and apply as part of a frame clock dispatch.
This commit is contained in:
parent
23d7392eb9
commit
f4c36fe1ce
@ -1670,7 +1670,11 @@ gdk_surface_hide (GdkSurface *surface)
|
|||||||
was_mapped = GDK_SURFACE_IS_MAPPED (surface);
|
was_mapped = GDK_SURFACE_IS_MAPPED (surface);
|
||||||
|
|
||||||
if (GDK_SURFACE_IS_MAPPED (surface))
|
if (GDK_SURFACE_IS_MAPPED (surface))
|
||||||
gdk_synthesize_surface_state (surface, 0, GDK_TOPLEVEL_STATE_WITHDRAWN);
|
{
|
||||||
|
gdk_synthesize_surface_state (surface, 0, GDK_TOPLEVEL_STATE_WITHDRAWN);
|
||||||
|
surface->pending_unset_flags = 0;
|
||||||
|
surface->pending_set_flags = 0;
|
||||||
|
}
|
||||||
|
|
||||||
if (was_mapped)
|
if (was_mapped)
|
||||||
{
|
{
|
||||||
@ -2659,6 +2663,33 @@ gdk_synthesize_surface_state (GdkSurface *surface,
|
|||||||
gdk_surface_set_state (surface, (surface->state | set_flags) & ~unset_flags);
|
gdk_surface_set_state (surface, (surface->state | set_flags) & ~unset_flags);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
gdk_surface_queue_state_change (GdkSurface *surface,
|
||||||
|
GdkToplevelState unset_flags,
|
||||||
|
GdkToplevelState set_flags)
|
||||||
|
{
|
||||||
|
surface->pending_unset_flags |= unset_flags;
|
||||||
|
surface->pending_set_flags &= ~unset_flags;
|
||||||
|
|
||||||
|
surface->pending_set_flags |= set_flags;
|
||||||
|
surface->pending_unset_flags &= ~set_flags;
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
gdk_surface_apply_state_change (GdkSurface *surface)
|
||||||
|
{
|
||||||
|
if (!surface->pending_unset_flags && !surface->pending_set_flags)
|
||||||
|
return;
|
||||||
|
|
||||||
|
gdk_synthesize_surface_state (surface,
|
||||||
|
surface->pending_unset_flags,
|
||||||
|
surface->pending_set_flags);
|
||||||
|
if (surface->pending_unset_flags & GDK_TOPLEVEL_STATE_WITHDRAWN)
|
||||||
|
gdk_surface_invalidate_rect (surface, NULL);
|
||||||
|
surface->pending_unset_flags = 0;
|
||||||
|
surface->pending_set_flags = 0;
|
||||||
|
}
|
||||||
|
|
||||||
static gboolean
|
static gboolean
|
||||||
check_autohide (GdkEvent *event)
|
check_autohide (GdkEvent *event)
|
||||||
{
|
{
|
||||||
|
@ -59,6 +59,8 @@ struct _GdkSurface
|
|||||||
more than we have to, but it represents the "true" damage. */
|
more than we have to, but it represents the "true" damage. */
|
||||||
cairo_region_t *active_update_area;
|
cairo_region_t *active_update_area;
|
||||||
|
|
||||||
|
GdkToplevelState pending_set_flags;
|
||||||
|
GdkToplevelState pending_unset_flags;
|
||||||
GdkToplevelState state;
|
GdkToplevelState state;
|
||||||
|
|
||||||
guint8 resize_count;
|
guint8 resize_count;
|
||||||
@ -325,9 +327,16 @@ void gdk_surface_constrain_size (GdkGeometry *geometry,
|
|||||||
int *new_width,
|
int *new_width,
|
||||||
int *new_height);
|
int *new_height);
|
||||||
|
|
||||||
|
void gdk_surface_queue_state_change (GdkSurface *surface,
|
||||||
|
GdkToplevelState unset_flags,
|
||||||
|
GdkToplevelState set_flags);
|
||||||
|
|
||||||
|
void gdk_surface_apply_state_change (GdkSurface *surface);
|
||||||
|
|
||||||
GDK_AVAILABLE_IN_ALL
|
GDK_AVAILABLE_IN_ALL
|
||||||
void gdk_surface_request_motion (GdkSurface *surface);
|
void gdk_surface_request_motion (GdkSurface *surface);
|
||||||
|
|
||||||
|
|
||||||
G_END_DECLS
|
G_END_DECLS
|
||||||
|
|
||||||
#endif /* __GDK_SURFACE_PRIVATE_H__ */
|
#endif /* __GDK_SURFACE_PRIVATE_H__ */
|
||||||
|
Loading…
Reference in New Issue
Block a user