| Commit message (Collapse) | Author | Age | Files | Lines |
|
|
|
|
|
|
|
| |
mutter-clutter is a private library that is only used by the shell and
not meant to be ABI/API compatible in between versions, so there's no
need to add padding to classes.
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/2903>
|
|
|
|
|
|
|
|
|
| |
This is needed by GNOME Shell to remove itself as a input method
implementation during its shutdown sequence. We can't do it ourself
later because at mutters own shutdowns equence, the GNOME Shell
Javascript context has by that time already been teared down.
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/2934>
|
|
|
|
|
|
| |
It will be used in the next commit.
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/2823>
|
|
|
|
|
|
|
|
|
|
|
|
| |
It will be used to schedule Wayland frame events independently from both
update and presentation time, as the former may happen multiple times
frame and the later not at all.
For frame events we want a timing that is just late enough to ensure
that a following commit by a Wayland client will not get included into
the current frame any more.
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/2823>
|
|
|
|
|
|
|
|
| |
When rendering through the 'paint-view' handler, assign the frame
to the paint context. Otherwise, when rendering outside of the
frame clock schedule, don't.
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/2804>
|
|
|
|
|
|
|
|
|
|
| |
This is not yet used, but next commits will need to assign a frame
to the paint context whenever painting onscreens.
Assigning a frame to the paint context is a one-way operation, and
treats multiple assignments strictly as a programming error.
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/2804>
|
|
|
|
|
|
|
| |
Add the (optional) parameters when they are actually supported and at least add
the minimal documentation on functions.
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/2951>
|
|
|
|
|
|
|
|
|
|
|
| |
Both Clutter and Cogl use g_return(_val)_if_fail() to safeguard
introspected API. Release builds were dropping these checks, which could
result in a much more crashy experience, especially when considering
extensions, but also due to bugs in the shell code itself.
This won't affect any major distro, because they all use "plain" builds.
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/2930>
|
|
|
|
|
|
|
|
|
| |
GValues containing objects and strings can be set to NULL, which means
the transformation functions from ClutterPath to string and vice versa
must be NULL-safe.
Closes: https://gitlab.gnome.org/GNOME/mutter/-/issues/2625
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/2929>
|
|
|
|
|
|
|
| |
This shouldn't happen, but warn anyway to be a bit more helpful if
things go bad.
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/2901>
|
|
|
|
|
|
|
|
| |
glib now warns if the return value is not used, so use the API as
intended instead of assigning the character data separately before
freeing the GString.
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/2889>
|
|
|
|
| |
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/2855>
|
|
|
|
|
|
| |
The one set by the native backend is empty, but it will be used later.
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/2855>
|
|
|
|
|
|
| |
This will carry an on-demand created MetaKmsUpdate.
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/2855>
|
|
|
|
|
|
|
| |
This will be used to allow the native backend to allocate a KMS update
that'll be used for one frame.
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/2855>
|
|
|
|
|
|
|
| |
This will allow the frame clock listener to allocate larger structs
where it can keep e.g. backend specific frame state.
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/2855>
|
|
|
|
|
|
|
|
|
| |
Stage view users can schedule updates at ease with
clutter_stage_view_schedule_update(), but couldn't schedule update
"now". Make that easy too by adding
clutter_stage_view_schedule_update_now().
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/2854>
|
|
|
|
|
|
|
|
| |
If we call schedule(), which will schedule an update some time in the
future, and then schedule_now(), we should reschedule the frame clock to
update immediately, and not some time in the future.
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/2854>
|
|
|
|
|
|
| |
This means the two Cogl drivers left are OpenGL >= 3.1 and GLES >= 2.0.
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/2672>
|
|
|
|
| |
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/2672>
|
|
|
|
|
|
|
|
| |
For motion-induced crossing events, this will be the device that generated
the motion. For code-induced crossing events (e.g. grabs or actors disappearing)
this will be none.
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/2828>
|
|
|
|
|
|
|
| |
Add a few tests to make sure all the hairy details of crossing behavior etc
don't fall apart again.
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/2342>
|
|
|
|
|
|
|
| |
Just like in mutter, add a define for exporting functions so that they
can be used in tests. This will be useful in the next commit.
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/2342>
|
|
|
|
|
|
|
| |
Clutter has implicit grabbing now, so no need for grabbing all events
using clutter_stage_grab() anymore.
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/2342>
|
|
|
|
|
|
|
|
|
|
|
|
| |
Since the last commit, ClutterStage automatically cancels an implicit
grab (including all its ClutterActions) when a conflicting ClutterGrab
appears.
This means we no longer have to look out for GRAB_NOTIFY crossings in
ClutterGestureAction and can instead depend on the sequence_cancelled()
vfunc for this.
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/2342>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
A ClutterGrab takes precedence over implicit grabs, so when one happens,
let's check which part of the implicit grab tree is inside the new
ClutterGrab. Cancel and remove the parts which aren't, and if nothing
is in there anymore, cancel the whole implicit grab.
Emitting crossing events correctly here is getting quite tricky:
- When the implicit grab didn't get cancelled by the ClutterGrab, we
simply want to emit all GRAB_NOTIFY crossings to the implicit grab, as
we do with all other crossings.
- When the implicit grab did get cancelled and the new ClutterGrab wants
to emit ENTER crossings, we want those to be emitted to the actual
targets, so cancel the implicit grab before emission.
- In the last case where the implicit grab did get cancelled and the new
ClutterGrab wants to emit LEAVE crossings, those should be emitted to
the implicit grab again, so we cancel the grab only after the emission
of those.
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/2342>
|
|
|
|
|
|
|
|
|
| |
Now that we have two kinds of grabs, the intricacies of event delivery
got slightly more complicated. So this seems like a good point to
introduce a new GRABS debug flag that gives an overview of which grabs
are currently in effect.
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/2342>
|
|
|
|
|
|
|
|
| |
Now that we have more robust API to get notified about points that got
cancelled, make use of it to cancel ClutterGestureActions and
ClutterClickActions.
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/2342>
|
|
|
|
|
|
|
|
|
|
| |
We're almost there, everything is in place to notify ClutterActions
about a sequence getting pulled away under its feet.
The only thing that's missing is the actual notification to actions now,
so let's do that.
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/2342>
|
|
|
|
|
|
|
|
|
|
|
|
| |
Another baby step just like the last commit: This commit takes care of
the opposite case: An action handling a sequence event stops further
emission of events to actors.
Since sequences remain around for longer than the context of just a
single event, it makes sense to provide a way to "claim" those sequences
even when outside of event handling context, so introduce API for that.
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/2342>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
As soon as any event of a sequence is handles/stopped during emission,
all actors and actions that would have gotten to see it afterwards have
a big problem: If that event was a TOUCH_END event, the actor/action is
forever going to think that this touch is still active.
For ClutterActions, we're going to handle this by introducing a way to
send them a notification when stuff like this happens.
As a baby step towards all that, make event emission exclusive to actors
as soon as any actor stopped an event.
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/2342>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
We'll soon introduce a new gesture tracking framework which heavily
depends on ClutterActions seeing all events of a sequence. For this to
work, a larger change to event delivery is needed: Implicit grabbing of
all events for button and touch press->motion->release sequences to
ensure ClutterActions continue receiving events for the whole sequence.
This commit takes care of that: At the start of an event sequence we
collect all the event-handling actors and actions to a GArray that lives
in the PointerDeviceEntry, and then deliver all events belonging to
that sequence to the same actors/actions until the sequence ends.
To avoid events getting pulled from under our feet when mutters event
filter returns CLUTTER_EVENT_STOP, this also introduces private API
(maybe_lost_implicit_grab()) on ClutterStage so that we can't end up
with stale sequences.
Note that this also slightly changes behavior when it comes to event
delivery to actions: Because we now store actions separated from their
actors, any action returning CLUTTER_EVENT_STOP now stops event
propagation immediately. That was different before, where we'd emit
events to all actions of the actor and only then stop propagation.
Note that this isn't handling ClutterGrabs correctly right now,
this will be a little tricky, so we'll take care of that in a future
commit.
To handle actors getting destroyed or unmapped during a grab, listen to
notify::grab on the deepmost actor in the implicit grab tree. This gives
us a notification when any actor inside the tree goes unmapped.
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/2342>
|
|
|
|
|
|
|
|
|
|
| |
A fairly small refactor, move the emission of events to actions from
clutter_actor_event() to stage level.
We do this because in the future we'll need to know on stage level
whether events were handled by an actor or by an action.
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/2342>
|
|
|
|
|
|
|
|
| |
We'll need to take a look at the actions of actors twice for every
single event emission once we move emission to the stage, let's not copy
around lists for that.
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/2342>
|
|
|
|
|
|
|
|
|
|
|
|
| |
_clutter_actor_handle_event() currently allocates a new GPtrArray on the
heap for every single event emission, let's avoid this by keeping an
array around in ClutterStage and reusing that.
This is moving the last few bits of event emission into ClutterStage,
which will be useful when we introduce implicit grabbing in subsequent
commits.
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/2342>
|
|
|
|
|
|
|
|
| |
There's no real reason to keep those events exclusive to the stage, some
actors or actions might want to get notified about proximity events too,
so propagate them like any other event.
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/2342>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Right now and due to loads of refactorings lately, the event emission
paths are a bit cluttered (ha ha ha) around in Clutter. For example the
event target actor gets set in clutter-main.c, but event emission is
actually managed by ClutterStage these days.
Since we'll introduce implicit grabbing of touch/button-press sequences
soon, let's shuffle things around a bit to make that easier:
Move event emission to the stage, it now gets a ClutterEvent without any
extra context like the target actor from clutter-main. The stage then
looks up the target actor itself and emits the event to the appropriate
actors in the scenegraph. A special path is introduced for emitting
crossing events, because here the event-receiving actors don't follow
the "capture+bubble from pointer actor to grab actor" rule.
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/2342>
|
|
|
|
|
|
|
|
|
|
|
|
| |
Crossing events should never be stopped during event emission. We
already have a check that enforces this in clutter_actor_event(), but
ClutterActions still sometimes try to stop crossing events from
propagating.
Improve that situation and return CLUTTER_EVENT_PROPAGATE when handling
crossings in ClutterActions, too.
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/2342>
|
|
|
|
|
|
|
|
|
|
| |
There's still a possibility that some events remain within the
`ClutterMainContext` when it's being unref-ed for the last time (as seen
on asan logs). Make sure they get freed by using
`g_async_queue_new_full()` and specifying the appropriate destroy
function.
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/2817>
|
|
|
|
|
|
|
|
|
|
| |
Calculating a timestamp from the past distorts the dispatch lateness
calculation, leading to an inflated max_render_time, which again
increases the likelyhood of next_update_time being in the past.
Fixes 99850f46459
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/2819>
|
|
|
|
|
|
|
|
|
|
| |
clutter_text_set_buffer() tries to freeze/thaw notify, which is not
allowed during finalize and recent glib versions started warning about
this. This call can simply be removed, because the buffer is already set
to NULL on dispose, making the call in finalize redundant.
Closes: https://gitlab.gnome.org/GNOME/mutter/-/issues/2566
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/2790>
|
|
|
|
|
|
|
|
|
| |
That means before-update, prepare-paint, before-paint, paint-view, after-paint,
after-update. While yet to be used, it will be used as a transient frame
book keeping object, to maintain object and state that is only valid
during a frame dispatch.
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/2795>
|
|
|
|
|
|
|
| |
This will allow us to pass a ClutterFrame in interfaces, including ones
that end up being introspected.
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/2795>
|
|
|
|
|
|
|
| |
This will be used, when available, to both check whether frames missed a
vsync cycle, or to calculate when page flips should be queued.
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/2795>
|
|
|
|
|
|
|
| |
Let the ClutterFrame live for the whole frame, and be carried as an
argument to the frame clock listener interface functions.
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/2795>
|
|
|
|
|
|
| |
It's accessed a few times, so keep it around.
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/2795>
|
|
|
|
|
|
|
|
| |
Fix a silly copy-paste mistake. Since `GObject` is the parent class,
chaining up to `dispose()` from within your `finalize()`
implementation just leads to a little memory leak and nothing worse.
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/2799>
|
|
|
|
|
|
|
|
|
| |
Use Pango and Harfbuzz for the task, getting the default language,
then its scripts, then their directions. We pick the first valid
horizontal direction, resorting to LTR as a fallback.
Related: https://gitlab.gnome.org/GNOME/gtk/-/merge_requests/5385
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/2780>
|
|
|
|
|
|
|
| |
It's causing code review warnings whenever another MR tries to change
the same source file.
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/2784>
|
|
|
|
|
|
| |
Infrastructure for adding meta_accelerator_name
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/2407>
|