summaryrefslogtreecommitdiff
Commit message (Collapse)AuthorAgeFilesLines
...
* tests: Explicitly set a background color for offscreen actor testsCarlos Garnacho2019-11-011-0/+3
| | | | | | | Those change opacity and read pixels, relying on an implicit stage color. We won't do that anymore. https://gitlab.gnome.org/GNOME/mutter/merge_requests/911
* window-xwayland: Add Xwayland fullscreen games workaroundHans de Goede2019-11-012-0/+90
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | This is a workaround for X11 games which use randr to change the resolution in combination with NET_WM_STATE_FULLSCREEN when going fullscreen. Newer versions of Xwayland support the randr part of this by supporting randr resolution change emulation in combination with using WPviewport to scale the app's window (at the emulated resolution) to fill the entire monitor. Apps using randr in combination with NET_WM_STATE_FULLSCREEN expect the fullscreen window to have the size of the emulated randr resolution since when running on regular Xorg the resolution will actually be changed and after that going fullscreen through NET_WM_STATE_FULLSCREEN will size the window to be equal to the new resolution. We need to emulate this behavior for these games to work correctly. Xwayland's emulated resolution is a per X11 client setting and Xwayland will set a special _XWAYLAND_RANDR_EMU_MONITOR_RECTS property on the toplevel windows of a client (and only those of that client), which has changed the (emulated) resolution through a randr call. This commit checks for that property and if it is set adjusts the fullscreen monitor rect for this window to match the emulated resolution. Here is a step-by-step of such an app going fullscreen: 1. App changes monitor resolution with randr. 2. Xwayland sets the _XWAYLAND_RANDR_EMU_MONITOR_RECTS property on all the apps current and future windows. This property contains the origin of the monitor for which the emulated resolution is set and the emulated resolution. 3. App sets _NET_WM_FULLSCREEN. 4. We check the property and adjust the app's fullscreen size to match the emulated resolution. 5. Xwayland sees a Window at monitor origin fully covering the emulated monitor resolution. Xwayland sets a viewport making the emulated resolution sized window cover the full actual monitor resolution. https://gitlab.gnome.org/GNOME/mutter/merge_requests/739
* window: Add adjust_fullscreen_monitor_rect virtual methodHans de Goede2019-11-013-5/+22
| | | | | | | | | | | Add an adjust_fullscreen_monitor_rect virtual method to MetaWindowClass and call this from setup_constraint_info() if the window is fullscreen. This allows MetaWindowClass to adjust the monitor-rectangle used to size the window when going fullscreen, which will be used in further commits for a workaround related to fullscreen games under Xwayland. https://gitlab.gnome.org/GNOME/mutter/merge_requests/739
* profiler: track changes in GLib and SysprofChristian Hergert2019-10-301-5/+2
| | | | | | | This tracks the changes to gdbus-codegen in terms of how GUnixFDList is done to use the UnixFD annotation. https://gitlab.gnome.org/GNOME/mutter/merge_requests/908
* Revert "clutter/cogl: Store empty clip regions for buffer age"Carlos Garnacho2019-10-301-1/+1
| | | | | | | | | | | | | This reverts commit 4918893326fe39dba14575a37359b040d074a5a0. This commit prevented cogl_stage_cogl_redraw_view() from skipping swap buffers entirely if the invalidation region ended up empty. This meant we were actually swapping buffers when we didn't need to. The source of the glitches was fixed more properly, so this just adds extra work. https://gitlab.gnome.org/GNOME/mutter/merge_requests/898
* clutter/cogl: Fix invalidation on non-primary monitors with no buffer ageCarlos Garnacho2019-10-301-1/+8
| | | | | | | | We passed the view rectangle, we however want a fb-scaled rectangle starting at 0,0. Fixes invalidation on other than the primary monitor when those paths are hit. https://gitlab.gnome.org/GNOME/mutter/merge_requests/898
* cogl/egl: Explicitly initialize age variableCarlos Garnacho2019-10-301-1/+1
| | | | | | | In case of error, it's untouched by EGL, which probably means an invalid read. https://gitlab.gnome.org/GNOME/mutter/merge_requests/906
* cogl/egl: Make surface current before querying buffer ageCarlos Garnacho2019-10-301-0/+6
| | | | | | | | | | | | | | | | | | | | | | | | | | | Unknown since when, we started deferring the eglMakeCurrent for the current framebuffer till we started painting on it, which means we are preparing for rendering a view without guarantees that the framebuffer we will paint to is the current drawing surface for the EGL context. A fairly common case where that assumption will break is multimonitor set ups, in this case we will be preparing to paint to a view while the current draw surface is that of the previously rendered view's. Mesa will in this case return EGL_BAD_SURFACE when querying the buffer age, since the surface is not yet the current draw surface. This makes us give up on buffer age checks, and paint the whole view. Since the problem repeats when painting the next view, we are effectively doing full-screen redraws on all monitors. Since cogl usually works implicitly, and querying the buffer age is meaningless if you're not meant to paint on a surface, make the surface the current draw surface implicitly before querying the buffer age. This brings us glorious partial invalidations back when several views had to be repainted. https://gitlab.gnome.org/GNOME/mutter/merge_requests/906
* cogl/egl: Warn when we fail to query a buffer age.Carlos Garnacho2019-10-301-1/+11
| | | | | | | | In order to avoid log spamming, just warn once it starts to happen, not on every frame for every onscreen. Just knowing that this is happening is a hint that something's going wrong. https://gitlab.gnome.org/GNOME/mutter/merge_requests/906
* cogl: Fix GLES2 fallbackAdam Jackson2019-10-301-0/+2
| | | | | | | | | | | | | Say you're using intel gen3, you poor soul. Your big-GL maxes out at 1.5 unless you use dirty tricks, but you do have GLES2. We try to fall back to GLES in this case, but we only ever say eglBindAPI(EGL_OPENGL_API). So when we go to do CreateContext, even though we think we've requested GLES 2.0, the driver will compare that "2.0" against the maximum big-GL version, and things will fail. Fix this by binding EGL_OPENGL_ES_API before trying a GLES context. https://gitlab.gnome.org/GNOME/mutter/issues/635
* cogl: fix a compile warningThomas Hindoe Paaboel Andersen2019-10-301-1/+1
| | | | | | | | | | | | | | | | | | | | | | In find_onscreen_for_xid() we want to loop over the framebuffers and skip any that is not onscreen. The code today does this by negating the framebuffer type variable and skipping if that equals COGL_FRAMEBUFFER_TYPE_ONSCREEN. This actually works as the enum used will function as a boolean: typedef enum _CoglFramebufferType { COGL_FRAMEBUFFER_TYPE_ONSCREEN, COGL_FRAMEBUFFER_TYPE_OFFSCREEN } CoglFramebufferType; But it is a bit weird logic and fragile if more types are added. (not that I can think of any different type...) To simplify this, and to silence a warning in clang this patch just changes it to a != test. https://gitlab.gnome.org/GNOME/mutter/merge_requests/905
* cogl: Remove unused cogl-deprecated.hAdam Jackson2019-10-303-50/+0
| | | | https://gitlab.gnome.org/GNOME/mutter/merge_requests/896
* cogl: Remove unused cogl/cogl-pango.hAdam Jackson2019-10-301-36/+0
| | | | https://gitlab.gnome.org/GNOME/mutter/merge_requests/896
* cogl: Remove unused CoglPipelineLightingStateAdam Jackson2019-10-292-44/+0
| | | | https://gitlab.gnome.org/GNOME/mutter/merge_requests/904
* cogl: Remove unused COGL_PIPELINE_STATE_LIGHTINGAdam Jackson2019-10-295-117/+2
| | | | https://gitlab.gnome.org/GNOME/mutter/merge_requests/904
* cogl: Remove unused pipeline lighting APIAdam Jackson2019-10-293-452/+0
| | | | https://gitlab.gnome.org/GNOME/mutter/merge_requests/904
* cogl: Remove unused deprecated material lighting APIAdam Jackson2019-10-293-284/+0
| | | | https://gitlab.gnome.org/GNOME/mutter/merge_requests/904
* cogl: Remove support for cogl.confAdam Jackson2019-10-296-208/+1
| | | | | | | | | There are still environment variables for these controls, but having them in a config file doesn't really make sense for mutter. Even if it did we probably don't want to be parsing the same file as some standalone version of cogl. https://gitlab.gnome.org/GNOME/mutter/merge_requests/902
* ci: Add gnome-control-centerFlorian Müllner2019-10-291-1/+1
| | | | | | | | | | | Since 3.34, the gnome-shell package was cleaned up to only depend on gnome-control-center-filesystem at build-time. However one of the gnome-shell tests needs the gettext ITS file for keybindings provided by the main gnome-control-center package (in fact, the COPR package is stripped down to just that file), so install that explicitly. https://gitlab.gnome.org/GNOME/mutter/merge_requests/901
* cogl: Remove old workaround for software MesaAdam Jackson2019-10-291-27/+1
| | | | | | | The comment says this was fixed in 10.1, which is over five years old now. Please use a newer Mesa already. https://gitlab.gnome.org/GNOME/mutter/merge_requests/900
* ci: Update docker image to v3Florian Müllner2019-10-292-17/+6
| | | | | | | | It's this time of the cycle again: Rebase the docker image to the upcoming Fedora release, so we can drop a fair bit of the custom dependencies that have piled up. https://gitlab.gnome.org/GNOME/mutter/merge_requests/894
* wayland: Check stylus serials on meta_wayland_seat_can_popup()Carlos Garnacho2019-10-285-1/+37
| | | | | | | | This allows xdg_popup.grab() to work with styli. Without this check we would bail out and emit xdg_popup.popup_done, leaving stylus users unable to interact with popup menus, comboboxes, etc... Closes: https://gitlab.gnome.org/GNOME/mutter/issues/886
* x11: Limit touch replay pointer events to when replayingJonas Ådahl2019-10-281-13/+58
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | When a touch sequence was rejected, the emulated pointer events would be replayed with old timestamps. This caused issues with grabs as they would be ignored due to being too old. This was mitigated by making sure device event timestamps never travelled back in time by tampering with any event that had a timestamp seemingly in the past. This failed when the most recent timestamp that had been received were much older than the timestamp of the new event. This could for example happen when a session was left not interacted with for 40+ days or so; when interacted with again, as any new timestamp would according to XSERVER_TIME_IS_BEFORE() still be in the past compared to the "most recent" one. The effect is that we'd always use the `latest_evtime` for all new device events without ever updating it. The end result of this was that passive grabs would become active when interacted with, but would then newer be released, as the timestamps to XIAllowEvents() would out of date, resulting in the desktop effectively freezing, as the Shell would have an active pointer grab. To avoid the situation where we get stuck with an old `latest_evtime` timestamp, limit the tampering with device event timestamp to 1) only pointer events, and 2) only during the replay sequence. The second part is implemented by sending an asynchronous message via the X server after rejecting a touch sequence, only potentially tampering with the device event timestamps until the reply. This should avoid the stuck timestamp as in those situations, we'll always have a relatively up to date `latest_evtime` meaning XSERVER_TIME_IS_BEFORE() will not get confused. https://gitlab.gnome.org/GNOME/mutter/merge_requests/886
* display: Move finishing of touch sequence to the backendJonas Ådahl2019-10-285-26/+69
| | | | | | | We need to manipulate an X11 grab when a touch sequence ends; move that logic to where it belongs - in the X11 backend. https://gitlab.gnome.org/GNOME/mutter/merge_requests/886
* clutter/cogl: Scale clip region in paint_stage()Robert Mader2019-10-281-29/+35
| | | | | | | | | To simplify the code and because it was forgotten once in a7f4f5b291146, breaking clipped redraws of clipped views. Also sneak in a very small cleanup. https://gitlab.gnome.org/GNOME/mutter/merge_requests/889
* Allow changing Clutter debug flags at runtimeGeorges Basile Stavracas Neto2019-10-255-39/+105
| | | | | | | | | | This way, we can simply pop up the Looking Glass and run: >>> Meta.add_clutter_debug_flags(Clutter.DebugFlag.PICK, 0, 0) And measure specific actions or events on GNOME Shell. https://gitlab.gnome.org/GNOME/mutter/merge_requests/862
* clutter/cogl: Ensure to paint full view if there's no buffer age supportCarlos Garnacho2019-10-251-2/+3
| | | | | | This was falling back to painting an empty area, which is not what we want. https://gitlab.gnome.org/GNOME/mutter/merge_requests/888
* clutter/cogl: Store empty clip regions for buffer ageCarlos Garnacho2019-10-251-1/+1
| | | | | | | | As we do not prevent the SwapBuffers call from happening, those also do count. Results in clip area calculations to be right for monitors that previously did not get invalidated. https://gitlab.gnome.org/GNOME/mutter/merge_requests/888
* cogl: Remove unused cogl_egl_context_get_egl_contextAdam Jackson2019-10-242-28/+0
| | | | https://gitlab.gnome.org/GNOME/mutter/merge_requests/885
* cogl: Remove unused cogl_glx_context_get_glx_contextAdam Jackson2019-10-242-28/+0
| | | | https://gitlab.gnome.org/GNOME/mutter/merge_requests/885
* cogl: Remove unused cogl_texture_pixmap_x11_set_damage_objectAdam Jackson2019-10-242-42/+0
| | | | https://gitlab.gnome.org/GNOME/mutter/merge_requests/885
* cogl: Remove unused cogl_xlib_renderer_get_visual_infoAdam Jackson2019-10-242-18/+0
| | | | https://gitlab.gnome.org/GNOME/mutter/merge_requests/885
* cogl: Remove unused cogl_x11_onscreen_set_foreign_window_xidAdam Jackson2019-10-245-199/+24
| | | | https://gitlab.gnome.org/GNOME/mutter/merge_requests/885
* cogl: Remove unused cogl_x11_onscreen_get_visual_xidAdam Jackson2019-10-242-21/+0
| | | | https://gitlab.gnome.org/GNOME/mutter/merge_requests/885
* cogl: Inline cogl_xlib_renderer_set_event_retrieval_enabled into its one callerAdam Jackson2019-10-242-35/+2
| | | | https://gitlab.gnome.org/GNOME/mutter/merge_requests/885
* cogl: Remove unused _cogl_xlib_renderer_get_dispatch_timeoutAdam Jackson2019-10-243-20/+0
| | | | https://gitlab.gnome.org/GNOME/mutter/merge_requests/885
* cogl: Remove unused cogl_check_extension and cogl_clutter_check_extensionAdam Jackson2019-10-244-58/+0
| | | | https://gitlab.gnome.org/GNOME/mutter/merge_requests/885
* cogl: Remove the stub winsysAdam Jackson2019-10-248-274/+0
| | | | | | | It's not useful and supporting it leaks into the API in other weird ways. https://gitlab.gnome.org/GNOME/mutter/merge_requests/885
* cogl: Remove unused cogl_xlib_renderer_get_visual_infoAdam Jackson2019-10-244-72/+0
| | | | https://gitlab.gnome.org/GNOME/mutter/merge_requests/885
* cogl: Move _cogl_xlib_get_damage_base near its only consumerAdam Jackson2019-10-244-67/+13
| | | | https://gitlab.gnome.org/GNOME/mutter/merge_requests/885
* cogl: Remove unused API from cogl-xlibAdam Jackson2019-10-244-107/+0
| | | | https://gitlab.gnome.org/GNOME/mutter/merge_requests/885
* ci: Print all the commits that need bug referencesBastien Nocera2019-10-231-1/+4
| | | | | | | | Rather than just the latest one, otherwise it might leave the patch submitter to iterate over every commit, if they didn't know every patch needed a reference. Closes: #1809
* ci: Phrase error in a way that gives a hint on how to fix problemBastien Nocera2019-10-231-1/+1
| | | | | | | | The passive phrasing makes it sound like there's something inherently broken with the commit, rather than simply being missing an annotation that the author can add. Closes: #1809
* cogl: Remove unused _cogl_matrix_entry_flush_to_gl_builtinsAdam Jackson2019-10-222-128/+0
| | | | https://gitlab.gnome.org/GNOME/mutter/merge_requests/880
* clutter: Remove behavioursAdam Jackson2019-10-2212-1006/+10
| | | | https://gitlab.gnome.org/GNOME/mutter/merge_requests/879
* clutter: Remove deprecated/clutter-behaviour-scale.cAdam Jackson2019-10-228-725/+0
| | | | https://gitlab.gnome.org/GNOME/mutter/merge_requests/879
* clutter: Remove unused deprecated/clutter-behaviour-depth.cAdam Jackson2019-10-224-407/+0
| | | | https://gitlab.gnome.org/GNOME/mutter/merge_requests/879
* clutter: Remove tests/interactive/test-texture-quality.cAdam Jackson2019-10-222-120/+0
| | | | | | | This is the last consumer of clutter_behaviour_depth_*, and is testing clutter_texture_set_filter_quality which is also deprecated. https://gitlab.gnome.org/GNOME/mutter/merge_requests/879
* clutter: Remove unused deprecated/clutter-behaviour-opacity.cAdam Jackson2019-10-229-576/+0
| | | | https://gitlab.gnome.org/GNOME/mutter/merge_requests/879
* clutter: Remove stray references to ClutterBehaviour{Path,Rotate}Adam Jackson2019-10-221-17/+0
| | | | | | These were removed back in cc077023 and df3d2389. https://gitlab.gnome.org/GNOME/mutter/merge_requests/879