Hello community, here is the log from the commit of package mutter for openSUSE:Factory checked in at 2018-05-22 16:59:37 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/mutter (Old) and /work/SRC/openSUSE:Factory/.mutter.new (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "mutter" Tue May 22 16:59:37 2018 rev:127 rq:606938 version:3.28.2+20180507.41303bc01 Changes: -------- --- /work/SRC/openSUSE:Factory/mutter/mutter.changes 2018-04-22 14:37:15.366142759 +0200 +++ /work/SRC/openSUSE:Factory/.mutter.new/mutter.changes 2018-05-22 16:59:39.217265670 +0200 @@ -1,0 +2,32 @@ +Wed May 09 16:00:40 UTC 2018 - opensuse-packag...@opensuse.org + +- Update to version 3.28.2+20180507.41303bc01: + + Bump version to 3.28.2 + + build: Adjust to filename changes + + build: Introspect some more types + + window-group: Remove undefined function declaration + + clutter: Don't reference invalid pc in gir + + screen-cast: Handle PipeWire errors more gracefully + + wayland/xdg-foreign: Fix child surface validation check + + wayland/xdg-foreign: Send immediate destroy event to correct + resource + + build: Don't fail immediately when logind is missing + + wayland: Check if state and size changed before calling + move_resize() + + wayland: Add function to query if window needs move or resize + + window: Let implementations finish state changes + + wayland: avoid a crash in is_effectively_synchronized() + + native: Restore previous EGL state after blitting onto + secondary GPU + + cogl: Do not unref a NULL object + + monitor-manager: Find active monitor when deriving global scale + + wayland: Let IM events go through + + backend: Don't center the pointers on monitor changes + + backends: Don't center the pointer on initialization + + xwayland: Don't abort if Xwayland crashes + + xwayland: use g_autoptr for GError in xserver_died + + theme, frames: Use surface device scale instead of cairo_scale + + wayland: Do not reset frame list when merging pending state + + clutter: Set slave=master in IM forwarded key events + +------------------------------------------------------------------- Old: ---- mutter-3.28.1+20180416.d3d5eb8e1.tar.xz New: ---- mutter-3.28.2+20180507.41303bc01.tar.xz ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ mutter.spec ++++++ --- /var/tmp/diff_new_pack.u4woPj/_old 2018-05-22 16:59:39.889241219 +0200 +++ /var/tmp/diff_new_pack.u4woPj/_new 2018-05-22 16:59:39.889241219 +0200 @@ -19,7 +19,7 @@ %define mutter_major 2 %define mutter_minor 0 Name: mutter -Version: 3.28.1+20180416.d3d5eb8e1 +Version: 3.28.2+20180507.41303bc01 Release: 0 Summary: Window and compositing manager based on Clutter License: GPL-2.0-or-later ++++++ _service ++++++ --- /var/tmp/diff_new_pack.u4woPj/_old 2018-05-22 16:59:39.921240055 +0200 +++ /var/tmp/diff_new_pack.u4woPj/_new 2018-05-22 16:59:39.921240055 +0200 @@ -3,7 +3,7 @@ <param name="url">https://gitlab.gnome.org/GNOME/mutter.git</param> <param name="scm">git</param> <param name="revision">gnome-3-28</param> - <param name="versionformat">3.28.1+%cd.%h</param> + <param name="versionformat">3.28.2+%cd.%h</param> <param name="changesgenerate">enable</param> </service> <service mode="disabled" name="recompress"> ++++++ _servicedata ++++++ --- /var/tmp/diff_new_pack.u4woPj/_old 2018-05-22 16:59:39.941239327 +0200 +++ /var/tmp/diff_new_pack.u4woPj/_new 2018-05-22 16:59:39.941239327 +0200 @@ -1,4 +1,4 @@ <servicedata> <service name="tar_scm"> <param name="url">https://gitlab.gnome.org/GNOME/mutter.git</param> - <param name="changesrevision">d3d5eb8e1b3b07a38860a9dbe58c601392e0ad75</param></service></servicedata> \ No newline at end of file + <param name="changesrevision">41303bc01be873e684f11a3407aa556af2922426</param></service></servicedata> \ No newline at end of file ++++++ mutter-3.28.1+20180416.d3d5eb8e1.tar.xz -> mutter-3.28.2+20180507.41303bc01.tar.xz ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mutter-3.28.1+20180416.d3d5eb8e1/NEWS new/mutter-3.28.2+20180507.41303bc01/NEWS --- old/mutter-3.28.1+20180416.d3d5eb8e1/NEWS 2018-04-16 16:03:56.000000000 +0200 +++ new/mutter-3.28.2+20180507.41303bc01/NEWS 2018-05-07 22:29:42.000000000 +0200 @@ -1,3 +1,15 @@ +3.28.2 +====== +* Take inhibitors into account for monitoring idle [Bastien; #705942] +* Fix window animations on wayland [Georges; #780292] +* Misc. bug fixes [Mario, Jonas, Olivier, Florian; gnome-shell#157, #130, + #21, #124, !96, #138, !102, #781471] + +Contributors: + Jonas Ådahl, Olivier Fourdan, Carlos Garnacho, Florian Müllner, + Georges Basile Stavracas Neto, Bastien Nocera, Mario Sanchez Prada, + Ray Strode, Marco Trevisan (Treviño) + 3.28.1 ====== * Fix various input-method regressions [Carlos; #65, #74, #66] diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mutter-3.28.1+20180416.d3d5eb8e1/clutter/clutter/Makefile.am new/mutter-3.28.2+20180507.41303bc01/clutter/clutter/Makefile.am --- old/mutter-3.28.1+20180416.d3d5eb8e1/clutter/clutter/Makefile.am 2018-04-16 16:03:56.000000000 +0200 +++ new/mutter-3.28.2+20180507.41303bc01/clutter/clutter/Makefile.am 2018-05-07 22:29:42.000000000 +0200 @@ -692,7 +692,7 @@ Cally_@LIBMUTTER_API_VERSION@_gir_SCANNERFLAGS = \ --warn-all \ --c-include='cally/cally.h' \ - --pkg-export=mutter-cally-@LIBMUTTER_API_VERSION@ \ + --pkg-export=mutter-clutter-@LIBMUTTER_API_VERSION@ \ --include-uninstalled=$(top_builddir)/clutter/Clutter-@LIBMUTTER_API_VERSION@.gir INTROSPECTION_GIRS += Cally-@LIBMUTTER_API_VERSION@.gir diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mutter-3.28.1+20180416.d3d5eb8e1/clutter/clutter/clutter-input-method.c new/mutter-3.28.2+20180507.41303bc01/clutter/clutter/clutter-input-method.c --- old/mutter-3.28.1+20180416.d3d5eb8e1/clutter/clutter/clutter-input-method.c 2018-04-16 16:03:56.000000000 +0200 +++ new/mutter-3.28.2+20180507.41303bc01/clutter/clutter/clutter-input-method.c 2018-05-07 22:29:42.000000000 +0200 @@ -353,6 +353,7 @@ copy = clutter_event_copy (event); clutter_event_set_flags (copy, clutter_event_get_flags (event) | CLUTTER_EVENT_FLAG_INPUT_METHOD); + clutter_event_set_source_device (copy, clutter_event_get_device (copy)); clutter_event_put (copy); clutter_event_free (copy); } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mutter-3.28.1+20180416.d3d5eb8e1/cogl/cogl/Makefile.am new/mutter-3.28.2+20180507.41303bc01/cogl/cogl/Makefile.am --- old/mutter-3.28.1+20180416.d3d5eb8e1/cogl/cogl/Makefile.am 2018-04-16 16:03:56.000000000 +0200 +++ new/mutter-3.28.2+20180507.41303bc01/cogl/cogl/Makefile.am 2018-05-07 22:29:42.000000000 +0200 @@ -452,7 +452,7 @@ -avoid-version \ -export-dynamic \ -rpath $(mutterlibdir) \ - -export-symbols-regex "^(cogl|_cogl_debug_flags|_cogl_atlas_new|_cogl_atlas_add_reorganize_callback|_cogl_atlas_reserve_space|_cogl_callback|_cogl_util_get_eye_planes_for_screen_poly|_cogl_atlas_texture_remove_reorganize_callback|_cogl_atlas_texture_add_reorganize_callback|_cogl_texture_get_format|_cogl_texture_foreach_sub_texture_in_region|_cogl_texture_set_region|_cogl_profile_trace_message|_cogl_context_get_default|_cogl_framebuffer_get_stencil_bits|_cogl_clip_stack_push_rectangle|_cogl_framebuffer_get_modelview_stack|_cogl_object_default_unref|_cogl_pipeline_foreach_layer_internal|_cogl_clip_stack_push_primitive|_cogl_buffer_unmap_for_fill_or_fallback|_cogl_framebuffer_draw_primitive|_cogl_debug_instances|_cogl_framebuffer_get_projection_stack|_cogl_pipeline_layer_get_texture|_cogl_buffer_map_for_fill_or_fallback|_cogl_texture_can_hardware_repeat|_cogl_pipeline_prune_to_n_layers|_cogl_primitive_draw|test_|unit_test_|_cogl_winsys_glx_get_vtable|_cogl_winsys_egl_xlib_get_vtable|_cogl_winsys_egl_get_vtable|_cogl_closure_disconnect|_cogl_onscreen_notify_complete|_cogl_onscreen_notify_frame_sync|_cogl_winsys_egl_renderer_connect_common|_cogl_winsys_error_quark|_cogl_set_error|_cogl_poll_renderer_add_fd|_cogl_poll_renderer_add_idle|_cogl_framebuffer_winsys_update_size|_cogl_winsys_egl_make_current|_cogl_pixel_format_get_bytes_per_pixel).*" + -export-symbols-regex "^(cogl|_cogl_debug_flags|_cogl_atlas_new|_cogl_atlas_add_reorganize_callback|_cogl_atlas_reserve_space|_cogl_callback|_cogl_util_get_eye_planes_for_screen_poly|_cogl_atlas_texture_remove_reorganize_callback|_cogl_atlas_texture_add_reorganize_callback|_cogl_texture_get_format|_cogl_texture_foreach_sub_texture_in_region|_cogl_texture_set_region|_cogl_profile_trace_message|_cogl_context_get_default|_cogl_framebuffer_get_stencil_bits|_cogl_clip_stack_push_rectangle|_cogl_framebuffer_get_modelview_stack|_cogl_object_default_unref|_cogl_pipeline_foreach_layer_internal|_cogl_clip_stack_push_primitive|_cogl_buffer_unmap_for_fill_or_fallback|_cogl_framebuffer_draw_primitive|_cogl_debug_instances|_cogl_framebuffer_get_projection_stack|_cogl_pipeline_layer_get_texture|_cogl_buffer_map_for_fill_or_fallback|_cogl_texture_can_hardware_repeat|_cogl_pipeline_prune_to_n_layers|_cogl_primitive_draw|test_|unit_test_|_cogl_winsys_glx_get_vtable|_cogl_winsys_egl_xlib_get_vtable|_cogl_winsys_egl_get_vtable|_cogl_closure_disconnect|_cogl_onscreen_notify_complete|_cogl_onscreen_notify_frame_sync|_cogl_winsys_egl_renderer_connect_common|_cogl_winsys_error_quark|_cogl_set_error|_cogl_poll_renderer_add_fd|_cogl_poll_renderer_add_idle|_cogl_framebuffer_winsys_update_size|_cogl_winsys_egl_make_current|_cogl_winsys_egl_ensure_current|_cogl_pixel_format_get_bytes_per_pixel).*" libmutter_cogl_@LIBMUTTER_API_VERSION@_la_SOURCES = $(cogl_sources_c) nodist_libmutter_cogl_@LIBMUTTER_API_VERSION@_la_SOURCES = $(BUILT_SOURCES) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mutter-3.28.1+20180416.d3d5eb8e1/cogl/cogl/cogl-object.c new/mutter-3.28.2+20180507.41303bc01/cogl/cogl/cogl-object.c --- old/mutter-3.28.1+20180416.d3d5eb8e1/cogl/cogl/cogl-object.c 2018-04-16 16:03:56.000000000 +0200 +++ new/mutter-3.28.2+20180507.41303bc01/cogl/cogl/cogl-object.c 2018-05-07 22:29:42.000000000 +0200 @@ -109,7 +109,11 @@ void cogl_object_unref (void *obj) { - void (* unref_func) (void *) = ((CoglObject *) obj)->klass->virt_unref; + void (* unref_func) (void *); + + _COGL_RETURN_IF_FAIL (obj != NULL); + + unref_func = ((CoglObject *) obj)->klass->virt_unref; unref_func (obj); } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mutter-3.28.1+20180416.d3d5eb8e1/cogl/cogl/winsys/cogl-winsys-egl-private.h new/mutter-3.28.2+20180507.41303bc01/cogl/cogl/winsys/cogl-winsys-egl-private.h --- old/mutter-3.28.1+20180416.d3d5eb8e1/cogl/cogl/winsys/cogl-winsys-egl-private.h 2018-04-16 16:03:56.000000000 +0200 +++ new/mutter-3.28.2+20180507.41303bc01/cogl/cogl/winsys/cogl-winsys-egl-private.h 2018-05-07 22:29:42.000000000 +0200 @@ -181,6 +181,9 @@ EGLSurface read, EGLContext context); +EGLBoolean +_cogl_winsys_egl_ensure_current (CoglDisplay *display); + #ifdef EGL_KHR_image_base EGLImageKHR _cogl_egl_create_image (CoglContext *ctx, diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mutter-3.28.1+20180416.d3d5eb8e1/cogl/cogl/winsys/cogl-winsys-egl.c new/mutter-3.28.2+20180507.41303bc01/cogl/cogl/winsys/cogl-winsys-egl.c --- old/mutter-3.28.1+20180416.d3d5eb8e1/cogl/cogl/winsys/cogl-winsys-egl.c 2018-04-16 16:03:56.000000000 +0200 +++ new/mutter-3.28.2+20180507.41303bc01/cogl/cogl/winsys/cogl-winsys-egl.c 2018-05-07 22:29:42.000000000 +0200 @@ -309,6 +309,18 @@ return ret; } +EGLBoolean +_cogl_winsys_egl_ensure_current (CoglDisplay *display) +{ + CoglDisplayEGL *egl_display = display->winsys; + CoglRendererEGL *egl_renderer = display->renderer->winsys; + + return eglMakeCurrent (egl_renderer->edpy, + egl_display->current_draw_surface, + egl_display->current_read_surface, + egl_display->current_context); +} + static void cleanup_context (CoglDisplay *display) { diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mutter-3.28.1+20180416.d3d5eb8e1/configure.ac new/mutter-3.28.2+20180507.41303bc01/configure.ac --- old/mutter-3.28.1+20180416.d3d5eb8e1/configure.ac 2018-04-16 16:03:56.000000000 +0200 +++ new/mutter-3.28.2+20180507.41303bc01/configure.ac 2018-05-07 22:29:42.000000000 +0200 @@ -2,7 +2,7 @@ m4_define([mutter_major_version], [3]) m4_define([mutter_minor_version], [28]) -m4_define([mutter_micro_version], [1]) +m4_define([mutter_micro_version], [2]) m4_define([mutter_version], [mutter_major_version.mutter_minor_version.mutter_micro_version]) @@ -270,13 +270,10 @@ PKG_CHECK_MODULES(SYSTEMD, [libsystemd], [have_systemd=yes], [have_systemd=no]) -if test x$have_systemd = xyes; then +if test x$have_systemd = xyes -o -z "$logind_provider"; then logind_provider="libsystemd" fi -AS_IF([test -z "$logind_provider"], - AC_MSG_ERROR([Could not find either systemd or elogind as logind provider])]) - MUTTER_NATIVE_BACKEND_MODULES="libdrm $logind_provider libinput >= 1.4 gudev-1.0 gbm >= 10.3" AC_ARG_ENABLE(native-backend, diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mutter-3.28.1+20180416.d3d5eb8e1/src/Makefile.am new/mutter-3.28.2+20180507.41303bc01/src/Makefile.am --- old/mutter-3.28.1+20180416.d3d5eb8e1/src/Makefile.am 2018-04-16 16:03:56.000000000 +0200 +++ new/mutter-3.28.2+20180507.41303bc01/src/Makefile.am 2018-05-07 22:29:42.000000000 +0200 @@ -153,7 +153,7 @@ backends/meta-pointer-constraint.h \ backends/meta-settings.c \ backends/meta-settings-private.h \ - backends/meta-stage.h \ + backends/meta-stage-private.h \ backends/meta-stage.c \ backends/meta-renderer.c \ backends/meta-renderer.h \ @@ -246,7 +246,7 @@ compositor/meta-window-actor.c \ compositor/meta-window-actor-private.h \ compositor/meta-window-group.c \ - compositor/meta-window-group.h \ + compositor/meta-window-group-private.h \ compositor/meta-window-shape.c \ compositor/region-utils.c \ compositor/region-utils.h \ @@ -543,7 +543,9 @@ meta/meta-settings.h \ meta/meta-shaped-texture.h \ meta/meta-shadow-factory.h \ + meta/meta-stage.h \ meta/meta-window-actor.h \ + meta/meta-window-group.h \ meta/meta-window-shape.h \ meta/prefs.h \ meta/screen.h \ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mutter-3.28.1+20180416.d3d5eb8e1/src/backends/meta-backend.c new/mutter-3.28.2+20180507.41303bc01/src/backends/meta-backend.c --- old/mutter-3.28.1+20180416.d3d5eb8e1/src/backends/meta-backend.c 2018-04-16 16:03:56.000000000 +0200 +++ new/mutter-3.28.2+20180507.41303bc01/src/backends/meta-backend.c 2018-05-07 22:29:42.000000000 +0200 @@ -34,7 +34,7 @@ #include "meta-input-settings-private.h" #include "backends/x11/meta-backend-x11.h" #include "meta-cursor-tracker-private.h" -#include "meta-stage.h" +#include "meta-stage-private.h" #ifdef HAVE_REMOTE_DESKTOP #include "backends/meta-dbus-session-watcher.h" @@ -170,7 +170,7 @@ } static void -center_pointer (MetaBackend *backend) +reset_pointer_position (MetaBackend *backend) { MetaBackendPrivate *priv = meta_backend_get_instance_private (backend); MetaMonitorManager *monitor_manager = priv->monitor_manager; @@ -179,9 +179,11 @@ primary = meta_monitor_manager_get_primary_logical_monitor (monitor_manager); + /* Move the pointer out of the way to avoid hovering over reactive + * elements (e.g. users list at login) causing undesired behaviour. */ meta_backend_warp_pointer (backend, - primary->rect.x + primary->rect.width / 2, - primary->rect.y + primary->rect.height / 2); + primary->rect.x + primary->rect.width * 0.9, + primary->rect.y + primary->rect.height * 0.9); } void @@ -204,7 +206,7 @@ !priv->is_pointer_position_initialized) && !meta_monitor_manager_is_headless (monitor_manager)) { - center_pointer (backend); + reset_pointer_position (backend); priv->is_pointer_position_initialized = TRUE; } } @@ -479,7 +481,7 @@ if (!meta_monitor_manager_is_headless (priv->monitor_manager)) { - center_pointer (backend); + reset_pointer_position (backend); priv->is_pointer_position_initialized = TRUE; } } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mutter-3.28.1+20180416.d3d5eb8e1/src/backends/meta-cursor-renderer.c new/mutter-3.28.2+20180507.41303bc01/src/backends/meta-cursor-renderer.c --- old/mutter-3.28.1+20180416.d3d5eb8e1/src/backends/meta-cursor-renderer.c 2018-04-16 16:03:56.000000000 +0200 +++ new/mutter-3.28.2+20180507.41303bc01/src/backends/meta-cursor-renderer.c 2018-05-07 22:29:42.000000000 +0200 @@ -33,7 +33,7 @@ #include <cogl/cogl.h> #include <clutter/clutter.h> -#include "meta-stage.h" +#include "meta-stage-private.h" struct _MetaCursorRendererPrivate { diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mutter-3.28.1+20180416.d3d5eb8e1/src/backends/meta-monitor-manager.c new/mutter-3.28.2+20180507.41303bc01/src/backends/meta-monitor-manager.c --- old/mutter-3.28.1+20180416.d3d5eb8e1/src/backends/meta-monitor-manager.c 2018-04-16 16:03:56.000000000 +0200 +++ new/mutter-3.28.2+20180507.41303bc01/src/backends/meta-monitor-manager.c 2018-05-07 22:29:42.000000000 +0200 @@ -89,6 +89,9 @@ meta_monitor_manager_is_config_complete (MetaMonitorManager *manager, MetaMonitorsConfig *config); +static MetaMonitor * +meta_monitor_manager_get_active_monitor (MetaMonitorManager *manager); + MetaBackend * meta_monitor_manager_get_backend (MetaMonitorManager *manager) { @@ -198,13 +201,17 @@ static float derive_calculated_global_scale (MetaMonitorManager *manager) { - MetaMonitor *primary_monitor; + MetaMonitor *monitor = NULL; + + monitor = meta_monitor_manager_get_primary_monitor (manager); - primary_monitor = meta_monitor_manager_get_primary_monitor (manager); - if (!primary_monitor) + if (!monitor || !meta_monitor_is_active (monitor)) + monitor = meta_monitor_manager_get_active_monitor (manager); + + if (!monitor) return 1.0; - return calculate_monitor_scale (manager, primary_monitor); + return calculate_monitor_scale (manager, monitor); } static float @@ -2378,6 +2385,12 @@ return find_monitor (manager, meta_monitor_is_laptop_panel); } +static MetaMonitor * +meta_monitor_manager_get_active_monitor (MetaMonitorManager *manager) +{ + return find_monitor (manager, meta_monitor_is_active); +} + MetaMonitor * meta_monitor_manager_get_monitor_from_connector (MetaMonitorManager *manager, const char *connector) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mutter-3.28.1+20180416.d3d5eb8e1/src/backends/meta-screen-cast-stream-src.c new/mutter-3.28.2+20180507.41303bc01/src/backends/meta-screen-cast-stream-src.c --- old/mutter-3.28.1+20180416.d3d5eb8e1/src/backends/meta-screen-cast-stream-src.c 2018-04-16 16:03:56.000000000 +0200 +++ new/mutter-3.28.2+20180507.41303bc01/src/backends/meta-screen-cast-stream-src.c 2018-05-07 22:29:42.000000000 +0200 @@ -153,6 +153,11 @@ return; buffer = pw_stream_peek_buffer (priv->pipewire_stream, buffer_id); + if (!buffer) + { + g_warning ("Failed to peek at PipeWire buffer"); + return; + } if (buffer->datas[0].type == priv->pipewire_type->data.MemFd) { @@ -327,10 +332,18 @@ struct spa_fraction max_framerate; struct spa_fraction min_framerate; const struct spa_pod *params[1]; + int result; pipewire_stream = pw_stream_new (priv->pipewire_remote, "meta-screen-cast-src", NULL); + if (!pipewire_stream) + { + g_set_error (error, G_IO_ERROR, G_IO_ERROR_FAILED, + "Failed to create PipeWire stream: %s", + strerror (errno)); + return NULL; + } meta_screen_cast_stream_src_get_specs (src, &width, &height, &frame_rate); frame_rate_fraction = meta_fraction_from_double (frame_rate); @@ -356,14 +369,15 @@ &stream_events, src); - if (pw_stream_connect (pipewire_stream, - PW_DIRECTION_OUTPUT, - NULL, - PW_STREAM_FLAG_NONE, - params, G_N_ELEMENTS (params)) != 0) + result = pw_stream_connect (pipewire_stream, + PW_DIRECTION_OUTPUT, + NULL, + PW_STREAM_FLAG_NONE, + params, G_N_ELEMENTS (params)); + if (result != 0) { g_set_error (error, G_IO_ERROR, G_IO_ERROR_FAILED, - "Could not connect"); + "Could not connect: %s", spa_strerror (result)); return NULL; } @@ -466,6 +480,12 @@ (MetaPipeWireSource *) g_source_new (&pipewire_source_funcs, sizeof (MetaPipeWireSource)); pipewire_source->pipewire_loop = pw_loop_new (NULL); + if (!pipewire_source->pipewire_loop) + { + g_source_destroy ((GSource *) pipewire_source); + return NULL; + } + g_source_add_unix_fd (&pipewire_source->base, pw_loop_get_fd (pipewire_source->pipewire_loop), G_IO_IN | G_IO_ERR); @@ -491,6 +511,13 @@ meta_screen_cast_stream_src_get_instance_private (src); priv->pipewire_source = create_pipewire_source (); + if (!priv->pipewire_source) + { + g_set_error (error, G_IO_ERROR, G_IO_ERROR_FAILED, + "Failed to create PipeWire source"); + return FALSE; + } + priv->pipewire_core = pw_core_new (priv->pipewire_source->pipewire_loop, NULL); if (!priv->pipewire_core) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mutter-3.28.1+20180416.d3d5eb8e1/src/backends/meta-stage-private.h new/mutter-3.28.2+20180507.41303bc01/src/backends/meta-stage-private.h --- old/mutter-3.28.1+20180416.d3d5eb8e1/src/backends/meta-stage-private.h 1970-01-01 01:00:00.000000000 +0100 +++ new/mutter-3.28.2+20180507.41303bc01/src/backends/meta-stage-private.h 2018-05-07 22:29:42.000000000 +0200 @@ -0,0 +1,55 @@ +/* + * Copyright (C) 2012 Intel Corporation + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License as + * published by the Free Software Foundation; either version 2 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA + * 02111-1307, USA. + */ + +#ifndef META_STAGE_PRIVATE_H +#define META_STAGE_PRIVATE_H + +#include <meta/meta-stage.h> + +#include "meta-cursor.h" +#include <meta/boxes.h> + +G_BEGIN_DECLS + +typedef struct _MetaOverlay MetaOverlay; + +struct _MetaStage +{ + ClutterStage parent; +}; + +ClutterActor *meta_stage_new (void); + +MetaOverlay *meta_stage_create_cursor_overlay (MetaStage *stage); +void meta_stage_remove_cursor_overlay (MetaStage *stage, + MetaOverlay *overlay); + +void meta_stage_update_cursor_overlay (MetaStage *stage, + MetaOverlay *overlay, + CoglTexture *texture, + ClutterRect *rect); + +void meta_stage_set_active (MetaStage *stage, + gboolean is_active); + +void meta_stage_update_view_layout (MetaStage *stage); + +G_END_DECLS + +#endif /* META_STAGE_PRIVATE_H */ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mutter-3.28.1+20180416.d3d5eb8e1/src/backends/meta-stage.c new/mutter-3.28.2+20180507.41303bc01/src/backends/meta-stage.c --- old/mutter-3.28.1+20180416.d3d5eb8e1/src/backends/meta-stage.c 2018-04-16 16:03:56.000000000 +0200 +++ new/mutter-3.28.2+20180507.41303bc01/src/backends/meta-stage.c 2018-05-07 22:29:42.000000000 +0200 @@ -22,7 +22,7 @@ #include <config.h> -#include "meta-stage.h" +#include "meta-stage-private.h" #include <meta/meta-backend.h> #include <meta/meta-monitor-manager.h> diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mutter-3.28.1+20180416.d3d5eb8e1/src/backends/meta-stage.h new/mutter-3.28.2+20180507.41303bc01/src/backends/meta-stage.h --- old/mutter-3.28.1+20180416.d3d5eb8e1/src/backends/meta-stage.h 2018-04-16 16:03:56.000000000 +0200 +++ new/mutter-3.28.2+20180507.41303bc01/src/backends/meta-stage.h 1970-01-01 01:00:00.000000000 +0100 @@ -1,71 +0,0 @@ -/* - * Copyright (C) 2012 Intel Corporation - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License as - * published by the Free Software Foundation; either version 2 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, but - * WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA - * 02111-1307, USA. - */ - -#ifndef META_STAGE_H -#define META_STAGE_H - -#include <clutter/clutter.h> - -#include "meta-cursor.h" -#include <meta/boxes.h> - -G_BEGIN_DECLS - -#define META_TYPE_STAGE (meta_stage_get_type ()) -#define META_STAGE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), META_TYPE_STAGE, MetaStage)) -#define META_STAGE_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), META_TYPE_STAGE, MetaStageClass)) -#define META_IS_STAGE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), META_TYPE_STAGE)) -#define META_IS_STAGE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), META_TYPE_STAGE)) -#define META_STAGE_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), META_TYPE_STAGE, MetaStageClass)) - -typedef struct _MetaStage MetaStage; -typedef struct _MetaStageClass MetaStageClass; -typedef struct _MetaOverlay MetaOverlay; - -struct _MetaStageClass -{ - ClutterStageClass parent_class; -}; - -struct _MetaStage -{ - ClutterStage parent; -}; - -GType meta_stage_get_type (void) G_GNUC_CONST; - -ClutterActor *meta_stage_new (void); - -MetaOverlay *meta_stage_create_cursor_overlay (MetaStage *stage); -void meta_stage_remove_cursor_overlay (MetaStage *stage, - MetaOverlay *overlay); - -void meta_stage_update_cursor_overlay (MetaStage *stage, - MetaOverlay *overlay, - CoglTexture *texture, - ClutterRect *rect); - -void meta_stage_set_active (MetaStage *stage, - gboolean is_active); - -void meta_stage_update_view_layout (MetaStage *stage); - -G_END_DECLS - -#endif /* META_STAGE_H */ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mutter-3.28.1+20180416.d3d5eb8e1/src/backends/native/meta-backend-native.c new/mutter-3.28.2+20180507.41303bc01/src/backends/native/meta-backend-native.c --- old/mutter-3.28.1+20180416.d3d5eb8e1/src/backends/native/meta-backend-native.c 2018-04-16 16:03:56.000000000 +0200 +++ new/mutter-3.28.2+20180507.41303bc01/src/backends/native/meta-backend-native.c 2018-05-07 22:29:42.000000000 +0200 @@ -43,7 +43,7 @@ #include "backends/meta-logical-monitor.h" #include "backends/meta-monitor-manager-private.h" #include "backends/meta-pointer-constraint.h" -#include "backends/meta-stage.h" +#include "backends/meta-stage-private.h" #include "backends/native/meta-clutter-backend-native.h" #include "backends/native/meta-input-settings-native.h" #include "backends/native/meta-renderer-native.h" diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mutter-3.28.1+20180416.d3d5eb8e1/src/backends/native/meta-renderer-native.c new/mutter-3.28.2+20180507.41303bc01/src/backends/native/meta-renderer-native.c --- old/mutter-3.28.1+20180416.d3d5eb8e1/src/backends/native/meta-renderer-native.c 2018-04-16 16:03:56.000000000 +0200 +++ new/mutter-3.28.2+20180507.41303bc01/src/backends/native/meta-renderer-native.c 2018-05-07 22:29:42.000000000 +0200 @@ -1911,12 +1911,7 @@ * context. */ if (egl_context_changed) - { - _cogl_winsys_egl_make_current (cogl_display, - EGL_NO_SURFACE, - EGL_NO_SURFACE, - EGL_NO_CONTEXT); - } + _cogl_winsys_egl_ensure_current (cogl_display); } static gboolean diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mutter-3.28.1+20180416.d3d5eb8e1/src/backends/x11/meta-backend-x11.c new/mutter-3.28.2+20180507.41303bc01/src/backends/x11/meta-backend-x11.c --- old/mutter-3.28.1+20180416.d3d5eb8e1/src/backends/x11/meta-backend-x11.c 2018-04-16 16:03:56.000000000 +0200 +++ new/mutter-3.28.2+20180507.41303bc01/src/backends/x11/meta-backend-x11.c 2018-05-07 22:29:42.000000000 +0200 @@ -37,7 +37,7 @@ #include <X11/Xlib-xcb.h> #include <xkbcommon/xkbcommon-x11.h> -#include "backends/meta-stage.h" +#include "backends/meta-stage-private.h" #include "backends/x11/meta-clutter-backend-x11.h" #include "backends/x11/meta-renderer-x11.h" #include "meta/meta-cursor-tracker.h" diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mutter-3.28.1+20180416.d3d5eb8e1/src/backends/x11/meta-cursor-renderer-x11.c new/mutter-3.28.2+20180507.41303bc01/src/backends/x11/meta-cursor-renderer-x11.c --- old/mutter-3.28.1+20180416.d3d5eb8e1/src/backends/x11/meta-cursor-renderer-x11.c 2018-04-16 16:03:56.000000000 +0200 +++ new/mutter-3.28.2+20180507.41303bc01/src/backends/x11/meta-cursor-renderer-x11.c 2018-05-07 22:29:42.000000000 +0200 @@ -29,7 +29,7 @@ #include <X11/extensions/Xfixes.h> #include "meta-backend-x11.h" -#include "meta-stage.h" +#include "meta-stage-private.h" struct _MetaCursorRendererX11Private { diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mutter-3.28.1+20180416.d3d5eb8e1/src/compositor/compositor.c new/mutter-3.28.2+20180507.41303bc01/src/compositor/compositor.c --- old/mutter-3.28.1+20180416.d3d5eb8e1/src/compositor/compositor.c 2018-04-16 16:03:56.000000000 +0200 +++ new/mutter-3.28.2+20180507.41303bc01/src/compositor/compositor.c 2018-05-07 22:29:42.000000000 +0200 @@ -67,7 +67,7 @@ #include <meta/meta-background-group.h> #include <meta/meta-shadow-factory.h> #include "meta-window-actor-private.h" -#include "meta-window-group.h" +#include "meta-window-group-private.h" #include "window-private.h" /* to check window->hidden */ #include "display-private.h" /* for meta_display_lookup_x_window() and meta_display_cancel_touch() */ #include "util-private.h" diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mutter-3.28.1+20180416.d3d5eb8e1/src/compositor/meta-window-group-private.h new/mutter-3.28.2+20180507.41303bc01/src/compositor/meta-window-group-private.h --- old/mutter-3.28.1+20180416.d3d5eb8e1/src/compositor/meta-window-group-private.h 1970-01-01 01:00:00.000000000 +0100 +++ new/mutter-3.28.2+20180507.41303bc01/src/compositor/meta-window-group-private.h 2018-05-07 22:29:42.000000000 +0200 @@ -0,0 +1,24 @@ +/* -*- mode: C; c-file-style: "gnu"; indent-tabs-mode: nil; -*- */ + +#ifndef META_WINDOW_GROUP_PRIVATE_H +#define META_WINDOW_GROUP_PRIVATE_H + +#include <meta/meta-window-group.h> + +#include <meta/screen.h> + +/** + * MetaWindowGroup: + * + * This class is a subclass of ClutterActor with special handling for + * #MetaCullable when painting children. It uses code similar to + * meta_cullable_cull_out_children(), but also has additional special + * cases for the undirected window, and similar. + */ + + +typedef struct _MetaWindowGroupPrivate MetaWindowGroupPrivate; + +ClutterActor *meta_window_group_new (MetaScreen *screen); + +#endif /* META_WINDOW_GROUP_PRIVATE_H */ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mutter-3.28.1+20180416.d3d5eb8e1/src/compositor/meta-window-group.c new/mutter-3.28.2+20180507.41303bc01/src/compositor/meta-window-group.c --- old/mutter-3.28.1+20180416.d3d5eb8e1/src/compositor/meta-window-group.c 2018-04-16 16:03:56.000000000 +0200 +++ new/mutter-3.28.2+20180507.41303bc01/src/compositor/meta-window-group.c 2018-05-07 22:29:42.000000000 +0200 @@ -10,7 +10,7 @@ #include "clutter-utils.h" #include "compositor-private.h" #include "meta-window-actor-private.h" -#include "meta-window-group.h" +#include "meta-window-group-private.h" #include "window-private.h" #include "meta-cullable.h" diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mutter-3.28.1+20180416.d3d5eb8e1/src/compositor/meta-window-group.h new/mutter-3.28.2+20180507.41303bc01/src/compositor/meta-window-group.h --- old/mutter-3.28.1+20180416.d3d5eb8e1/src/compositor/meta-window-group.h 2018-04-16 16:03:56.000000000 +0200 +++ new/mutter-3.28.2+20180507.41303bc01/src/compositor/meta-window-group.h 1970-01-01 01:00:00.000000000 +0100 @@ -1,37 +0,0 @@ -/* -*- mode: C; c-file-style: "gnu"; indent-tabs-mode: nil; -*- */ - -#ifndef META_WINDOW_GROUP_H -#define META_WINDOW_GROUP_H - -#include <clutter/clutter.h> - -#include <meta/screen.h> - -/** - * MetaWindowGroup: - * - * This class is a subclass of ClutterActor with special handling for - * #MetaCullable when painting children. It uses code similar to - * meta_cullable_cull_out_children(), but also has additional special - * cases for the undirected window, and similar. - */ - -#define META_TYPE_WINDOW_GROUP (meta_window_group_get_type ()) -#define META_WINDOW_GROUP(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), META_TYPE_WINDOW_GROUP, MetaWindowGroup)) -#define META_WINDOW_GROUP_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), META_TYPE_WINDOW_GROUP, MetaWindowGroupClass)) -#define META_IS_WINDOW_GROUP(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), META_TYPE_WINDOW_GROUP)) -#define META_IS_WINDOW_GROUP_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), META_TYPE_WINDOW_GROUP)) -#define META_WINDOW_GROUP_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), META_TYPE_WINDOW_GROUP, MetaWindowGroupClass)) - -typedef struct _MetaWindowGroup MetaWindowGroup; -typedef struct _MetaWindowGroupClass MetaWindowGroupClass; -typedef struct _MetaWindowGroupPrivate MetaWindowGroupPrivate; - -GType meta_window_group_get_type (void); - -ClutterActor *meta_window_group_new (MetaScreen *screen); - -gboolean meta_window_group_actor_is_untransformed (ClutterActor *actor, - int *x_origin, - int *y_origin); -#endif /* META_WINDOW_GROUP_H */ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mutter-3.28.1+20180416.d3d5eb8e1/src/core/display.c new/mutter-3.28.2+20180507.41303bc01/src/core/display.c --- old/mutter-3.28.1+20180416.d3d5eb8e1/src/core/display.c 2018-04-16 16:03:56.000000000 +0200 +++ new/mutter-3.28.2+20180507.41303bc01/src/core/display.c 2018-05-07 22:29:42.000000000 +0200 @@ -53,7 +53,7 @@ #include "backends/meta-logical-monitor.h" #include "backends/native/meta-backend-native.h" #include "backends/x11/meta-backend-x11.h" -#include "backends/meta-stage.h" +#include "backends/meta-stage-private.h" #include "backends/meta-input-settings-private.h" #include <clutter/x11/clutter-x11.h> diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mutter-3.28.1+20180416.d3d5eb8e1/src/core/window-private.h new/mutter-3.28.2+20180507.41303bc01/src/core/window-private.h --- old/mutter-3.28.1+20180416.d3d5eb8e1/src/core/window-private.h 2018-04-16 16:03:56.000000000 +0200 +++ new/mutter-3.28.2+20180507.41303bc01/src/core/window-private.h 2018-05-07 22:29:42.000000000 +0200 @@ -81,6 +81,7 @@ META_MOVE_RESIZE_STATE_CHANGED = 1 << 5, META_MOVE_RESIZE_UNMAXIMIZE = 1 << 6, META_MOVE_RESIZE_FORCE_MOVE = 1 << 7, + META_MOVE_RESIZE_WAYLAND_STATE_CHANGED = 1 << 8, } MetaMoveResizeFlags; typedef enum @@ -88,6 +89,7 @@ META_MOVE_RESIZE_RESULT_MOVED = 1 << 0, META_MOVE_RESIZE_RESULT_RESIZED = 1 << 1, META_MOVE_RESIZE_RESULT_FRAME_SHAPE_CHANGED = 1 << 2, + META_MOVE_RESIZE_RESULT_STATE_CHANGED = 1 << 3, } MetaMoveResizeResultFlags; typedef enum diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mutter-3.28.1+20180416.d3d5eb8e1/src/core/window.c new/mutter-3.28.2+20180507.41303bc01/src/core/window.c --- old/mutter-3.28.1+20180416.d3d5eb8e1/src/core/window.c 2018-04-16 16:03:56.000000000 +0200 +++ new/mutter-3.28.2+20180507.41303bc01/src/core/window.c 2018-05-07 22:29:42.000000000 +0200 @@ -3997,7 +3997,7 @@ if ((moved_or_resized || did_placement || - (flags & META_MOVE_RESIZE_STATE_CHANGED) != 0) && + (result & META_MOVE_RESIZE_RESULT_STATE_CHANGED) != 0) && window->known_to_compositor) { meta_compositor_sync_window_geometry (window->display->compositor, diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mutter-3.28.1+20180416.d3d5eb8e1/src/meta/meta-monitor-manager.h new/mutter-3.28.2+20180507.41303bc01/src/meta/meta-monitor-manager.h --- old/mutter-3.28.1+20180416.d3d5eb8e1/src/meta/meta-monitor-manager.h 2018-04-16 16:03:56.000000000 +0200 +++ new/mutter-3.28.2+20180507.41303bc01/src/meta/meta-monitor-manager.h 2018-05-07 22:29:42.000000000 +0200 @@ -54,4 +54,7 @@ gint meta_monitor_manager_get_display_configuration_timeout (void); +/* Re-declaration of parent type for introspection */ +GType meta_dbus_display_config_skeleton_get_type (void) G_GNUC_CONST; + #endif /* META_MONITOR_MANAGER_H */ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mutter-3.28.1+20180416.d3d5eb8e1/src/meta/meta-stage.h new/mutter-3.28.2+20180507.41303bc01/src/meta/meta-stage.h --- old/mutter-3.28.1+20180416.d3d5eb8e1/src/meta/meta-stage.h 1970-01-01 01:00:00.000000000 +0100 +++ new/mutter-3.28.2+20180507.41303bc01/src/meta/meta-stage.h 2018-05-07 22:29:42.000000000 +0200 @@ -0,0 +1,32 @@ +/* + * Copyright (C) 2012 Intel Corporation + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License as + * published by the Free Software Foundation; either version 2 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA + * 02111-1307, USA. + */ + +#ifndef META_STAGE_H +#define META_STAGE_H + +#include "clutter/clutter.h" + +G_BEGIN_DECLS + +#define META_TYPE_STAGE (meta_stage_get_type ()) +G_DECLARE_FINAL_TYPE (MetaStage, meta_stage, META, STAGE, ClutterStage) + +G_END_DECLS + +#endif /* META_STAGE_H */ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mutter-3.28.1+20180416.d3d5eb8e1/src/meta/meta-window-group.h new/mutter-3.28.2+20180507.41303bc01/src/meta/meta-window-group.h --- old/mutter-3.28.1+20180416.d3d5eb8e1/src/meta/meta-window-group.h 1970-01-01 01:00:00.000000000 +0100 +++ new/mutter-3.28.2+20180507.41303bc01/src/meta/meta-window-group.h 2018-05-07 22:29:42.000000000 +0200 @@ -0,0 +1,11 @@ +/* -*- mode: C; c-file-style: "gnu"; indent-tabs-mode: nil; -*- */ + +#ifndef META_WINDOW_GROUP_H +#define META_WINDOW_GROUP_H + +#include "clutter/clutter.h" + +#define META_TYPE_WINDOW_GROUP (meta_window_group_get_type()) +G_DECLARE_FINAL_TYPE (MetaWindowGroup, meta_window_group, META, WINDOW_GROUP, ClutterActor) + +#endif /* META_WINDOW_GROUP_H */ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mutter-3.28.1+20180416.d3d5eb8e1/src/ui/frames.c new/mutter-3.28.2+20180507.41303bc01/src/ui/frames.c --- old/mutter-3.28.1+20180416.d3d5eb8e1/src/ui/frames.c 2018-04-16 16:03:56.000000000 +0200 +++ new/mutter-3.28.2+20180507.41303bc01/src/ui/frames.c 2018-05-07 22:29:42.000000000 +0200 @@ -1330,7 +1330,9 @@ MetaFrameBorders borders; MetaFrameFlags flags; MetaRectangle frame_rect; - int scale = meta_theme_get_window_scaling_factor (); + cairo_surface_t *surface; + double xscale, yscale; + int scale; meta_window_get_frame_rect (frame->meta_window, &frame_rect); @@ -1340,7 +1342,11 @@ meta_ui_frame_get_borders (frame, &borders); /* See comment in meta_frame_layout_draw_with_style() for details on HiDPI handling */ - cairo_scale (cr, scale, scale); + scale = meta_theme_get_window_scaling_factor (); + surface = cairo_get_target (cr); + cairo_surface_get_device_scale (surface, &xscale, &yscale); + cairo_surface_set_device_scale (surface, scale, scale); + gtk_render_background (frame->style_info->styles[META_STYLE_ELEMENT_FRAME], cr, borders.invisible.left / scale, borders.invisible.top / scale, @@ -1349,6 +1355,8 @@ borders.invisible.left / scale, borders.invisible.top / scale, frame_rect.width / scale, borders.total.top / scale); + + cairo_surface_set_device_scale (surface, xscale, yscale); } /* XXX -- this is disgusting. Find a better approach here. diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mutter-3.28.1+20180416.d3d5eb8e1/src/ui/theme.c new/mutter-3.28.2+20180507.41303bc01/src/ui/theme.c --- old/mutter-3.28.1+20180416.d3d5eb8e1/src/ui/theme.c 2018-04-16 16:03:56.000000000 +0200 +++ new/mutter-3.28.2+20180507.41303bc01/src/ui/theme.c 2018-05-07 22:29:42.000000000 +0200 @@ -736,7 +736,9 @@ GdkRectangle titlebar_rect; GdkRectangle button_rect; const MetaFrameBorders *borders; - int scale = meta_theme_get_window_scaling_factor (); + cairo_surface_t *frame_surface; + double xscale, yscale; + int scale; /* We opt out of GTK+/Clutter's HiDPI handling, so we have to do the scaling * ourselves; the nitty-gritty is a bit confusing, so here is an overview: @@ -748,8 +750,14 @@ * - for drawing, we scale the canvas to have GTK+ render elements (borders, * radii, ...) at the correct scale - as a result, we have to "unscale" * the geometry again to not apply the scaling twice + * - As per commit e36b629c GTK expects the device scale to be set and match + * the final scaling or the surface caching won't take this in account + * breaking -gtk-scaled items. */ - cairo_scale (cr, scale, scale); + scale = meta_theme_get_window_scaling_factor (); + frame_surface = cairo_get_target (cr); + cairo_surface_get_device_scale (frame_surface, &xscale, &yscale); + cairo_surface_set_device_scale (frame_surface, scale, scale); borders = &fgeom->borders; @@ -905,6 +913,8 @@ gtk_style_context_remove_class (style, button_class); gtk_style_context_set_state (style, state); } + + cairo_surface_set_device_scale (frame_surface, xscale, yscale); } /** diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mutter-3.28.1+20180416.d3d5eb8e1/src/wayland/meta-wayland-legacy-xdg-shell.c new/mutter-3.28.2+20180507.41303bc01/src/wayland/meta-wayland-legacy-xdg-shell.c --- old/mutter-3.28.1+20180416.d3d5eb8e1/src/wayland/meta-wayland-legacy-xdg-shell.c 2018-04-16 16:03:56.000000000 +0200 +++ new/mutter-3.28.2+20180507.41303bc01/src/wayland/meta-wayland-legacy-xdg-shell.c 2018-05-07 22:29:42.000000000 +0200 @@ -585,6 +585,17 @@ (new_max_height == 0 || new_min_height <= new_max_height)); } +static inline gboolean +did_geometry_change (MetaWaylandZxdgSurfaceV6 *xdg_surface, + MetaWaylandPendingState *pending) +{ + MetaWaylandZxdgSurfaceV6Private *priv = + meta_wayland_zxdg_surface_v6_get_instance_private (xdg_surface); + + return pending->has_new_geometry && + !meta_rectangle_equal (&priv->geometry, &pending->new_geometry); +} + static void meta_wayland_zxdg_toplevel_v6_commit (MetaWaylandSurfaceRole *surface_role, MetaWaylandPendingState *pending) @@ -600,6 +611,11 @@ meta_wayland_surface_role_get_surface (surface_role); MetaWindow *window = surface->window; MetaRectangle window_geometry; + gboolean geometry_changed; + + /* This check must happen before chaining up, otherwise the new geometry + * is applied and it'll always return FALSE. */ + geometry_changed = did_geometry_change (xdg_surface, pending); surface_role_class = META_WAYLAND_SURFACE_ROLE_CLASS (meta_wayland_zxdg_toplevel_v6_parent_class); @@ -618,7 +634,7 @@ if (!window) return; - if (pending->has_new_geometry) + if (geometry_changed || meta_window_wayland_needs_move_resize (window)) { window_geometry = meta_wayland_zxdg_surface_v6_get_window_geometry (xdg_surface); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mutter-3.28.1+20180416.d3d5eb8e1/src/wayland/meta-wayland-seat.c new/mutter-3.28.2+20180507.41303bc01/src/wayland/meta-wayland-seat.c --- old/mutter-3.28.1+20180416.d3d5eb8e1/src/wayland/meta-wayland-seat.c 2018-04-16 16:03:56.000000000 +0200 +++ new/mutter-3.28.2+20180507.41303bc01/src/wayland/meta-wayland-seat.c 2018-05-07 22:29:42.000000000 +0200 @@ -325,7 +325,8 @@ meta_wayland_seat_update (MetaWaylandSeat *seat, const ClutterEvent *event) { - if (!event_from_supported_hardware_device (seat, event) && + if (!(clutter_event_get_flags (event) & CLUTTER_EVENT_FLAG_INPUT_METHOD) && + !event_from_supported_hardware_device (seat, event) && !event_is_synthesized_crossing (event)) return; @@ -363,7 +364,8 @@ meta_wayland_seat_handle_event (MetaWaylandSeat *seat, const ClutterEvent *event) { - if (!event_from_supported_hardware_device (seat, event)) + if (!(clutter_event_get_flags (event) & CLUTTER_EVENT_FLAG_INPUT_METHOD) && + !event_from_supported_hardware_device (seat, event)) return FALSE; switch (event->type) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mutter-3.28.1+20180416.d3d5eb8e1/src/wayland/meta-wayland-surface.c new/mutter-3.28.2+20180507.41303bc01/src/wayland/meta-wayland-surface.c --- old/mutter-3.28.1+20180416.d3d5eb8e1/src/wayland/meta-wayland-surface.c 2018-04-16 16:03:56.000000000 +0200 +++ new/mutter-3.28.2+20180507.41303bc01/src/wayland/meta-wayland-surface.c 2018-05-07 22:29:42.000000000 +0200 @@ -464,7 +464,6 @@ to->dy = from->dy; } - wl_list_init (&to->frame_callback_list); wl_list_insert_list (&to->frame_callback_list, &from->frame_callback_list); cairo_region_union (to->surface_damage, from->surface_damage); @@ -581,7 +580,10 @@ { MetaWaylandSurface *parent = surface->sub.parent; - return meta_wayland_surface_is_effectively_synchronized (parent); + if (parent) + return meta_wayland_surface_is_effectively_synchronized (parent); + + return TRUE; } } } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mutter-3.28.1+20180416.d3d5eb8e1/src/wayland/meta-wayland-xdg-foreign.c new/mutter-3.28.2+20180507.41303bc01/src/wayland/meta-wayland-xdg-foreign.c --- old/mutter-3.28.1+20180416.d3d5eb8e1/src/wayland/meta-wayland-xdg-foreign.c 2018-04-16 16:03:56.000000000 +0200 +++ new/mutter-3.28.2+20180507.41303bc01/src/wayland/meta-wayland-xdg-foreign.c 2018-05-07 22:29:42.000000000 +0200 @@ -252,10 +252,8 @@ if (!surface->role) return FALSE; - if (!META_IS_WAYLAND_XDG_SURFACE (surface->role)) - return FALSE; - - if (!META_IS_WAYLAND_ZXDG_SURFACE_V6 (surface->role)) + if (!META_IS_WAYLAND_XDG_TOPLEVEL (surface->role) && + !META_IS_WAYLAND_ZXDG_TOPLEVEL_V6 (surface->role)) return FALSE; if (!surface->window) @@ -384,7 +382,7 @@ (!META_IS_WAYLAND_XDG_SURFACE (exported->surface->role) && !META_IS_WAYLAND_ZXDG_SURFACE_V6 (exported->surface->role))) { - zxdg_imported_v1_send_destroyed (resource); + zxdg_imported_v1_send_destroyed (xdg_imported_resource); return; } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mutter-3.28.1+20180416.d3d5eb8e1/src/wayland/meta-wayland-xdg-shell.c new/mutter-3.28.2+20180507.41303bc01/src/wayland/meta-wayland-xdg-shell.c --- old/mutter-3.28.1+20180416.d3d5eb8e1/src/wayland/meta-wayland-xdg-shell.c 2018-04-16 16:03:56.000000000 +0200 +++ new/mutter-3.28.2+20180507.41303bc01/src/wayland/meta-wayland-xdg-shell.c 2018-05-07 22:29:42.000000000 +0200 @@ -608,6 +608,17 @@ (new_max_height == 0 || new_min_height <= new_max_height)); } +static inline gboolean +did_geometry_change (MetaWaylandXdgSurface *xdg_surface, + MetaWaylandPendingState *pending) +{ + MetaWaylandXdgSurfacePrivate *priv = + meta_wayland_xdg_surface_get_instance_private (xdg_surface); + + return pending->has_new_geometry && + !meta_rectangle_equal (&priv->geometry, &pending->new_geometry); +} + static void meta_wayland_xdg_toplevel_commit (MetaWaylandSurfaceRole *surface_role, MetaWaylandPendingState *pending) @@ -621,6 +632,7 @@ meta_wayland_surface_role_get_surface (surface_role); MetaWindow *window; MetaRectangle window_geometry; + gboolean geometry_changed; if (!surface->buffer_ref.buffer && xdg_surface_priv->first_buffer_attached) { @@ -630,6 +642,10 @@ window = surface->window; + /* This check must happen before chaining up, otherwise the new geometry + * is applied and it'll always return FALSE. */ + geometry_changed = did_geometry_change (xdg_surface, pending); + surface_role_class = META_WAYLAND_SURFACE_ROLE_CLASS (meta_wayland_xdg_toplevel_parent_class); surface_role_class->commit (surface_role, pending); @@ -643,7 +659,7 @@ if (!pending->newly_attached) return; - if (pending->has_new_geometry) + if (geometry_changed || meta_window_wayland_needs_move_resize (window)) { window_geometry = meta_wayland_xdg_surface_get_window_geometry (xdg_surface); meta_window_wayland_move_resize (window, diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mutter-3.28.1+20180416.d3d5eb8e1/src/wayland/meta-window-wayland.c new/mutter-3.28.2+20180507.41303bc01/src/wayland/meta-window-wayland.c --- old/mutter-3.28.1+20180416.d3d5eb8e1/src/wayland/meta-window-wayland.c 2018-04-16 16:03:56.000000000 +0200 +++ new/mutter-3.28.2+20180507.41303bc01/src/wayland/meta-window-wayland.c 2018-05-07 22:29:42.000000000 +0200 @@ -48,6 +48,7 @@ int geometry_scale; MetaWaylandSerial pending_configure_serial; + gboolean has_pending_state_change; gboolean has_pending_move; int pending_move_x; int pending_move_y; @@ -324,6 +325,9 @@ window->buffer_rect.x = new_buffer_x; window->buffer_rect.y = new_buffer_y; } + + if (flags & META_MOVE_RESIZE_WAYLAND_STATE_CHANGED) + *result |= META_MOVE_RESIZE_RESULT_STATE_CHANGED; } else { @@ -336,6 +340,8 @@ wl_window->pending_move_x = new_x; wl_window->pending_move_y = new_y; } + + wl_window->has_pending_state_change = (flags & META_MOVE_RESIZE_STATE_CHANGED) != 0; } } @@ -629,12 +635,9 @@ } static gboolean -should_do_pending_move (MetaWindowWayland *wl_window, - MetaWaylandSerial *acked_configure_serial) +is_pending_ack_configure (MetaWindowWayland *wl_window, + MetaWaylandSerial *acked_configure_serial) { - if (!wl_window->has_pending_move) - return FALSE; - if (wl_window->pending_configure_serial.set) { /* If we're waiting for a configure and this isn't an ACK for @@ -677,6 +680,7 @@ int gravity; MetaRectangle rect; MetaMoveResizeFlags flags; + gboolean pending_ack_configure; /* new_geom is in the logical pixel coordinate space, but MetaWindow wants its * rects to represent what in turn will end up on the stage, i.e. we need to @@ -700,10 +704,12 @@ flags = META_MOVE_RESIZE_WAYLAND_RESIZE; + pending_ack_configure = is_pending_ack_configure (wl_window, acked_configure_serial); + /* x/y are ignored when we're doing interactive resizing */ if (!meta_grab_op_is_resizing (window->display->grab_op)) { - if (wl_window->has_pending_move && should_do_pending_move (wl_window, acked_configure_serial)) + if (wl_window->has_pending_move && pending_ack_configure) { rect.x = wl_window->pending_move_x; rect.y = wl_window->pending_move_y; @@ -724,6 +730,12 @@ } } + if (wl_window->has_pending_state_change && pending_ack_configure) + { + flags |= META_MOVE_RESIZE_WAYLAND_STATE_CHANGED; + wl_window->has_pending_state_change = FALSE; + } + wl_window->pending_configure_serial.set = FALSE; rect.width = new_geom.width; @@ -903,3 +915,10 @@ scale_size (width, height, scale); } +gboolean +meta_window_wayland_needs_move_resize (MetaWindow *window) +{ + MetaWindowWayland *wl_window = META_WINDOW_WAYLAND (window); + + return wl_window->has_pending_state_change || wl_window->has_pending_move; +} diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mutter-3.28.1+20180416.d3d5eb8e1/src/wayland/meta-window-wayland.h new/mutter-3.28.2+20180507.41303bc01/src/wayland/meta-window-wayland.h --- old/mutter-3.28.1+20180416.d3d5eb8e1/src/wayland/meta-window-wayland.h 2018-04-16 16:03:56.000000000 +0200 +++ new/mutter-3.28.2+20180507.41303bc01/src/wayland/meta-window-wayland.h 2018-05-07 22:29:42.000000000 +0200 @@ -78,5 +78,6 @@ int *width, int *height); +gboolean meta_window_wayland_needs_move_resize (MetaWindow *window); #endif diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mutter-3.28.1+20180416.d3d5eb8e1/src/wayland/meta-xwayland.c new/mutter-3.28.2+20180507.41303bc01/src/wayland/meta-xwayland.c --- old/mutter-3.28.1+20180416.d3d5eb8e1/src/wayland/meta-xwayland.c 2018-04-16 16:03:56.000000000 +0200 +++ new/mutter-3.28.2+20180507.41303bc01/src/wayland/meta-xwayland.c 2018-05-07 22:29:42.000000000 +0200 @@ -26,6 +26,8 @@ #include "meta-xwayland.h" #include "meta-xwayland-private.h" +#include <meta/main.h> + #include <glib.h> #include <glib-unix.h> #include <errno.h> @@ -393,30 +395,34 @@ gpointer user_data) { GSubprocess *proc = G_SUBPROCESS (source); - GError *error = NULL; + g_autoptr (GError) error = NULL; if (!g_subprocess_wait_finish (proc, result, &error)) { - if (!g_error_matches (error, G_IO_ERROR, G_IO_ERROR_CANCELLED)) - g_error ("Failed to finish waiting for Xwayland: %s", error->message); - g_clear_error (&error); + if (g_error_matches (error, G_IO_ERROR, G_IO_ERROR_CANCELLED)) + return; + + g_warning ("Failed to finish waiting for Xwayland: %s", error->message); } else if (!g_subprocess_get_successful (proc)) - g_error ("X Wayland crashed; aborting"); + g_warning ("X Wayland crashed; exiting"); else { /* For now we simply abort if we see the server exit. * * In the future X will only be loaded lazily for legacy X support * but for now it's a hard requirement. */ - g_error ("Spurious exit of X Wayland server"); + g_warning ("Spurious exit of X Wayland server"); } + + meta_exit (META_EXIT_ERROR); } static int x_io_error (Display *display) { - g_error ("Connection to xwayland lost"); + g_warning ("Connection to xwayland lost"); + meta_exit (META_EXIT_ERROR); return 0; } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mutter-3.28.1+20180416.d3d5eb8e1/src/x11/window-x11.c new/mutter-3.28.2+20180507.41303bc01/src/x11/window-x11.c --- old/mutter-3.28.1+20180416.d3d5eb8e1/src/x11/window-x11.c 2018-04-16 16:03:56.000000000 +0200 +++ new/mutter-3.28.2+20180507.41303bc01/src/x11/window-x11.c 2018-05-07 22:29:42.000000000 +0200 @@ -1282,6 +1282,8 @@ *result |= META_MOVE_RESIZE_RESULT_MOVED; if (need_resize_client || need_resize_frame) *result |= META_MOVE_RESIZE_RESULT_RESIZED; + if (flags & META_MOVE_RESIZE_STATE_CHANGED) + *result |= META_MOVE_RESIZE_RESULT_STATE_CHANGED; update_gtk_edge_constraints (window); }