summaryrefslogtreecommitdiff
Commit message (Collapse)AuthorAgeFilesLines
* Bump version to 3.38.33.38.3Florian Müllner2021-01-132-1/+15
| | | | Update NEWS.
* wayland: Ensure pointer constraint region consistencyCarlos Garnacho2021-01-121-6/+9
| | | | | | | | | | | | | | | | | | | Changes in games between fullscreen and windowed modes may trigger chaotic situations where the buffer and the frame size temporarily disagree, producing rectangles with negative width/height. This is usually followed by other updates that bring the pointer constraint up to date. This makes cairo panic and return an "error" empty region, which breaks deeper down when using the region rectangles to apply the pointer constraint. If we hit this situation, ignore the frame rectangle, and just go with the buffer rectangle. Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/1655> (cherry picked from commit 98ef6d0d0521b3cfb72153bc427a9bfc86b8d338)
* clutter: Fix build with clangMarc-Antoine Perennou2021-01-121-1/+1
| | | | | | | Signed-off-by: Marc-Antoine Perennou <Marc-Antoine@Perennou.com> Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/1668> (cherry picked from commit d439501faf68e8d7adac37ebca519ae832d85987)
* monitor-manager-xrandr: Disable CRTCs if there is no monitorKai-Heng Feng2021-01-111-0/+7
| | | | | | | | | | | | | | | | | | | After last monitor gets unplugged from the system, hotplug detection may no longer work on Intel GFX. This is because we didn't trigger a modeset to disable CRTCs, and i915 requires it to make hotplug detection continue to work [1]. There's no guarantee that DPMS off in DDX also disables CRTCs, so explicitly disable CRTCs to solve the issue. [1] https://www.kernel.org/doc/html/latest/gpu/i915.html#hotplug https://gitlab.freedesktop.org/drm/intel/-/issues/2602 Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/1561> (cherry-picked from commit ed87937faf4a327bb27f580939e0d8572f5a6ec3)
* monitor-manager-kms: Disable CRTCs if there is no monitorKai-Heng Feng2021-01-113-0/+25
| | | | | | | | | | | | | | | | | | After last monitor gets unplugged from the system, hotplug detection may no longer work on Intel GFX. This is because we didn't trigger a modeset to disable CRTCs, and i915 requires it to make hotplug detection continue to work [1]. Ensure disabled CRTCs are unset and post a modeset to disable them. [1] https://www.kernel.org/doc/html/latest/gpu/i915.html#hotplug https://gitlab.freedesktop.org/drm/intel/-/issues/2602 Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/1561> (cherry-picked from commit e5b07138f0c8af6ecf5588fafbb61ab97910c379)
* renderer/native: Refactor modeset boilerplate into new helpersKai-Heng Feng2021-01-111-39/+45
| | | | | | | | | | Extract some boilerplate into new functions for next patch. No functional change intended. Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/1561> (cherry-picked from commit 45a9c386bbc5a7f280cf931661f6d0c6ab78cfc6)
* tests/stacking: Add test hiding a modal with a not shown parentJonas Ådahl2020-12-184-3/+72
| | | | | | | | | | | This adds a test case for https://gitlab.gnome.org/GNOME/mutter/-/issues/862 that checks that hiding a dialog where its parent is not yet shown doesn't trigger any asserts or crashes. (cherry picked from commit c94d929332d9371646fde15668097c4ea136147c) Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/1650>
* core: Be more selective looking for a focusable ancestorOlivier Fourdan2020-12-181-1/+4
| | | | | | | | | | | | find_focusable_ancestor() may pick an ancestor window which is not mapped or hidden, and setting focus on that window will fail. Be a tad more selective when looking for a focusable ancestor, to reduce the chance of meta_window_focus() not focusing the happy chosen one. (cherry picked from commit 76d1a64204181f4da82d9614fe59daf350d5dfda) Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/1650>
* core: Make sure focus_default_window() workedOlivier Fourdan2020-12-181-16/+42
| | | | | | | | | | | | | | | | | | | | | | | | | | | | The function focus_default_window() optionally takes a MetaWindow argument denoting a window that should not be focused. That function calls focus_ancestor_or_top_window() which in turn calls meta_window_focus() to pass focus to another window. However meta_window_focus() gives no guarantee that the given window will end up being the one focused, and can fail in various and creative ways. If that fails, we could possibly end up with the focus window being the one to avoid, while the caller assumes focus was changed, going as far as asserting that fact like meta_window_unmanage() does. As a result, mutter may abort simply because meta_window_focus() failed to set focus on the expected window. To avoid that issue, check that the focus did not end up on the window that we explicitly did not want, and if that's the case, simply fallback to the default focus window. Closes: https://gitlab.gnome.org/GNOME/mutter/-/issues/862 (cherry picked from commit afa431547b696a82375412a289993a8d0eebdabd) Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/1650>
* xwayland: Set xrandr primary outputAleksandr Mezin2020-12-154-1/+123
| | | | | | | | | | | | | | | | | | | To find XWayland output that should be the primary one, iterate through all XWayland outputs, and compare their geometry to the geometry of the primary logical monitor. To avoid possible race conditions (Mutter's monitor configuration already updated, but Xrandr not yet), set the output both after Randr notifications and after 'monitors-changed' signal. https://gitlab.gnome.org/GNOME/mutter/-/issues/1407 Signed-off-by: Aleksandr Mezin <mezin.alexander@gmail.com> (cherry picked from commit 4f544b63626aa98a0e706c3862def62b41adb628) Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/1638>
* Update Romanian translationFlorentina Mușat2020-12-121-24/+41
|
* Update Portuguese translationJuliano de Souza Camargo2020-12-071-3/+75
|
* Update Norwegian Bokmål translationKjartan Maraas2020-12-041-130/+204
|
* Bump version to 3.38.23.38.2Florian Müllner2020-12-022-1/+35
| | | | Update NEWS.
* barrier: Complain loudly if bogus barriers are createdJonas Ådahl2020-11-271-0/+4
| | | | | | | | | | | | | | | | The API allows for invalid barriers to be created; in an X11 session, this could result in involutary early exit, so guard against those with soft asserts. These will be logged in the journal as warnings, but will avoid the crash unless compiled out. Note that this doesn't fix the bug, it just makes it more detectable. Related: https://bugzilla.redhat.com/show_bug.cgi?id=1901610 (cherry picked from commit f5949af0bbbb84931382aeabc8dadd2c4e82b8e4) Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/1613>
* seat-native: Fix has_touchscreen becoming FALSE when a non touchscreen ↵Hans de Goede2020-11-271-1/+2
| | | | | | | | | | | | | | | | device gets added Unconditionally setting has_touchscreen to check_touch_mode when a new device gets added leads to has_touchscreen becoming false when during runtime e.g. an USB keyboard gets plugged in. Fix this by setting has_touchscreen to TRUE when check_touch_mode is TRUE and leaving it alone otherwise. https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/1506 (cherry picked from commit 6c240dc83b33d26696825c6ee70560e201542fd7) Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/1610>
* backends/native: Don't crash if keymap is misconfiguredSimon McVittie2020-11-273-0/+11
| | | | | | | | | | | | | | | | | xkb recently gained support for user-specified keymaps, which means we can no longer assume that the configuration data is necessarily fully complete or correct; and the configuration language is quite a labyrinth, so it's easy to get wrong. If setting the keymap fails, leave it in whatever state it previously had, since that seems preferable to crashing with a NULL pointer dereference. Resolves: https://gitlab.gnome.org/GNOME/mutter/-/issues/1555 Signed-off-by: Simon McVittie <smcv@debian.org> (cherry picked from commit 60f647df8ec5a74bddffcc3a20577a7efcef105c) Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/1609>
* monitor-config-manager: Handle multiple builtin panels gracefullycherry-pick-f6db6cd2Jonas Ådahl2020-11-272-0/+149
| | | | | | | | | | | | | | | | | | | | | | | | | | | While multiple built-in panels isn't actually supported in any meaningful manner, if we would ever end up with such a situation, e.g. due to kernel bugs[0], we shouldn't crash when trying to set an 'external only' without any external monitors. While we could handle this with more degraded functionality (e.g. don't support the 'switch' method of monitor configuration at all), handle it by simply not trying to switch to external-only when there are no, according to the kernel, external monitors available. This would e.g. still allow betwene 'mirror-all', and 'linear' switches. The crash itself was disguised as an arbitrary X11 BadValue error, due to mutter trying to resize the root window to 0x0, as the monitor configuration that was applied consisted of zero logical monitors, thus was effectively empty. [0] https://bugzilla.redhat.com/show_bug.cgi?id=1896904 Related: https://bugzilla.redhat.com/show_bug.cgi?id=1899260 (cherry picked from commit f6db6cd2032a1c85c137935907fd9e5c756a5f06) Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/1608>
* screen-cast: Fix segfault when drawing cursorFlorian Zwoch2020-11-261-0/+3
| | | | | | | | | | | | | Add a sanity check if the cursor is on screen and cursor texture data is available. This prevents a potential segfault when trying to access non-existing texture data. Closes: https://gitlab.gnome.org/GNOME/mutter/-/issues/1446 (cherry picked from commit efb577efb0cd23e98caad1544f556cb82130f8e0) Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/1606>
* clutter/frame-clock: Schedule a frame at least once per secondSimon McVittie2020-11-251-1/+2
| | | | | | | | | | | | | | | | | | | Users of Debian arm64 (aarch64) report that on at least some GPUs or screens, after time-based screen blanking has occurred, it is not possible to unlock the screen. Bisection indicates that this regressed in commit 209b1ba3, so presumably this is because a refresh rate of 0 is reported while the screen is blanked, leading to the frame clock pausing forever. Fixes: 209b1ba3 "clutter/frame-clock: Adapt refresh rate from to frame info" Closes: https://gitlab.gnome.org/GNOME/mutter/-/issues/1536 Bug-Debian: https://bugs.debian.org/974172 Signed-off-by: Simon McVittie <smcv@debian.org> (cherry picked from commit 1a1f1eccbaeded8fd42b5157b83e3ab87722f90d) Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/1602>
* gschema/wayland: Do not disable the X Security extensionOlivier Fourdan2020-11-251-1/+1
| | | | | | | | | | | If Xwayland was built with the X Security extension enabled, it should be safe to use, there is no need to disable it by default from mutter. https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/1485 Closes: https://gitlab.gnome.org/GNOME/mutter/-/issues/1552 (cherry picked from commit 935d594978693547deb3a3f1cd8b8193daa275ae) Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/1600>
* surface-actor-wayland: Optimize get_current_primary_view for single viewRobert Mader2020-11-231-7/+15
| | | | | | | | | | | | | In case we only have a single view (or there's only one view left to check and the actor is visible on previous views) we can take a short- cut, saving a region allocation and some calculations. While on it, declare float numbers in '.f' style to make them more recognizable. Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/1596> (cherry picked from commit 3b7137cb3595ebf78491966f6ee1037ba9e9b6e1)
* backends/native: Wait to have an stage before emitting CLUTTER_DEVICE_ADDEDCarlos Garnacho2020-11-231-7/+28
| | | | | | | | | | | | | | | | During seat initialization, we process early libinput events (adding all known devices) before the seat gets a stage assigned. This causes warnings when trying to handle the corresponding CLUTTER_DEVICE_ADDED events, as they are sent stageless. As it is definitely too soon to have those events sent meaningfully, filter those events out and instead handle the CLUTTER_DEVICE_ADDED emission for all known devices after the seat receives an stage. This makes the events guaranteed to be emitted early in initialization, but not so soon that they can't be handled yet. Fixes: https://gitlab.gnome.org/GNOME/mutter/-/issues/1549 Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/1597>
* window: Fix size hints with CSDOlivier Fourdan2020-11-231-1/+1
| | | | | | | | | | | | | | | | | | | Commit 03c69ed8 ("Do not go past size hints on resize") was meant to ensure the size hints set by the client would be honored during resize, as going past those values could cause the window to move on resize. However, it did so by calling ensure_size_hints_satisfied() which works with the frame rect rather than the client rect. As a result, the minimum size enforced would end up being larger than expected with client-side decorations. Use meta_window_maybe_apply_size_hints() instead which automatically adjusts for client size. Closes: https://gitlab.gnome.org/GNOME/mutter/-/issues/1542 (cherry picked from commit 27131198c702d07b43e8bba2d1bf15ffef489ade) Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/1595>
* core/window: Move size hints to dedicated functionChristian Rauch2020-11-231-6/+11
| | | | | | | https://gitlab.gnome.org/GNOME/mutter/merge_requests/801#note_676932 (cherry picked from commit 3faea8532c0935ee07ff2fff0517f230aa5d6c0c) Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/1595>
* clutter/text: Check if attributes are equal before applyingDaniel van Vugt2020-11-221-4/+50
| | | | | | | | | | | | | | Pango doesn't make it easy but the lists are generally extremely short and it's worth the effort. Because when they are equal we can avoid the `clutter_actor_queue_relayout` in `clutter_text_set_attributes`. This particularly avoids stuttering when moving the mouse over the gnome-shell calendar (which repeatedly sets `font-feature-settings: "tnum"` on `calendar-day-base` themed widgets). Closes: https://gitlab.gnome.org/GNOME/gnome-shell/issues/1411 https://gitlab.gnome.org/GNOME/mutter/merge_requests/983
* clutter/stage-cogl: Avoid copying fb_clip_regionDaniel van Vugt2020-11-191-1/+1
| | | | | | | | | Because it gets destroyed (unreferenced) immediately after that. This avoids a deep copy of potentially kilobytes of data. Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/1572> (cherry picked from commit 32b68478ede34caee447c9803addedc12a4df6c7)
* region-utils: Always use FLT_EPSILON when comparing floating point valuesRobert Mader2020-11-191-6/+9
| | | | | | | | | | As you should always do. Using the `float` variant even if `scale` is a `double` as values passed in are potentially computed at `float` precission. Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/1565> (cherry picked from commit 09b1bbb1cf64ec5e90396d4cedd4bbd84df899a1)
* region-utils: Reduce temporary allocationsRobert Mader2020-11-191-16/+13
| | | | | | | | | This applies the optimizations from 0c55e87d8fb70848e to serveral similar places in region-utils. Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/1565> (cherry picked from commit 91c9416259f744a9f1ae123a1f319943705ff23d)
* wayland/compositor: Only emit frame callbacks for the primary stage viewRobert Mader2020-11-191-6/+5
| | | | | | | | | | | Since we schedule frames for each stage view seperately now, surfaces receive frame callbacks for each stage view they are visible on. Only emit frame callbacks for the primary stage view. Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/1468> (cherry picked from commit c78b03bd50783983e9d0e75882bc8565c42ed509)
* surface-actor-wayland: Add API to pick a primary stage viewRobert Mader2020-11-192-0/+51
| | | | | | | | | Add a simple heuristic how to choose the primary stage view to drive events like frame callbacks for a given surface actor. Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/1468> (cherry picked from commit ff94ed0ebff722d70204964af7a33513713ffd58)
* surface-actor: Add API to check obscuredness per stage viewRobert Mader2020-11-192-0/+71
| | | | | | | | | | | Our main use case of `is_obscured()` is frame callback emission. Since we now support stage views running at differt speeds, we need to know whether an actor is visible on a specific stage view in order to schedule frame callbacks accordingly. Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/1468> (cherry picked from commit 9db09e327c87275d86600b1d510ab5708027ca57)
* clutter/stage-view: Make get_refresh_rate() publicRobert Mader2020-11-192-3/+3
| | | | | | | | We'll need it in a follow-up commit Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/1468> (cherry picked from commit f7cef11515f863c51383e9c6a7a5a1440c95e0fe)
* window-props: Also check for actual values changeOlivier Fourdan2020-11-191-14/+84
| | | | | | | | | | | | | | | | | | | | | | Commit e28c1ab4 added a hints_have_changed() function to only recalculate windows features when the WM_NORMAL_HINTS change. That function hints_have_changed() however was merely checking whether the various XSizeHints flags where flipped, which is not sufficient because the hints may remain the same while the actual values are changed. Not checking for the actual value differences would prevent some windows from being able to switch fullscreen. Improve the helper function hints_have_changed() to check not only for flags being flipped, but also for the values being changed for each relevant XSizeHints flags being set currently. Closes: https://gitlab.gnome.org/GNOME/mutter/-/issues/1534 (cherry picked from commit 06e604cfefdd2eb68bc863cb5600d622a1662880) Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/1574>
* renderer/native: Add udev rule to select primary GPUJonas Ådahl2020-11-175-3/+49
| | | | | | | | | | | | | | | | | | | | | | | | Sometimes the automatically selected primary GPU isn't suitable with no way to make an well educated guess to do it better. To make it possible for the user to override the automatically calculated default, make it possible to override it using a udev rule. E.g. to select /dev/dri/card1 as the primary GPU, add a file e.g. /usr/lib/udev/rules.d/61-mutter-primary-gpu.rules (path my vary depending on distribution) containing the fellowing line: ENV{DEVNAME}=="/dev/dri/card1", TAG+="mutter-device-preferred-primary" Reboot or manual triggering of udev rules to make it take effect may be required. Related: https://gitlab.gnome.org/GNOME/mutter/merge_requests/1057 https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/1562 Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/1562> (cherry picked from commit d622960429b2a10bc19d43a8fb56a73f99ecef10)
* cursor-sprite/xcursor: Fall back to gray square if missing themeJonas Ådahl2020-11-161-5/+20
| | | | | | | | | | | | | | Instead of aborting with an error, display a half transparent gray square instead of cursors and log a warning in the journal, allowing the user to fix their system withotu having to rely on switching to a TTY. It will be immediately obvious the cursor is silly looking, which will be a better hint than just aborting. Closes: https://gitlab.gnome.org/GNOME/mutter/-/issues/1428 Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/1563> (cherry picked from commit 83360a4aede860d0e6ad5a29ab374fd4f26f3882)
* backend: Don't pull generated headers (indirectly)cherry-pick-e0944b60Carlos Garnacho2020-11-122-4/+4
| | | | | | | | | | | | | Use a typedef for MetaRemoteDesktop, so tests poking MetaBackend don't indirectly depend upon generated headers. This is arguably a code fix for a build system bug. https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/1470 Fixes: https://gitlab.gnome.org/GNOME/mutter/-/issues/1449 (or something...) (cherry picked from commit e0944b6097566dee3a09a919ba49a071e0137f26)
* wayland/xdg-shell: Imitate undefined behavior Qt relies uponJonas Ådahl2020-11-122-3/+19
| | | | | | | | | | | | Qt sets window geometry without in the same commit providing actual content matching it, and relies on the compositor being able to adapt without a new window geometry on a later commit. Other compositors do this, so do the same, even though it's not guaranteed according to spec. https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/1557 (cherry picked from commit f5b44be9f22efd59b34dd8c3a98328306f979eea) https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/1559
* window/wayland: Warn when attempted to resend uninitialized stateJonas Ådahl2020-11-121-0/+6
| | | | | | | This happens due to Qt doing wierd things, committing incomplete and incorrect state. https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/1559
* backends/x11: Emit CLUTTER_DEVICE_ADDED events for initial devicesCarlos Garnacho2020-11-073-0/+28
| | | | | | | | | | | This is similar to commit b9e5a2d6e23, but for the X11 backend. Fixes: https://gitlab.gnome.org/GNOME/mutter/-/issues/1466 Fixes: https://gitlab.gnome.org/GNOME/mutter/-/issues/1495 https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/1553 (cherry-picked from commit b6211bb6842fd7f88bc4f70f0d268614b85f4b3d)
* clutter/event: Do not filter out DEVICE_ADDED/REMOVED eventsCarlos Garnacho2020-11-071-1/+3
| | | | | | | | | | | | These devices in x11 are "disabled", that doesn't mean we should refrain from notifying about them. Fixes: https://gitlab.gnome.org/GNOME/mutter/-/issues/1476 Fixes: https://gitlab.gnome.org/GNOME/mutter/-/issues/1496 https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/1553 (cherry-picked from commit 34710eabc0dc2154d26296f3121728683af4afe6)
* wayland/subsurface: Check for circular relationshipsRobert Mader2020-11-051-0/+21
| | | | | | | | | If a subsurface is equal to or an ancestor of the parent surface we currently crash. Check for that case and terminate the client. Closes https://gitlab.gnome.org/GNOME/mutter/-/issues/1521 (cherry picked from commit 4e9a67acc6e09b012b6034b1928c2cc6ba0cb1bf)
* x11/output: Fix init tile info guardJonas Ådahl2020-11-051-1/+1
| | | | | | | | | | | Monitor tile info is possible to fetch when RANDR version 15 is exposed by the X11 server. We had inverted the check meaning that only if older versions were advertised would we attempt to init the tile information. Fix this guard, thus fix monitor tiling on X11. Closes: https://gitlab.gnome.org/GNOME/mutter/-/issues/1524 (cherry picked from commit 4ecc80fd8025842452262001fc4d6b7047696d4e)
* clutter/actor: Queue redraw on no-layout parents when unmappingJonas Dreßler2020-11-031-3/+7
| | | | | | | | | | | | | | | | | | | | | | | | | | As explained in https://gitlab.gnome.org/GNOME/mutter/-/issues/1494, with commit 29caa5bea576ed056aa6c82de192426abe6019ae we stopped queueing a relayout for the parent of the removed actor in clutter_actor_remove_child_internal(). This relayout was, as opposed to the relayout in clutter_actor_real_hide()/clutter_actor_real_unmap(), queued unconditionally without looking at the parents NO_LAYOUT flag. Now while that relayout in clutter_actor_remove_child_internal() would do unnecessary work if the parent had the NO_LAYOUT flag set, it did also queue a redraw of the parent, which is necessary in any case. So by removing that relayout in clutter_actor_remove_child_internal(), we stopped queueing redraws for NO_LAYOUT parents when a child gets removed from the scenegraph. This caused bugs where the texture of the child would be left visible on the screen even though the child got destroyed. To fix this, make sure again that we always queue a redraw on the parent when unmapping a child. Fixes https://gitlab.gnome.org/GNOME/mutter/-/issues/1494 (cherry picked from commit c88615aac869bf94a0e9ebc372396eabc640c0a3)
* backend: Update cursor visibility on device addedOlivier Fourdan2020-11-021-33/+14
| | | | | | | | | | | | | | | | | Not calling libinput dispatch in the backend constructor defeats the logic in post init as the device added events have not been processed yet. So instead of trying to guess the cursor initial visibility, simply update it along when devices get added. Additional benefit, we do not need to walk the all device list looking for touchscreens anymore, we just need to check the device being added since the current logic is to hide the cursor as soon as a touchscreen is found. https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/1534 (cherry picked from commit 9b881729821b360cc6e6f06f37fee0fe9b417a27)
* clutter/backend: Don't dispatch libinput events too earlyOlivier Fourdan2020-11-021-2/+0
| | | | | | | | | | | | | | | | | | | | | | | | At startup, libinput dispatch is called from the MetaSeatNative constructed callback. That means that we may get libinput events even before the default seat is set. In turn, processing those events may trigger the use the default seat while it's still not set yet, and cause a crash of gnome-shell/mutter at startup. A simple reproducer for this is to start gnome-shell/mutter with a tablet connected and the stylus in proximity, the proximity event will cause gnome-shell/mutter to crash at startup. To avoid that issue, avoid dispatching libinput events early from the MetaSeatNative constructed callback, those events will eventually get processed when the seat and the backend are all setup. https://gitlab.gnome.org/GNOME/mutter/-/issues/1501 https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/1534 (cherry picked from commit c618b8a0eb1919219da29934945b303fd0a311ed)
* wayland/window: Don't lose precision in MetaWaylandWindowConfigurationJonas Ådahl2020-10-306-14/+33
| | | | | | | | | | | | | | | | | | | Commit 8bdd2aa7 would offset the window position by the difference between the configured window size and the committed size from the client to prevent the window from drifting while resizing. This, however, did not take into account the actual geometry scale, so when using any scale greater than 1, the window would rapidly drift away due to that offset. In order to solve this, we need to make sure we store away the pending window configuration in the stage coordinate space, in order to not loose precision. When we then calculate the offset given the result from the client, it'll use the right scalars, while before, one scalar was in surface coordinates, while the other in stage coordinates. https://gitlab.gnome.org/GNOME/mutter/-/issues/1490 (cherry picked from commit eaa6efef56d3a251e864c7064d7c6ad5d1329c78)
* backend: Keep a refcount on backend's current_deviceOlivier Fourdan2020-10-281-2/+3
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Otherwise we might run into a use-after-free and crash on (virtual) device removal: Invalid read of size 8 at clutter_input_device_get_device_type (clutter-input-device.c:811) by update_last_device (meta-backend.c:1282) by g_main_dispatch (gmain.c:3325) by g_main_context_dispatch (gmain.c:4016) by g_main_context_iterate.constprop.0 (gmain.c:4092) by g_main_loop_run (gmain.c:4290) by meta_run_main_loop (main.c:708) by meta_run (main.c:723) by main (main.c:550) Address is 32 bytes inside a block of size 504 free'd at free (vg_replace_malloc.c:538) by g_type_free_instance (gtype.c:1939) by clutter_event_free (clutter-event.c:1420) by _clutter_stage_process_queued_events (clutter-stage.c:830) by handle_frame_clock_before_frame (clutter-stage-view.c:1064) by clutter_frame_clock_dispatch (clutter-frame-clock.c:405) by frame_clock_source_dispatch (clutter-frame-clock.c:456) by g_main_dispatch (gmain.c:3325) by g_main_context_dispatch (gmain.c:4016) by g_main_context_iterate.constprop.0 (gmain.c:4092) by g_main_loop_run (gmain.c:4290) by meta_run_main_loop (main.c:708) by meta_run (main.c:723) Block was alloc'd at at malloc (vg_replace_malloc.c:307) by g_malloc (gmem.c:106) by g_slice_alloc (gslice.c:1025) by g_slice_alloc0 (gslice.c:1051) by g_type_create_instance (gtype.c:1839) by g_object_new_internal (gobject.c:1939) by g_object_new_valist (gobject.c:2264) by g_object_new (gobject.c:1782) by meta_input_device_native_new_virtual (meta-input-device-native.c:1365) by meta_virtual_input_device_native_constructed (meta-virtual-input-device-native.c:705) by g_object_new_internal (gobject.c:1979) by g_object_new_valist (gobject.c:2264) Suggested-by: Carlos Garnacho <carlosg@gnome.org> https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/1529 (cherry picked from commit 8711d8d5914df8e19a907105d9fa7139221f21b4)
* Update Portuguese translationJuliano de Souza Camargo2020-10-241-10/+10
|
* background-content: Assume background clones are always transformedDaniel van Vugt2020-10-231-17/+24
| | | | | | | | | | Because clones may not have identical geometry to their source actors. So we can't use the geometry of the source actor to decide to take the more optimized (more clipped) path. Fixes: https://gitlab.gnome.org/GNOME/mutter/-/issues/1480 (cherry picked from commit a24b2f4b0fc72ebe262988a14a6fcd58d531e2bb)