Accepting request 439857 from home:dimstar:branches:GNOME:Factory

Update to 3.22.2

OBS-URL: https://build.opensuse.org/request/show/439857
OBS-URL: https://build.opensuse.org/package/show/GNOME:Factory/mutter?expand=0&rev=219
This commit is contained in:
Dominique Leuenberger 2016-11-11 13:40:07 +00:00 committed by Git OBS Bridge
parent fce506ba3c
commit 7a6e0722dd
6 changed files with 29 additions and 323 deletions

View File

@ -1,3 +0,0 @@
version https://git-lfs.github.com/spec/v1
oid sha256:ffba28b955dc1b8a4734020de4ed4dff4afed435f0a059974be9bf3168acf59e
size 3532404

3
mutter-3.22.2.tar.xz Normal file
View File

@ -0,0 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:d59b58356cba1165ef69a98f43e50777fded768860a9b118807c5a47274092a2
size 3533296

View File

@ -1,280 +0,0 @@
From 3183f86aea4e3c1005995cfd928b7d42c16ff39f Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Jonas=20=C3=85dahl?= <jadahl@gmail.com>
Date: Fri, 23 Sep 2016 14:01:34 +0800
Subject: [PATCH] wayland/xdg-shell: Scale positioner coordinates
When the monitor is scaled (i.e. HiDPI scaling) the placement
coordinates are still in unscaled xdg_surface window geometry
coordinate space. Fix this by simply scaling the coordinates by the
monitor scale of the parent toplevel window.
This is inherently racy, but since we won't move the toplevel window
before the popup is placed, and we won't move the window without
unmapping the popup, there is little point in introducing more complex
adaptive scaling, especially when the end goal is to get rid of all
these types of scaling hacks.
https://bugzilla.gnome.org/show_bug.cgi?id=771841
---
src/wayland/meta-wayland-xdg-shell.c | 29 +++++++++++++++++++++--------
1 file changed, 21 insertions(+), 8 deletions(-)
diff --git a/src/wayland/meta-wayland-xdg-shell.c b/src/wayland/meta-wayland-xdg-shell.c
index e9223a9..84bf40d 100644
--- a/src/wayland/meta-wayland-xdg-shell.c
+++ b/src/wayland/meta-wayland-xdg-shell.c
@@ -126,7 +126,8 @@ G_DEFINE_TYPE_WITH_CODE (MetaWaylandXdgPopup,
popup_surface_iface_init));
static MetaPlacementRule
-meta_wayland_xdg_positioner_to_placement (MetaWaylandXdgPositioner *xdg_positioner);
+meta_wayland_xdg_positioner_to_placement (MetaWaylandXdgPositioner *xdg_positioner,
+ MetaWaylandSurface *parent_surface);
static struct wl_resource *
meta_wayland_xdg_surface_get_shell_resource (MetaWaylandXdgSurface *xdg_surface);
@@ -1511,7 +1512,7 @@ xdg_surface_constructor_get_popup (struct wl_client *client,
xdg_positioner = wl_resource_get_user_data (positioner_resource);
xdg_popup->setup.placement_rule =
- meta_wayland_xdg_positioner_to_placement (xdg_positioner);
+ meta_wayland_xdg_positioner_to_placement (xdg_positioner, parent_surface);
xdg_popup->setup.parent_surface = parent_surface;
}
@@ -1560,17 +1561,29 @@ xdg_surface_constructor_destructor (struct wl_resource *resource)
}
static MetaPlacementRule
-meta_wayland_xdg_positioner_to_placement (MetaWaylandXdgPositioner *xdg_positioner)
+meta_wayland_xdg_positioner_to_placement (MetaWaylandXdgPositioner *xdg_positioner,
+ MetaWaylandSurface *parent_surface)
{
+ MetaWindow *parent_window;
+ int monitor_scale;
+
+ parent_window = meta_wayland_surface_get_toplevel_window (parent_surface);
+ monitor_scale = meta_window_wayland_get_main_monitor_scale (parent_window);
+
return (MetaPlacementRule) {
- .anchor_rect = xdg_positioner->anchor_rect,
+ .anchor_rect = (MetaRectangle) {
+ .x = xdg_positioner->anchor_rect.x * monitor_scale,
+ .y = xdg_positioner->anchor_rect.y * monitor_scale,
+ .width = xdg_positioner->anchor_rect.width * monitor_scale,
+ .height = xdg_positioner->anchor_rect.height * monitor_scale,
+ },
.gravity = xdg_positioner->gravity,
.anchor = xdg_positioner->anchor,
.constraint_adjustment = xdg_positioner->constraint_adjustment,
- .offset_x = xdg_positioner->offset_x,
- .offset_y = xdg_positioner->offset_y,
- .width = xdg_positioner->width,
- .height = xdg_positioner->height,
+ .offset_x = xdg_positioner->offset_x * monitor_scale,
+ .offset_y = xdg_positioner->offset_y * monitor_scale,
+ .width = xdg_positioner->width * monitor_scale,
+ .height = xdg_positioner->height * monitor_scale,
};
}
--
2.7.4
From 60315f5a72741d0b6cdbe0ba19d771a922406bbb Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Jonas=20=C3=85dahl?= <jadahl@gmail.com>
Date: Fri, 23 Sep 2016 17:15:56 +0800
Subject: [PATCH] wayland/xdg-popup: Always use monitor of toplevel
Always use the monitor of the toplevel surface's window, so that the
popup menu and the parent will always have the same scale. This fixes
the dimensions sent in the xdg_popup configure event.
https://bugzilla.gnome.org/show_bug.cgi?id=771841
---
src/wayland/meta-wayland-xdg-shell.c | 1 +
src/wayland/meta-window-wayland.c | 24 ++++++++++++++++++------
2 files changed, 19 insertions(+), 6 deletions(-)
diff --git a/src/wayland/meta-wayland-xdg-shell.c b/src/wayland/meta-wayland-xdg-shell.c
index 84bf40d..ac40504 100644
--- a/src/wayland/meta-wayland-xdg-shell.c
+++ b/src/wayland/meta-wayland-xdg-shell.c
@@ -1464,6 +1464,7 @@ xdg_surface_constructor_get_toplevel (struct wl_client *client,
window = meta_window_wayland_new (meta_get_display (), surface);
meta_wayland_surface_set_window (surface, window);
+ meta_window_update_monitor (window, FALSE);
}
static void
diff --git a/src/wayland/meta-window-wayland.c b/src/wayland/meta-window-wayland.c
index 7dd6f42..aa89066 100644
--- a/src/wayland/meta-window-wayland.c
+++ b/src/wayland/meta-window-wayland.c
@@ -352,19 +352,31 @@ scale_rect_size (MetaRectangle *rect,
static void
meta_window_wayland_update_main_monitor (MetaWindow *window)
{
+ MetaWindow *toplevel_window;
const MetaMonitorInfo *from;
const MetaMonitorInfo *to;
const MetaMonitorInfo *scaled_new;
float scale;
MetaRectangle rect;
- /* Require both the current and the new monitor would be the new main monitor,
- * even given the resulting scale the window would end up having. This is
- * needed to avoid jumping back and forth between the new and the old, since
- * changing main monitor may cause the window to be resized so that it no
- * longer have that same new main monitor. */
from = window->monitor;
- to = meta_screen_calculate_monitor_for_window (window->screen, window);
+
+ /* If the window is not a toplevel window (i.e. it's a popup window) just use
+ * the monitor of the toplevel. */
+ toplevel_window = meta_wayland_surface_get_toplevel_window (window->surface);
+ if (toplevel_window != window)
+ {
+ to = toplevel_window->monitor;
+ }
+ else
+ {
+ /* Require both the current and the new monitor would be the new main monitor,
+ * even given the resulting scale the window would end up having. This is
+ * needed to avoid jumping back and forth between the new and the old, since
+ * changing main monitor may cause the window to be resized so that it no
+ * longer have that same new main monitor. */
+ to = meta_screen_calculate_monitor_for_window (window->screen, window);
+ }
if (from == to)
return;
--
2.7.4
From 74274edbd5cdf36d90012fcff9199ccf64cb146f Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Jonas=20=C3=85dahl?= <jadahl@gmail.com>
Date: Fri, 23 Sep 2016 17:18:21 +0800
Subject: [PATCH] wayland/xdg-shell: Scale configure relative popup coordinate
The parent local popup coordinate needs to be scaled according to the
monitor scale it is assigned.
https://bugzilla.gnome.org/show_bug.cgi?id=771841
---
src/wayland/meta-wayland-xdg-shell.c | 6 ++++--
1 file changed, 4 insertions(+), 2 deletions(-)
diff --git a/src/wayland/meta-wayland-xdg-shell.c b/src/wayland/meta-wayland-xdg-shell.c
index ac40504..70d8ee4 100644
--- a/src/wayland/meta-wayland-xdg-shell.c
+++ b/src/wayland/meta-wayland-xdg-shell.c
@@ -874,6 +874,7 @@ xdg_popup_role_configure (MetaWaylandSurfaceRoleShellSurface *shell_surface_role
MetaWaylandXdgPopup *xdg_popup = META_WAYLAND_XDG_POPUP (shell_surface_role);
MetaWaylandXdgSurface *xdg_surface = META_WAYLAND_XDG_SURFACE (xdg_popup);
MetaWindow *parent_window = xdg_popup->parent_surface->window;
+ int monitor_scale;
int x, y;
/* If the parent surface was destroyed, its window will be destroyed
@@ -887,8 +888,9 @@ xdg_popup_role_configure (MetaWaylandSurfaceRoleShellSurface *shell_surface_role
if (!parent_window)
return;
- x = new_x - parent_window->rect.x;
- y = new_y - parent_window->rect.y;
+ monitor_scale = meta_window_wayland_get_main_monitor_scale (parent_window);
+ x = (new_x - parent_window->rect.x) / monitor_scale;
+ y = (new_y - parent_window->rect.y) / monitor_scale;
zxdg_popup_v6_send_configure (xdg_popup->resource,
x, y, new_width, new_height);
meta_wayland_xdg_surface_send_configure (xdg_surface);
--
2.7.4
From c5ef7eb1a8b255dfbad7c32ebde6241dc411fb7d Mon Sep 17 00:00:00 2001
From: Sjoerd Simons <sjoerd.simons@collabora.co.uk>
Date: Fri, 23 Sep 2016 23:09:39 +0200
Subject: [PATCH] wayland/xdg-popup: Force monitor of the top-level
Directly set the monitor of the toplevel window for the popup to avoid
the change not being applied due to later constraints calculation.
Signed-off-by: Sjoerd Simons <sjoerd.simons@collabora.co.uk>
https://bugzilla.gnome.org/show_bug.cgi?id=771841
---
src/wayland/meta-window-wayland.c | 19 +++++++++----------
1 file changed, 9 insertions(+), 10 deletions(-)
diff --git a/src/wayland/meta-window-wayland.c b/src/wayland/meta-window-wayland.c
index aa89066..d85e935 100644
--- a/src/wayland/meta-window-wayland.c
+++ b/src/wayland/meta-window-wayland.c
@@ -366,18 +366,17 @@ meta_window_wayland_update_main_monitor (MetaWindow *window)
toplevel_window = meta_wayland_surface_get_toplevel_window (window->surface);
if (toplevel_window != window)
{
- to = toplevel_window->monitor;
- }
- else
- {
- /* Require both the current and the new monitor would be the new main monitor,
- * even given the resulting scale the window would end up having. This is
- * needed to avoid jumping back and forth between the new and the old, since
- * changing main monitor may cause the window to be resized so that it no
- * longer have that same new main monitor. */
- to = meta_screen_calculate_monitor_for_window (window->screen, window);
+ window->monitor = toplevel_window->monitor;
+ return;
}
+ /* Require both the current and the new monitor would be the new main monitor,
+ * even given the resulting scale the window would end up having. This is
+ * needed to avoid jumping back and forth between the new and the old, since
+ * changing main monitor may cause the window to be resized so that it no
+ * longer have that same new main monitor. */
+ to = meta_screen_calculate_monitor_for_window (window->screen, window);
+
if (from == to)
return;
--
2.9.3
From b7d5bac26acbaee954e4db5fc9032cc8bc899285 Mon Sep 17 00:00:00 2001
From: Sjoerd Simons <sjoerd.simons@collabora.co.uk>
Date: Fri, 23 Sep 2016 23:12:56 +0200
Subject: [PATCH] wayland/xdg-shell: update popup window monitor early
As meta_window_place_with_placement_rule will trigger a configure event
being sent ensure that the popup is placed on the correct monitor first
to ensure the right scale factor is applied.
Signed-off-by: Sjoerd Simons <sjoerd.simons@collabora.co.uk>
https://bugzilla.gnome.org/show_bug.cgi?id=771841
---
src/wayland/meta-wayland-xdg-shell.c | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/src/wayland/meta-wayland-xdg-shell.c b/src/wayland/meta-wayland-xdg-shell.c
index 70d8ee4..b8e7f83 100644
--- a/src/wayland/meta-wayland-xdg-shell.c
+++ b/src/wayland/meta-wayland-xdg-shell.c
@@ -794,8 +794,9 @@ finish_popup_setup (MetaWaylandXdgPopup *xdg_popup)
&xdg_popup->parent_destroy_listener);
window = meta_window_wayland_new (display, surface);
- meta_window_place_with_placement_rule (window, &placement_rule);
meta_wayland_surface_set_window (surface, window);
+ meta_window_update_monitor (window, FALSE);
+ meta_window_place_with_placement_rule (window, &placement_rule);
if (seat)
{
--
2.9.3

View File

@ -1,32 +0,0 @@
From 31356cec7272d266206ff56669a2d86d689615fe Mon Sep 17 00:00:00 2001
From: Rui Matos <tiagomatos@gmail.com>
Date: Wed, 21 Sep 2016 15:06:08 +0200
Subject: [PATCH] clutter/stage: Fix framebuffer capture origin offset (again)
Commit 5fbb4793017b1891f0de4720a9793e8cfc1c8483 was wrong too. What we
really want to do here is getting view relative coordinates given the
view's and the rectangle's global coordinates so we need to subtract
the view's origin from the rectangle's.
https://bugzilla.gnome.org/show_bug.cgi?id=771502
---
clutter/clutter/clutter-stage.c | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/clutter/clutter/clutter-stage.c b/clutter/clutter/clutter-stage.c
index 1d2c0bc..21968b9 100644
--- a/clutter/clutter/clutter-stage.c
+++ b/clutter/clutter/clutter-stage.c
@@ -4712,8 +4712,8 @@ capture_view (ClutterStage *stage,
clutter_stage_view_get_layout (view, &view_layout);
cogl_framebuffer_read_pixels_into_bitmap (framebuffer,
- view_layout.x + rect->x,
- view_layout.y + rect->y,
+ rect->x - view_layout.x,
+ rect->y - view_layout.y,
COGL_READ_PIXELS_COLOR_BUFFER,
bitmap);
--
2.7.4

View File

@ -1,3 +1,27 @@
-------------------------------------------------------------------
Fri Nov 11 09:58:32 UTC 2016 - dimstar@opensuse.org
- Update to version 3.22.2:
+ Really fix framebuffer capture origin offset (bgo#771502).
+ Fix session going into idle mode immediately on startup
(bgo#772839).
+ Fix mirror mode with stage views (bgo#773115).
+ Improve pointer constraints support (bgo#771859).
+ Stack docks below other windows on fullscreen monitors
(bgo#772937).
+ Fix switching between two finger- and edge scrolling on wayland
(bgo#771744).
+ Fix popup grabs blocking screen lock on wayland (bgo#771235).
+ Fix various crashes on wayland (bgo#771646, bgo#771858).
+ Fix various placement issues on wayland (bgo#768039,
bgo#771841, bgo#773141, bgo#772729).
+ Misc. bug fixes: bgo#771019, bgo#773116, bgo#772914,
bgo#773210.
+ Updated translations.
- Drop upstream fixed patches:
+ mutter-screeenshot-coords.patch
+ mutter-scale-positioner-coordinates.patch
-------------------------------------------------------------------
Fri Nov 4 21:38:00 UTC 2016 - jengelh@inai.de

View File

@ -25,7 +25,7 @@
%global __provides_exclude_from ^%{_libdir}/mutter/.*.typelib$
Name: mutter
Version: 3.22.1
Version: 3.22.2
Release: 0
Summary: Window and compositing manager based on Clutter
License: GPL-2.0+
@ -38,10 +38,6 @@ Patch1: mutter-bell.patch
Patch2: relax-some-constraints-on-CSD-windows-in-sle-classic.patch
# PATCH-FIX-UPSTREAM mutter-bsc984738-grab-display.patch bsc#984738 bgo#769387 hpj@suse.com -- Revert a upstream commit to avoid X11 race condition that results in wrong dialog sizes.
Patch3: mutter-bsc984738-grab-display.patch
# PATCH-FIX-UPSTREAM mutter-screeenshot-coords.patch bgo#771502 dimstar@opensuse.org -- Yet another fix for area-screenshots
Patch4: mutter-screeenshot-coords.patch
# PATCH-FIX-UPSTREAM mutter-scale-positioner-coordinates.patch bgo#771841 zaitor@opensuse.org -- wayland/xdg-shell: Scale positioner coordinates, fix hidpi menus.
Patch5: mutter-scale-positioner-coordinates.patch
# PATCH-FIX-UPSTREAM mutter-fix-startup.patch bgo#768531 zaitor@opensuse.org -- Fix slow startup notification on wayland
Patch6: mutter-fix-startup.patch
BuildRequires: fdupes
@ -100,9 +96,9 @@ from Metacity.
%package -n libmutter0
Summary: Window and compositing manager based on Clutter
Group: System/Libraries
# we need the gsettings schema; hopefully, they'll stay backwards compatible
# (since we can't require = version, to not break SLPP)
Group: System/Libraries
Requires: %{name}-data >= %{version}
%description -n libmutter0
@ -142,8 +138,6 @@ translation-update-upstream
%patch2 -p1
%patch3 -p1
%endif
%patch4 -p1
%patch5 -p1
%patch6 -p1
%build