mutter/clutter/clutter
Carlos Garnacho f820bb3506 clutter: Keep actors dirty if a redraw was queued up during paint()
In the right combination of circumstances, and given 2 actors (parent
actor P with an offscreen effect and child actor C), we may have the
following situation happening:

- A redraw is queued on the actor C, actors C and P are marked as
  priv->is_dirty and priv->propagated_one_redraw.
- During paint() handling we paint actor P, priv->propagated_one_redraw
  is turned off.
- We recurse into child actor C, priv->propagated_one_redraw is turned
  off.
- A new redraw is queued on actor C, actors C and P are marked as
  priv->is_dirty and priv->propagated_one_redraw.
- The paint() method recurses back, actors C and P get priv->is_dirty
  disabled, priv->propagated_one_redraw remains set.
- At this point queueing up more redraws on actor C will not propagate
  up, because actor C has priv->propagated_one_redraw set, but the
  parent actor P has priv->is_dirty unset, so the offscreen effect will
  not get CLUTTER_EFFECT_PAINT_ACTOR_DIRTY and will avoid repainting
  actor C.

The end result is that actor C does not redraw again, despite requesting
redraws. This situation eventually resolves itself through e.g. relayouts
on actor P, but may take some time to happen.

In order to fix this, consider actors that did get a further redraw
request still dirty after paint().

Fixes: https://gitlab.gnome.org/GNOME/mutter/-/issues/2188
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/2353>
2022-03-31 12:39:17 +00:00
..
cally cally: Get key focus from stage instead of event 2022-03-04 10:58:28 +00:00
deprecated clutter/box-layout: Deprecate :pack-start 2022-01-07 21:14:09 +00:00
clutter-action-private.h clutter: Add handle_event vfunc to ClutterAction 2021-10-29 00:27:18 +02:00
clutter-action.c clutter: Add handle_event vfunc to ClutterAction 2021-10-29 00:27:18 +02:00
clutter-action.h clutter: Add handle_event vfunc to ClutterAction 2021-10-29 00:27:18 +02:00
clutter-actor-box-private.h
clutter-actor-box.c clutter: Stop using GSlice 2021-02-22 13:52:27 +01:00
clutter-actor-meta-private.h
clutter-actor-meta.c clutter/actor-meta: Use G_DECLARE_DERIVABLE_TYPE 2020-05-22 08:56:23 +00:00
clutter-actor-meta.h clutter/actor-meta: Use G_DECLARE_DERIVABLE_TYPE 2020-05-22 08:56:23 +00:00
clutter-actor-private.h clutter: Carry accounting of grabs in the ClutterActors holding them 2022-01-11 16:13:39 +00:00
clutter-actor.c clutter: Keep actors dirty if a redraw was queued up during paint() 2022-03-31 12:39:17 +00:00
clutter-actor.h clutter/actor: Add API to invalidate cached paint volumes 2021-04-12 15:18:31 +00:00
clutter-align-constraint.c clutter/align-constraint: Don't take source actors position into account 2020-06-10 19:20:32 +00:00
clutter-align-constraint.h clutter/align-constraint: Add pivot-point property 2020-06-10 19:20:32 +00:00
clutter-animatable.c clutter/animatable: Add way to get an actor from an animatable 2020-07-02 19:36:51 +02:00
clutter-animatable.h clutter/animatable: Add way to get an actor from an animatable 2020-07-02 19:36:51 +02:00
clutter-autocleanups.h Remove ClutterMatrix 2020-10-06 15:34:46 +00:00
clutter-backend-private.h clutter/feature: Remove static vs multiple stage feature 2021-10-18 14:36:15 +00:00
clutter-backend.c clutter/feature: Remove static vs multiple stage feature 2021-10-18 14:36:15 +00:00
clutter-backend.h clutter: Remove leftovers from backend code in build system 2021-07-16 19:08:06 +02:00
clutter-base-types.c clutter/base-types: Remove weird random unicode char 2022-03-05 09:51:44 +00:00
clutter-bezier.c clutter: Stop using GSlice 2021-02-22 13:52:27 +01:00
clutter-bezier.h
clutter-bin-layout.c clutter: Remove allocation flags 2020-05-20 12:50:31 +00:00
clutter-bin-layout.h
clutter-bind-constraint.c Drop ClutterRectangle 2020-06-27 13:35:46 +00:00
clutter-bind-constraint.h
clutter-binding-pool.c clutter: Stop using GSlice 2021-02-22 13:52:27 +01:00
clutter-binding-pool.h
clutter-blur-effect.c clutter: Remove CLUTTER_ENABLE_EXPERIMENTAL_API 2021-02-05 17:05:19 +00:00
clutter-blur-effect.h
clutter-blur-private.h clutter/blur: Make sigma a float 2020-12-17 13:21:50 +00:00
clutter-blur.c clutter/blur: Select a better n_steps 2020-12-17 13:21:50 +00:00
clutter-box-layout.c clutter/box-layout: Don't cast children sizes to integers 2022-02-14 14:24:41 +00:00
clutter-box-layout.h clutter/box-layout: Deprecate :pack-start 2022-01-07 21:14:09 +00:00
clutter-brightness-contrast-effect.c clutter: Remove CLUTTER_ENABLE_EXPERIMENTAL_API 2021-02-05 17:05:19 +00:00
clutter-brightness-contrast-effect.h
clutter-build-config.h.meson clutter: Remove leftovers from backend code in build system 2021-07-16 19:08:06 +02:00
clutter-cairo.c
clutter-cairo.h
clutter-canvas.c clutter: Remove CLUTTER_ENABLE_EXPERIMENTAL_API 2021-02-05 17:05:19 +00:00
clutter-canvas.h
clutter-child-meta.c
clutter-child-meta.h
clutter-click-action.c clutter/click-action: Fix a couple of fall-through warnings 2022-03-04 23:12:24 +00:00
clutter-click-action.h clutter: Use G_DECLARE_DERIVABLE_TYPE for ClutterAction and subclasses 2020-05-22 08:56:23 +00:00
clutter-clone.c clutter: Remove CLUTTER_ENABLE_EXPERIMENTAL_API 2021-02-05 17:05:19 +00:00
clutter-clone.h
clutter-color-static.h
clutter-color.c clutter: Stop using GSlice 2021-02-22 13:52:27 +01:00
clutter-color.h
clutter-colorize-effect.c clutter: Remove CLUTTER_ENABLE_EXPERIMENTAL_API 2021-02-05 17:05:19 +00:00
clutter-colorize-effect.h
clutter-constraint-private.h
clutter-constraint.c
clutter-constraint.h
clutter-container-private.h
clutter-container.c clutter/container: Remove clutter_container_get_children 2021-10-15 14:22:37 -03:00
clutter-container.h clutter/container: Remove clutter_container_raise_child 2021-10-15 14:22:37 -03:00
clutter-content-private.h
clutter-content.c clutter/content: Mark optional parameters as such in annotation 2021-11-08 15:46:09 +00:00
clutter-content.h
clutter-damage-history.c clutter/stage-cogl: Extract damage history logic 2020-05-26 13:54:28 +00:00
clutter-damage-history.h clutter: Make ClutterDamageHistory API public to mutter 2021-07-16 19:08:06 +02:00
clutter-debug.h clutter: Add an lg command to set max render time constant 2021-07-13 08:09:43 +00:00
clutter-deform-effect.c clutter: Remove CLUTTER_ENABLE_EXPERIMENTAL_API 2021-02-05 17:05:19 +00:00
clutter-deform-effect.h
clutter-deprecated.h clutter/box-layout: Deprecate :pack-start 2022-01-07 21:14:09 +00:00
clutter-desaturate-effect.c clutter/desaturate-effect: Use fabs() with passed double 2022-03-04 23:12:24 +00:00
clutter-desaturate-effect.h
clutter-easing.c
clutter-easing.h
clutter-effect-private.h clutter/effect: Move ClutterEffect creation to ClutterActor 2020-12-15 12:07:57 -03:00
clutter-effect.c clutter/effect: Don't call effect paint_node() if pre_paint() failed 2021-01-02 19:00:39 +00:00
clutter-effect.h clutter/effect: Add paint nodes to all paint vfuncs 2020-12-15 11:48:28 -03:00
clutter-enum-types.c.in clutter: Drop "volatile" from static GTypes in manual registration 2021-03-22 10:47:51 +00:00
clutter-enum-types.h.in
clutter-enums.h clutter: Add ClutterInputCapabilities flagset 2022-03-30 12:06:52 +00:00
clutter-event-private.h clutter: Pass target actor of events to event filter functions 2022-03-21 23:08:40 +00:00
clutter-event.c clutter: Pass target actor of events to event filter functions 2022-03-21 23:08:40 +00:00
clutter-event.h clutter: Pass target actor of events to event filter functions 2022-03-21 23:08:40 +00:00
clutter-feature.c clutter/feature: Remove static vs multiple stage feature 2021-10-18 14:36:15 +00:00
clutter-feature.h
clutter-fixed-layout.c clutter/actor: Add position argument to allocate_preferred_size() 2020-07-07 16:47:00 +00:00
clutter-fixed-layout.h
clutter-flatten-effect.c
clutter-flatten-effect.h
clutter-flow-layout.c *: Fix spelling mistakes found by codespell 2020-08-29 09:10:31 +00:00
clutter-flow-layout.h
clutter-frame-clock.c clutter/frame-clock: Add lateness to dispatch trace 2022-03-04 10:14:51 +03:00
clutter-frame-clock.h clutter: Remove unused time_us parameter from ClutterFrameListenerIface 2022-01-05 15:57:45 +00:00
clutter-frame-private.h clutter: Introduce ClutterFrame 2021-01-22 16:47:08 +00:00
clutter-frame.c clutter: Introduce ClutterFrame 2021-01-22 16:47:08 +00:00
clutter-frame.h clutter: Introduce ClutterFrame 2021-01-22 16:47:08 +00:00
clutter-gesture-action-private.h
clutter-gesture-action.c clutter: Always unregister point on GRAB_NOTIFY leave event 2022-03-28 17:11:02 +00:00
clutter-gesture-action.h clutter: Use G_DECLARE_DERIVABLE_TYPE for ClutterAction and subclasses 2020-05-22 08:56:23 +00:00
clutter-grab.h clutter: Add docs and introspection annotations to grabs 2022-01-29 00:37:14 +00:00
clutter-graphene.c clutter: Register progress function for graphene_matrix_t 2020-10-06 15:34:47 +00:00
clutter-graphene.h
clutter-grid-layout.c clutter: Remove allocation flags 2020-05-20 12:50:31 +00:00
clutter-grid-layout.h
clutter-id-pool.c clutter: Stop using GSlice 2021-02-22 13:52:27 +01:00
clutter-id-pool.h
clutter-image.c clutter: Remove CLUTTER_ENABLE_EXPERIMENTAL_API 2021-02-05 17:05:19 +00:00
clutter-image.h
clutter-input-device-private.h clutter: Remove input device grabs 2022-01-29 02:11:37 +01:00
clutter-input-device-tool.c clutter: Make axes part of the device tool 2020-11-27 15:14:33 +00:00
clutter-input-device-tool.h clutter: Make axes part of the device tool 2020-11-27 15:14:33 +00:00
clutter-input-device.c clutter: Add compatibility code to get input capabilities from device type 2022-03-30 12:06:52 +00:00
clutter-input-device.h clutter: Add ClutterInputDevice::capabilities property 2022-03-30 12:06:52 +00:00
clutter-input-focus-private.h
clutter-input-focus.c clutter: Only reset preedit text if set 2021-10-19 17:52:54 +00:00
clutter-input-focus.h clutter: Prepare input focus for IM event delivery 2020-08-31 08:40:12 +00:00
clutter-input-method-private.h
clutter-input-method.c clutter: Add ClutterPreeditResetMode hint to preedit text 2021-09-03 22:05:46 +00:00
clutter-input-method.h clutter: Add ClutterPreeditResetMode hint to preedit text 2021-09-03 22:05:46 +00:00
clutter-input-pointer-a11y-private.h
clutter-input-pointer-a11y.c clutter: Move ClutterInputDevice fields to private struct 2020-11-27 15:14:34 +00:00
clutter-interval.c *: Fix spelling mistakes found by codespell 2020-08-29 09:10:31 +00:00
clutter-interval.h
clutter-keyframe-transition.c
clutter-keyframe-transition.h
clutter-keymap-private.h clutter/keymap: Make caps and num lock state properties 2021-03-04 17:39:08 +00:00
clutter-keymap.c clutter/keymap: Make caps and num lock state properties 2021-03-04 17:39:08 +00:00
clutter-keymap.h clutter/keymap: Make caps and num lock state properties 2021-03-04 17:39:08 +00:00
clutter-keysyms-table.c
clutter-keysyms-update.pl *: Fix spelling mistakes found by codespell 2020-08-29 09:10:31 +00:00
clutter-keysyms.h
clutter-layout-manager.c *: Fix spelling mistakes found by codespell 2020-08-29 09:10:31 +00:00
clutter-layout-manager.h *: Fix spelling mistakes found by codespell 2020-08-29 09:10:31 +00:00
clutter-layout-meta.c
clutter-layout-meta.h
clutter-macros.h
clutter-main.c clutter: Pass target actor of events to event filter functions 2022-03-21 23:08:40 +00:00
clutter-main.h clutter: Remove CLUTTER_DEFAULT_FPS and default rate 2021-10-18 14:36:15 +00:00
clutter-marshal.list
clutter-mutter.h clutter: Store the per-pointer picked actor's clear area 2021-12-07 20:04:08 +00:00
clutter-offscreen-effect-private.h
clutter-offscreen-effect.c cogl: Remove cogl_texture_new_with_size 2021-12-07 15:32:21 +00:00
clutter-offscreen-effect.h clutter/effect: Add paint nodes to all paint vfuncs 2020-12-15 11:48:28 -03:00
clutter-page-turn-effect.c
clutter-page-turn-effect.h
clutter-paint-context-private.h clutter/stage: Use multiple frusta depending on the redraw clip 2020-10-16 13:46:23 -03:00
clutter-paint-context.c clutter/stage: Use multiple frusta depending on the redraw clip 2020-10-16 13:46:23 -03:00
clutter-paint-context.h screen-cast/area-src: Clear framebuffer before painting stage 2020-09-30 15:56:07 +00:00
clutter-paint-node-private.h Explicitly create the clutter context and backend 2021-10-18 14:36:15 +00:00
clutter-paint-node.c clutter: Drop "volatile" from static GTypes in manual registration 2021-03-22 10:47:51 +00:00
clutter-paint-node.h clutter/paint-node: Add multi-rect operations 2020-12-17 03:04:03 +00:00
clutter-paint-nodes.c cogl: Remove usages of framebuffer_draw_primitive 2021-12-07 15:32:21 +00:00
clutter-paint-nodes.h clutter/blur: Make sigma a float 2020-12-17 13:21:50 +00:00
clutter-paint-volume-private.h clutter: Stop using GSlice 2021-02-22 13:52:27 +01:00
clutter-paint-volume.c clutter/paint-volume: Union paint volumes correctly using Graphene 2021-05-04 15:10:23 +00:00
clutter-pan-action.c clutter: Drop default action of Pan action 2021-10-28 23:52:04 +02:00
clutter-pan-action.h clutter: Drop default action of Pan action 2021-10-28 23:52:04 +02:00
clutter-path-constraint.c
clutter-path-constraint.h
clutter-path.c clutter: Stop using GSlice 2021-02-22 13:52:27 +01:00
clutter-path.h
clutter-pick-context-private.h clutter/actor: Cull out when picking 2020-11-25 16:34:29 +00:00
clutter-pick-context.c clutter: Also log overlap regions in ClutterPickContext/Stack 2021-12-07 20:04:08 +00:00
clutter-pick-context.h clutter: Also log overlap regions in ClutterPickContext/Stack 2021-12-07 20:04:08 +00:00
clutter-pick-stack-private.h clutter: Calculate "safe area" during pointer pick 2021-12-07 20:04:08 +00:00
clutter-pick-stack.c clutter/pick-stack: Avoid uninitialized cairo_region_subtract_rectangle 2022-03-29 18:13:11 +08:00
clutter-private.h clutter: Remove left over fb bit masks 2021-10-18 14:36:15 +00:00
clutter-property-transition.c clutter/timeline: Add way to associate a timeline to an actor 2020-07-02 19:36:50 +02:00
clutter-property-transition.h clutter/transition: Get timeline actor from animatable 2020-07-02 19:36:51 +02:00
clutter-rotate-action.c clutter: Drop default "rotate" action in ClutterRotateAction 2021-10-28 23:52:04 +02:00
clutter-rotate-action.h clutter: Drop default "rotate" action in ClutterRotateAction 2021-10-28 23:52:04 +02:00
clutter-script-parser.c clutter: Stop using GSlice 2021-02-22 13:52:27 +01:00
clutter-script-private.h clutter: Remove ClutterAnimation 2020-05-07 20:04:07 +00:00
clutter-script.c clutter: Stop using GSlice 2021-02-22 13:52:27 +01:00
clutter-script.h clutter: Remove deprecated 'ClutterState' 2020-05-07 20:04:07 +00:00
clutter-scriptable.c
clutter-scriptable.h
clutter-scroll-actor.c clutter/scroll-actor: Use graphene APIs 2020-10-06 15:34:48 +00:00
clutter-scroll-actor.h
clutter-seat-private.h clutter: Add ClutterSeat private API to grab devices 2022-01-11 16:13:39 +00:00
clutter-seat.c clutter: Add ClutterSeat private API to grab devices 2022-01-11 16:13:39 +00:00
clutter-seat.h clutter/virtual-input-device: Add API to get seat 2022-01-17 09:48:51 +01:00
clutter-settings-private.h clutter: Move pointer a11y settings management from MetaInputSettings 2021-05-05 19:07:26 +00:00
clutter-settings.c clutter: Move pointer a11y settings management from MetaInputSettings 2021-05-05 19:07:26 +00:00
clutter-settings.h
clutter-shader-effect.c clutter: Stop using GSlice 2021-02-22 13:52:27 +01:00
clutter-shader-effect.h
clutter-shader-types.c clutter: Stop using GSlice 2021-02-22 13:52:27 +01:00
clutter-shader-types.h
clutter-snap-constraint.c
clutter-snap-constraint.h
clutter-stage-manager-private.h
clutter-stage-manager.c
clutter-stage-manager.h
clutter-stage-private.h clutter: Do not check redraw area for pointer repicks 2022-01-27 11:08:24 +00:00
clutter-stage-view-private.h clutter: Do not check redraw area for pointer repicks 2022-01-27 11:08:24 +00:00
clutter-stage-view.c clutter: Do not check redraw area for pointer repicks 2022-01-27 11:08:24 +00:00
clutter-stage-view.h clutter/stage-view: Make get_refresh_rate() public 2020-11-19 19:41:40 +01:00
clutter-stage-window.c stage-impl: Move properties from the stage window here 2022-01-17 09:48:51 +01:00
clutter-stage-window.h clutter: Make ClutterStageView API public to mutter 2021-07-16 19:08:06 +02:00
clutter-stage.c clutter: Pass target actor of events to event filter functions 2022-03-21 23:08:40 +00:00
clutter-stage.h clutter: Add clutter_stage_get_event_actor() API call 2022-03-04 10:58:28 +00:00
clutter-swipe-action.c clutter: Drop ClutterSwipeAction::swipe default vmethod 2021-10-28 23:52:04 +02:00
clutter-swipe-action.h clutter: Drop ClutterSwipeAction::swipe default vmethod 2021-10-28 23:52:04 +02:00
clutter-tap-action.c
clutter-tap-action.h
clutter-text-buffer.c
clutter-text-buffer.h *: Fix spelling mistakes found by codespell 2020-08-29 09:10:31 +00:00
clutter-text.c clutter: Use ClutterGrab for ClutterText implicit grab 2022-01-29 00:37:14 +00:00
clutter-text.h
clutter-texture-content.c cogl: Remove cogl_texture_new_from_sub_texture 2021-12-07 15:32:21 +00:00
clutter-texture-content.h clutter: Add new ClutterContent type ClutterTextureContent 2021-06-29 21:36:43 +00:00
clutter-timeline-private.h clutter/master-clock: Move out private timeline declarations 2020-07-02 19:36:50 +02:00
clutter-timeline.c clutter/timeline: Minor documentation corrections 2022-01-05 15:57:45 +00:00
clutter-timeline.h clutter/timeline: Deprecate timelines without an actor or frame clock 2020-07-02 19:36:50 +02:00
clutter-transition-group.c clutter/master-clock: Move out private timeline declarations 2020-07-02 19:36:50 +02:00
clutter-transition-group.h
clutter-transition.c clutter/transition: Get timeline actor from animatable 2020-07-02 19:36:51 +02:00
clutter-transition.h
clutter-types.h clutter: Introduce ClutterFrame 2021-01-22 16:47:08 +00:00
clutter-units.c clutter: Stop using GSlice 2021-02-22 13:52:27 +01:00
clutter-units.h
clutter-util.c clutter: Stop using GSlice 2021-02-22 13:52:27 +01:00
clutter-virtual-input-device.c clutter/virtual-input-device: Add API to get seat 2022-01-17 09:48:51 +01:00
clutter-virtual-input-device.h clutter/virtual-input-device: Add API to get seat 2022-01-17 09:48:51 +01:00
clutter-zoom-action.c clutter: Drop ClutterZoomGesture's zoom-axis property/methods 2021-10-28 23:52:04 +02:00
clutter-zoom-action.h clutter: Drop ClutterZoomGesture's zoom-axis property/methods 2021-10-28 23:52:04 +02:00
clutter.h clutter: Add yet another grab API 2022-01-11 16:13:39 +00:00
meson.build clutter: Add yet another grab API 2022-01-11 16:13:39 +00:00
mutter-clutter.pc.in