window: Update the shape, input, and opaque regions immediately
... and individually. It turns out that updating the opaque region was causing the shape region to be updated, which was causing a new shape mask to be generated and uploaded to the GPU. Considering GTK+ regenerates the opaque region on pretty much any focus change, this is not good.
This commit is contained in:
parent
29edefdfc5
commit
64a82c8d77
5 changed files with 41 additions and 10 deletions
|
@ -823,7 +823,31 @@ is_grabbed_event (MetaDisplay *display,
|
|||
}
|
||||
|
||||
void
|
||||
meta_compositor_window_shape_changed (MetaCompositor *compositor,
|
||||
meta_compositor_update_shape_region (MetaCompositor *compositor,
|
||||
MetaWindow *window)
|
||||
{
|
||||
MetaWindowActor *window_actor;
|
||||
window_actor = META_WINDOW_ACTOR (meta_window_get_compositor_private (window));
|
||||
if (!window_actor)
|
||||
return;
|
||||
|
||||
meta_window_actor_update_shape_region (window_actor);
|
||||
}
|
||||
|
||||
void
|
||||
meta_compositor_update_input_region (MetaCompositor *compositor,
|
||||
MetaWindow *window)
|
||||
{
|
||||
MetaWindowActor *window_actor;
|
||||
window_actor = META_WINDOW_ACTOR (meta_window_get_compositor_private (window));
|
||||
if (!window_actor)
|
||||
return;
|
||||
|
||||
meta_window_actor_update_input_region (window_actor);
|
||||
}
|
||||
|
||||
void
|
||||
meta_compositor_update_opaque_region (MetaCompositor *compositor,
|
||||
MetaWindow *window)
|
||||
{
|
||||
MetaWindowActor *window_actor;
|
||||
|
@ -831,7 +855,7 @@ meta_compositor_window_shape_changed (MetaCompositor *compositor,
|
|||
if (!window_actor)
|
||||
return;
|
||||
|
||||
meta_window_actor_update_shape (window_actor);
|
||||
meta_window_actor_update_opaque_region (window_actor);
|
||||
}
|
||||
|
||||
void
|
||||
|
|
|
@ -46,7 +46,6 @@ gboolean meta_window_actor_effect_in_progress (MetaWindowActor *self);
|
|||
void meta_window_actor_sync_actor_geometry (MetaWindowActor *self,
|
||||
gboolean did_placement);
|
||||
void meta_window_actor_sync_visibility (MetaWindowActor *self);
|
||||
void meta_window_actor_update_shape (MetaWindowActor *self);
|
||||
void meta_window_actor_update_opacity (MetaWindowActor *self);
|
||||
void meta_window_actor_mapped (MetaWindowActor *self);
|
||||
void meta_window_actor_unmapped (MetaWindowActor *self);
|
||||
|
@ -58,4 +57,8 @@ void meta_window_actor_queue_frame_drawn (MetaWindowActor *self,
|
|||
void meta_window_actor_effect_completed (MetaWindowActor *actor,
|
||||
gulong event);
|
||||
|
||||
void meta_window_actor_update_shape_region (MetaWindowActor *self);
|
||||
void meta_window_actor_update_input_region (MetaWindowActor *self);
|
||||
void meta_window_actor_update_opaque_region (MetaWindowActor *self);
|
||||
|
||||
#endif /* META_WINDOW_ACTOR_PRIVATE_H */
|
||||
|
|
|
@ -1973,7 +1973,7 @@ build_and_scan_frame_mask (MetaWindowActor *self,
|
|||
g_free (mask_data);
|
||||
}
|
||||
|
||||
static void
|
||||
void
|
||||
meta_window_actor_update_shape_region (MetaWindowActor *self)
|
||||
{
|
||||
MetaWindowActorPrivate *priv = self->priv;
|
||||
|
@ -2011,7 +2011,7 @@ meta_window_actor_update_shape_region (MetaWindowActor *self)
|
|||
meta_window_actor_invalidate_shadow (self);
|
||||
}
|
||||
|
||||
static void
|
||||
void
|
||||
meta_window_actor_update_input_region (MetaWindowActor *self)
|
||||
{
|
||||
MetaWindowActorPrivate *priv = self->priv;
|
||||
|
@ -2049,7 +2049,7 @@ meta_window_actor_update_input_region (MetaWindowActor *self)
|
|||
cairo_region_destroy (region);
|
||||
}
|
||||
|
||||
static void
|
||||
void
|
||||
meta_window_actor_update_opaque_region (MetaWindowActor *self)
|
||||
{
|
||||
MetaWindowActorPrivate *priv = self->priv;
|
||||
|
|
|
@ -7677,7 +7677,7 @@ meta_window_set_opaque_region (MetaWindow *window,
|
|||
window->opaque_region = cairo_region_reference (region);
|
||||
|
||||
if (window->display->compositor)
|
||||
meta_compositor_window_shape_changed (window->display->compositor, window);
|
||||
meta_compositor_update_opaque_region (window->display->compositor, window);
|
||||
}
|
||||
|
||||
void
|
||||
|
@ -7763,7 +7763,7 @@ meta_window_set_shape_region (MetaWindow *window,
|
|||
window->shape_region = cairo_region_reference (region);
|
||||
|
||||
if (window->display->compositor)
|
||||
meta_compositor_window_shape_changed (window->display->compositor, window);
|
||||
meta_compositor_update_shape_region (window->display->compositor, window);
|
||||
}
|
||||
|
||||
void
|
||||
|
@ -7848,7 +7848,7 @@ meta_window_set_input_region (MetaWindow *window,
|
|||
window->input_region = cairo_region_reference (region);
|
||||
|
||||
if (window->display->compositor)
|
||||
meta_compositor_window_shape_changed (window->display->compositor, window);
|
||||
meta_compositor_update_input_region (window->display->compositor, window);
|
||||
}
|
||||
|
||||
void
|
||||
|
|
|
@ -62,7 +62,11 @@ void meta_compositor_manage_screen (MetaCompositor *compositor,
|
|||
void meta_compositor_unmanage_screen (MetaCompositor *compositor,
|
||||
MetaScreen *screen);
|
||||
|
||||
void meta_compositor_window_shape_changed (MetaCompositor *compositor,
|
||||
void meta_compositor_update_shape_region (MetaCompositor *compositor,
|
||||
MetaWindow *window);
|
||||
void meta_compositor_update_input_region (MetaCompositor *compositor,
|
||||
MetaWindow *window);
|
||||
void meta_compositor_update_opaque_region (MetaCompositor *compositor,
|
||||
MetaWindow *window);
|
||||
void meta_compositor_window_opacity_changed (MetaCompositor *compositor,
|
||||
MetaWindow *window);
|
||||
|
|
Loading…
Reference in a new issue