mutter:wip/carlosg/keep-depressed-mods-depressed

Last commit made on 2018-04-26
Get this branch:
git clone -b wip/carlosg/keep-depressed-mods-depressed https://git.launchpad.net/mutter

Branch merges

Branch information

Name:
wip/carlosg/keep-depressed-mods-depressed
Repository:
lp:mutter

Recent commits

d83c5fc... by Carlos Garnacho

clutter: Keep depressed mods across keymap changes

Those are, evidently, depressed. Forgetting about those when the keymap
changes does no good to them, nor the stuff we are typing.

20176d0... by Georges Basile Stavracas Neto

wayland: Check if state and size changed before calling move_resize()

The current implementation of the XdgSurface v6 protocol does not check
if the window changed before calling meta_window_wayland_move_resize().

The problem with this approach is that calling this function is a costly
operation since we enter the compositor side. In GNOME Shell case, it is
in JavaScript, which triggers a GJS trampoline. Calling this function on
every mouse movement is naturally as terrible as it could be - and is
exactly what happens now.

This commit adds the necessary checks to only call move_resize() when
the window actually changed, or when it needs to be updated.

https://bugzilla.gnome.org/show_bug.cgi?id=780292
Issue: #78

762a3f8... by Georges Basile Stavracas Neto

wayland: Add function to query if window needs move or resize

This will be used by the next commit to determine when a window
geometry change should be ignored or not. Normally, it would be
enough to just check if the position and sizes changed.

The position, in this case, is relative to the client buffer, not
the global position. But because it is not global, there is one,
admitedly unlikely, situation where the window state is updated
while the client size and relative positions don't change.

One can trigger this by e.g. tiling the window to the half-left of
the monitor, then immediately tile it to half-right. In this case,
the window didn't change, just it's state, but nonetheless we need
to notify the compositor and run the full move/resize routines.

When that case happens, though, the MetaWindowWayland is tracking
the pending state change or a move. And this is what we need to
expose.

https://bugzilla.gnome.org/show_bug.cgi?id=780292
Issue: #78

822c266... by Georges Basile Stavracas Neto

window: Let implementations finish state changes

In the old, synchronous X.org world, we could assume that
a state change always meant a synchronizing the window
geometry right after. After firing an operation that
would change the window state, such as maximizing or
tiling the window,

With Wayland, however, this is not valid anymore, since
Wayland is asynchronous. In this scenario, we call
meta_window_move_resize_internal() twice: when the user
executes an state-changing operation, and when the server
ACKs this operation. This breaks the previous assumptions,
and as a consequence, it breaks the GNOME Shell animations
in Wayland.

The solution is giving the MetaWindow control over the time
when the window geometry is synchronized with the compositor.
That is done by introducing a new result flag. Wayland asks
for a compositor sync after receiving an ACK from the server,
while X11 asks for it right away.

Fixes #78

b412e6c... by =?utf-8?q?Florian_M=C3=BCllner?= <email address hidden>

Bump version to 3.29.1

Update NEWS.

ae26cd0... by Jonas Ådahl

native: Restore previous EGL state after blitting onto secondary GPU

Before we just set it to "none", but this was not enough since various
calls will depend on not just the context being active, but the main
rendering surface.

Fixes https://gitlab.gnome.org/GNOME/mutter/issues/21

3104d69... by Marco Trevisan (Treviño)

cogl: Do not unref a NULL object

Add return-if-fail statement to avoid deferencing NULL object

0b3a1c9... by Jonas Ådahl

monitor-manager: Find active monitor when deriving global scale

When deriving the global scale directly from the current hardware state
(as done when using the X11 backend) we are inspecting the logical
state they had prior to the most recent hot plug. That means that a
primary monitor might have been disabled, and a new primary monitor may
not have been assigned yet.

Stop assuming a primary monitor has an active mode before having
reconstructed the logical state by finding some active monitor if the
old primary monitor was disabled. This avoids a crash when trying to
derive the global scale from a disabled monitor.

Closes: https://gitlab.gnome.org/GNOME/mutter/issues/130

423c5f8... by Carlos Garnacho

wayland: Let IM events go through

These paths implicitly relied on the forwarded IM key events having
a source_device backed by a real HW device. This assumption is no
longer held true since commit b5328c977.

Explicitly check the INPUT_METHOD flag so they are handled as they
should despite not being "real HW" events.

3bbff94... by Mario Sánchez Prada

backend: Don't center the pointers on monitor changes

As a follow up to the patch from a95cbd0a, we need to make sure
that the pointer is out of the way as well when monitors changed,
since that's the event that will prevail in some cases. Besides,
this is also consistent with what the code before a95cbd0a was,
which initialized the pointer position in the same way both in
this case and in the real_post_init() function.

Closes: https://gitlab.gnome.org/GNOME/gnome-shell/issues/157