Bug#771533: unblock: mutter/3.14.2-1
Package: release.debian.org
Severity: normal
User: release.debian.org@packages.debian.org
Usertags: unblock
Hi,
please unblock mutter for the following changes:
mutter (3.14.2-1) unstable; urgency=medium
* New upstream bugfix release.
* 10_window-actor_unredirect.patch: patch from upstream git. Fix crash
when closing a window.
* 11_black_background.patch: patch from upstream git. Don’t set a
black background when switching from the display manager.
Attaching upstream changes between 3.14.1 and 3.14.2.
unblock mutter/3.14.2-1
Thanks,
--
.''`. Josselin Mouette
: :' :
`. `'
`-
Index: debian/changelog
===================================================================
--- debian/changelog (révision 43963)
+++ debian/changelog (révision 43964)
@@ -1,3 +1,13 @@
+mutter (3.14.2-1) unstable; urgency=medium
+
+ * New upstream bugfix release.
+ * 10_window-actor_unredirect.patch: patch from upstream git. Fix crash
+ when closing a window.
+ * 11_black_background.patch: patch from upstream git. Don’t set a
+ black background when switching from the display manager.
+
+ -- Josselin Mouette <joss@debian.org> Sun, 30 Nov 2014 15:05:14 +0100
+
mutter (3.14.1-2) unstable; urgency=medium
* gir1.2-mutter-3.0: tighten dependency on libmutter0e by making
Index: debian/patches/10_window-actor_unredirect.patch
===================================================================
--- debian/patches/10_window-actor_unredirect.patch (révision 0)
+++ debian/patches/10_window-actor_unredirect.patch (révision 43964)
@@ -0,0 +1,27 @@
+From 2e7b9e0dfed8ca637cf70bc160489610b93234fd Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Florian=20M=C3=BCllner?= <fmuellner@gnome.org>
+Date: Fri, 14 Nov 2014 13:23:15 +0100
+Subject: window-actor: Do not request unredirection when destroyed
+
+WindowActors can outlive their corresponding window to animate unmap.
+Unredirecting the actor does not make sense in that case, so make
+sure to not request it.
+
+https://bugzilla.gnome.org/show_bug.cgi?id=740133
+
+diff --git a/src/compositor/meta-window-actor.c b/src/compositor/meta-window-actor.c
+index 39864d6..eb21c46 100644
+--- a/src/compositor/meta-window-actor.c
++++ b/src/compositor/meta-window-actor.c
+@@ -1155,7 +1155,7 @@ gboolean
+ meta_window_actor_should_unredirect (MetaWindowActor *self)
+ {
+ MetaWindowActorPrivate *priv = self->priv;
+- if (priv->surface)
++ if (!meta_window_actor_is_destroyed (self) && priv->surface)
+ return meta_surface_actor_should_unredirect (priv->surface);
+ else
+ return FALSE;
+--
+cgit v0.10.1
+
Index: debian/patches/11_black_background.patch
===================================================================
--- debian/patches/11_black_background.patch (révision 0)
+++ debian/patches/11_black_background.patch (révision 43964)
@@ -0,0 +1,44 @@
+From 6d3e64226d43a55f4554e1dcacaf56d81d3dae86 Mon Sep 17 00:00:00 2001
+From: Ray Strode <rstrode@redhat.com>
+Date: Thu, 20 Nov 2014 14:40:19 -0500
+Subject: Revert "screen: Set a black background for testing purposes"
+
+This reverts commit ec8ed1dbb04ce8169c0a38ddf066d5565117c587.
+
+1) It turns out to add a momentary flicker from the transition
+between the login screen and user session
+2) It actually isn't needed anymore since bug 733026
+
+https://bugzilla.gnome.org/show_bug.cgi?id=740377
+
+diff --git a/src/core/screen.c b/src/core/screen.c
+index dbf3f60..b26137e 100644
+--- a/src/core/screen.c
++++ b/src/core/screen.c
+@@ -496,15 +496,6 @@ create_guard_window (Display *xdisplay, MetaScreen *screen)
+ return guard_window;
+ }
+
+-/* Set a black background on the root window so that we don't
+- * see confusing old copies of old windows when debugging
+- * and testing. */
+-static void
+-meta_screen_set_background (MetaScreen *screen)
+-{
+- XSetWindowBackground (screen->display->xdisplay, screen->xroot, 0x00000000);
+-}
+-
+ MetaScreen*
+ meta_screen_new (MetaDisplay *display,
+ int number,
+@@ -709,7 +700,6 @@ meta_screen_new (MetaDisplay *display,
+ reload_monitor_infos (screen);
+
+ meta_screen_set_cursor (screen, META_CURSOR_DEFAULT);
+- meta_screen_set_background (screen);
+
+ /* Handle creating a no_focus_window for this screen */
+ screen->no_focus_window =
+--
+cgit v0.10.1
+
Index: debian/patches/series
===================================================================
--- debian/patches/series (révision 43963)
+++ debian/patches/series (révision 43964)
@@ -1 +1,3 @@
01_Wcast-align.patch
+10_window-actor_unredirect.patch
+11_black_background.patch
Index: debian/control
===================================================================
--- debian/control (révision 43963)
+++ debian/control (révision 43964)
@@ -6,7 +6,7 @@
Section: x11
Priority: optional
Maintainer: Debian GNOME Maintainers <pkg-gnome-maintainers@lists.alioth.debian.org>
-Uploaders: Andreas Henriksson <andreas@fatal.se>, Michael Biebl <biebl@debian.org>, Sjoerd Simons <sjoerd@debian.org>
+Uploaders: Andreas Henriksson <andreas@fatal.se>, Josselin Mouette <joss@debian.org>, Michael Biebl <biebl@debian.org>, Sjoerd Simons <sjoerd@debian.org>
Build-Depends: cdbs (>= 0.4.90),
debhelper (>= 9),
gnome-pkg-tools (>= 0.10),
diff --git a/NEWS b/NEWS
index 38c4dd5..73d9cac 100644
--- a/NEWS
+++ b/NEWS
@@ -1,3 +1,21 @@
+3.14.2
+======
+* Prevent crash applying monitor config for a closed lid [Rui; #739450]
+* Misc. fixes [Rui, Jonathon, Jasper; #738630]
+
+Contributors:
+ Jonathon Jongsma, Rui Matos, Jasper St. Pierre
+
+3.14.1.5
+========
+* Fix wayland hiDPI regressions [Adel; #739161]
+
+Contributors:
+ Adel Gadllah, Florian Müllner, Jasper St. Pierre
+
+Translations:
+ Dušan Kazik [sk]
+
3.14.1
======
* Fix move-titlebar-onscreen function [Florian; #736915]
diff --git a/configure.ac b/configure.ac
index df4dce1..0870afa 100644
--- a/configure.ac
+++ b/configure.ac
@@ -2,7 +2,7 @@ AC_PREREQ(2.62)
m4_define([mutter_major_version], [3])
m4_define([mutter_minor_version], [14])
-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])
@@ -78,7 +78,6 @@ MUTTER_PC_MODULES="
gsettings-desktop-schemas >= 3.7.3
$CLUTTER_PACKAGE >= 1.19.5
cogl-1.0 >= 1.17.1
- gbm >= 10.3
upower-glib >= 0.99.0
gnome-desktop-3.0
xcomposite >= 0.2
@@ -201,7 +200,7 @@ AC_SUBST(XWAYLAND_PATH)
PKG_CHECK_MODULES(MUTTER, $MUTTER_PC_MODULES)
-PKG_CHECK_MODULES(MUTTER_NATIVE_BACKEND, [clutter-egl-1.0 libdrm libsystemd libinput], [have_native_backend=yes], [have_native_backend=no])
+PKG_CHECK_MODULES(MUTTER_NATIVE_BACKEND, [clutter-egl-1.0 libdrm libsystemd libinput gbm >= 10.3], [have_native_backend=yes], [have_native_backend=no])
if test $have_native_backend = yes; then
AC_DEFINE([HAVE_NATIVE_BACKEND],[1],[Define if you want to enable the native (KMS) backend based on systemd])
fi
diff --git a/po/sk.po b/po/sk.po
index 8d76c65..2998196 100644
diff --git a/src/backends/meta-cursor-private.h b/src/backends/meta-cursor-private.h
index 09ab992..4ea16e7 100644
--- a/src/backends/meta-cursor-private.h
+++ b/src/backends/meta-cursor-private.h
@@ -29,8 +29,11 @@
typedef struct {
CoglTexture2D *texture;
- struct gbm_bo *bo;
int hot_x, hot_y;
+
+#ifdef HAVE_NATIVE_BACKEND
+ struct gbm_bo *bo;
+#endif
} MetaCursorImage;
struct _MetaCursorReference {
@@ -44,8 +47,10 @@ CoglTexture *meta_cursor_reference_get_cogl_texture (MetaCursorReference *cursor
int *hot_x,
int *hot_y);
+#ifdef HAVE_NATIVE_BACKEND
struct gbm_bo *meta_cursor_reference_get_gbm_bo (MetaCursorReference *cursor,
int *hot_x,
int *hot_y);
+#endif
#endif /* META_CURSOR_PRIVATE_H */
diff --git a/src/backends/meta-cursor.c b/src/backends/meta-cursor.c
index 3695d81..22a8a76 100644
--- a/src/backends/meta-cursor.c
+++ b/src/backends/meta-cursor.c
@@ -56,8 +56,11 @@ static void
meta_cursor_image_free (MetaCursorImage *image)
{
cogl_object_unref (image->texture);
+
+#ifdef HAVE_NATIVE_BACKEND
if (image->bo)
gbm_bo_destroy (image->bo);
+#endif
}
static void
@@ -139,10 +142,10 @@ load_cursor_on_client (MetaCursor cursor)
meta_prefs_get_cursor_size ());
}
+#ifdef HAVE_NATIVE_BACKEND
static void
get_hardware_cursor_size (uint64_t *cursor_width, uint64_t *cursor_height)
{
-#ifdef HAVE_NATIVE_BACKEND
MetaBackend *meta_backend = meta_get_backend ();
MetaCursorRenderer *renderer = meta_backend_get_cursor_renderer (meta_backend);
@@ -151,11 +154,12 @@ get_hardware_cursor_size (uint64_t *cursor_width, uint64_t *cursor_height)
meta_cursor_renderer_native_get_cursor_size (META_CURSOR_RENDERER_NATIVE (renderer), cursor_width, cursor_height);
return;
}
-#endif
g_assert_not_reached ();
}
+#endif
+#ifdef HAVE_NATIVE_BACKEND
static void
meta_cursor_image_load_gbm_buffer (struct gbm_device *gbm,
MetaCursorImage *image,
@@ -193,20 +197,21 @@ meta_cursor_image_load_gbm_buffer (struct gbm_device *gbm,
else
meta_warning ("HW cursor for format %d not supported\n", gbm_format);
}
+#endif
+#ifdef HAVE_NATIVE_BACKEND
static struct gbm_device *
get_gbm_device (void)
{
-#ifdef HAVE_NATIVE_BACKEND
MetaBackend *meta_backend = meta_get_backend ();
MetaCursorRenderer *renderer = meta_backend_get_cursor_renderer (meta_backend);
if (META_IS_CURSOR_RENDERER_NATIVE (renderer))
return meta_cursor_renderer_native_get_gbm_device (META_CURSOR_RENDERER_NATIVE (renderer));
-#endif
-
- return NULL;
+ else
+ return NULL;
}
+#endif
static void
meta_cursor_image_load_from_xcursor_image (MetaCursorImage *image,
@@ -214,16 +219,13 @@ meta_cursor_image_load_from_xcursor_image (MetaCursorImage *image,
{
uint width, height, rowstride;
CoglPixelFormat cogl_format;
- uint32_t gbm_format;
ClutterBackend *clutter_backend;
CoglContext *cogl_context;
- struct gbm_device *gbm;
width = xc_image->width;
height = xc_image->height;
rowstride = width * 4;
- gbm_format = GBM_FORMAT_ARGB8888;
#if G_BYTE_ORDER == G_LITTLE_ENDIAN
cogl_format = COGL_PIXEL_FORMAT_BGRA_8888;
#else
@@ -242,13 +244,15 @@ meta_cursor_image_load_from_xcursor_image (MetaCursorImage *image,
(uint8_t *) xc_image->pixels,
NULL);
- gbm = get_gbm_device ();
+#ifdef HAVE_NATIVE_BACKEND
+ struct gbm_device *gbm = get_gbm_device ();
if (gbm)
meta_cursor_image_load_gbm_buffer (gbm,
image,
(uint8_t *) xc_image->pixels,
width, height, rowstride,
- gbm_format);
+ GBM_FORMAT_ARGB8888);
+#endif
}
MetaCursorReference *
@@ -277,14 +281,8 @@ meta_cursor_image_load_from_buffer (MetaCursorImage *image,
int hot_x,
int hot_y)
{
- struct gbm_device *gbm = get_gbm_device ();
-
ClutterBackend *backend;
CoglContext *cogl_context;
- struct wl_shm_buffer *shm_buffer;
- uint32_t gbm_format;
- uint64_t cursor_width, cursor_height;
- uint width, height;
image->hot_x = hot_x;
image->hot_y = hot_y;
@@ -294,13 +292,19 @@ meta_cursor_image_load_from_buffer (MetaCursorImage *image,
image->texture = cogl_wayland_texture_2d_new_from_buffer (cogl_context, buffer, NULL);
- width = cogl_texture_get_width (COGL_TEXTURE (image->texture));
- height = cogl_texture_get_height (COGL_TEXTURE (image->texture));
-
- shm_buffer = wl_shm_buffer_get (buffer);
- if (shm_buffer)
+#ifdef HAVE_NATIVE_BACKEND
+ struct gbm_device *gbm = get_gbm_device ();
+ if (gbm)
{
- if (gbm)
+ uint32_t gbm_format;
+ uint64_t cursor_width, cursor_height;
+ uint width, height;
+
+ width = cogl_texture_get_width (COGL_TEXTURE (image->texture));
+ height = cogl_texture_get_height (COGL_TEXTURE (image->texture));
+
+ struct wl_shm_buffer *shm_buffer = wl_shm_buffer_get (buffer);
+ if (shm_buffer)
{
int rowstride = wl_shm_buffer_get_stride (shm_buffer);
@@ -332,10 +336,7 @@ meta_cursor_image_load_from_buffer (MetaCursorImage *image,
width, height, rowstride,
gbm_format);
}
- }
- else
- {
- if (gbm)
+ else
{
/* HW cursors have a predefined size (at least 64x64), which usually is bigger than cursor theme
size, so themed cursors must be padded with transparent pixels to fill the
@@ -356,6 +357,7 @@ meta_cursor_image_load_from_buffer (MetaCursorImage *image,
meta_warning ("Importing HW cursor from wl_buffer failed\n");
}
}
+#endif
}
MetaCursorReference *
@@ -385,6 +387,7 @@ meta_cursor_reference_get_cogl_texture (MetaCursorReference *cursor,
return COGL_TEXTURE (cursor->image.texture);
}
+#ifdef HAVE_NATIVE_BACKEND
struct gbm_bo *
meta_cursor_reference_get_gbm_bo (MetaCursorReference *cursor,
int *hot_x,
@@ -396,6 +399,7 @@ meta_cursor_reference_get_gbm_bo (MetaCursorReference *cursor,
*hot_y = cursor->image.hot_y;
return cursor->image.bo;
}
+#endif
MetaCursor
meta_cursor_reference_get_meta_cursor (MetaCursorReference *cursor)
diff --git a/src/backends/meta-monitor-config.c b/src/backends/meta-monitor-config.c
index c97505d..399e9f0 100644
--- a/src/backends/meta-monitor-config.c
+++ b/src/backends/meta-monitor-config.c
@@ -797,27 +797,6 @@ make_config_key (MetaConfiguration *key,
}
gboolean
-meta_monitor_config_match_current (MetaMonitorConfig *self,
- MetaMonitorManager *manager)
-{
- MetaOutput *outputs;
- unsigned n_outputs;
- MetaConfiguration key;
- gboolean ok;
-
- if (self->current == NULL)
- return FALSE;
-
- outputs = meta_monitor_manager_get_outputs (manager, &n_outputs);
-
- make_config_key (&key, outputs, n_outputs, -1);
- ok = config_equal (&key, self->current);
-
- config_clear (&key);
- return ok;
-}
-
-gboolean
meta_monitor_manager_has_hotplug_mode_update (MetaMonitorManager *manager)
{
MetaOutput *outputs;
@@ -945,6 +924,19 @@ laptop_display_is_on (MetaConfiguration *config)
return FALSE;
}
+static gboolean
+multiple_outputs_are_enabled (MetaConfiguration *config)
+{
+ unsigned int i, enabled;
+
+ enabled = 0;
+ for (i = 0; i < config->n_outputs; i++)
+ if (config->outputs[i].enabled)
+ enabled++;
+
+ return enabled > 1;
+}
+
static MetaConfiguration *
make_laptop_lid_config (MetaConfiguration *reference)
{
@@ -954,7 +946,7 @@ make_laptop_lid_config (MetaConfiguration *reference)
int x_after, y_after;
int x_offset, y_offset;
- g_assert (reference->n_outputs > 1);
+ g_assert (multiple_outputs_are_enabled (reference));
new = g_slice_new0 (MetaConfiguration);
new->n_outputs = reference->n_outputs;
@@ -1025,7 +1017,7 @@ meta_monitor_config_apply_stored (MetaMonitorConfig *self,
if (stored)
{
if (self->lid_is_closed &&
- stored->n_outputs > 1 &&
+ multiple_outputs_are_enabled (stored) &&
laptop_display_is_on (stored))
{
if (apply_configuration (self, make_laptop_lid_config (stored),
@@ -1287,7 +1279,7 @@ meta_monitor_config_make_default (MetaMonitorConfig *self,
if (default_config != NULL)
{
if (self->lid_is_closed &&
- default_config->n_outputs > 1 &&
+ multiple_outputs_are_enabled (default_config) &&
laptop_display_is_on (default_config))
{
ok = apply_configuration (self, make_laptop_lid_config (default_config),
@@ -1378,7 +1370,7 @@ turn_off_laptop_display (MetaMonitorConfig *self,
{
MetaConfiguration *new;
- if (self->current->n_outputs == 1)
+ if (!multiple_outputs_are_enabled (self->current))
return;
new = make_laptop_lid_config (self->current);
diff --git a/src/backends/meta-monitor-config.h b/src/backends/meta-monitor-config.h
index 8401569..5599b6a 100644
--- a/src/backends/meta-monitor-config.h
+++ b/src/backends/meta-monitor-config.h
@@ -36,9 +36,6 @@ GType meta_monitor_config_get_type (void) G_GNUC_CONST;
MetaMonitorConfig *meta_monitor_config_new (void);
-gboolean meta_monitor_config_match_current (MetaMonitorConfig *config,
- MetaMonitorManager *manager);
-
gboolean meta_monitor_config_apply_stored (MetaMonitorConfig *config,
MetaMonitorManager *manager);
diff --git a/src/backends/x11/meta-monitor-manager-xrandr.c b/src/backends/x11/meta-monitor-manager-xrandr.c
index 9555007..a8ac467 100644
--- a/src/backends/x11/meta-monitor-manager-xrandr.c
+++ b/src/backends/x11/meta-monitor-manager-xrandr.c
@@ -141,6 +141,30 @@ meta_monitor_transform_from_xrandr_all (Rotation rotation)
}
static gboolean
+output_get_property_exists (MetaMonitorManagerXrandr *manager_xrandr,
+ MetaOutput *output, const char *propname)
+{
+ gboolean exists = FALSE;
+ Atom atom, actual_type;
+ int actual_format;
+ unsigned long nitems, bytes_after;
+ unsigned char *buffer;
+
+ atom = XInternAtom (manager_xrandr->xdisplay, propname, False);
+ XRRGetOutputProperty (manager_xrandr->xdisplay,
+ (XID)output->winsys_id,
+ atom,
+ 0, G_MAXLONG, False, False, AnyPropertyType,
+ &actual_type, &actual_format,
+ &nitems, &bytes_after, &buffer);
+
+ exists = (actual_type != None);
+
+ XFree (buffer);
+ return exists;
+}
+
+static gboolean
output_get_boolean_property (MetaMonitorManagerXrandr *manager_xrandr,
MetaOutput *output, const char *propname)
{
@@ -330,7 +354,7 @@ static gboolean
output_get_hotplug_mode_update (MetaMonitorManagerXrandr *manager_xrandr,
MetaOutput *output)
{
- return output_get_boolean_property (manager_xrandr, output, "hotplug_mode_update");
+ return output_get_property_exists (manager_xrandr, output, "hotplug_mode_update");
}
static char *
@@ -1097,7 +1121,7 @@ meta_monitor_manager_xrandr_handle_xevent (MetaMonitorManagerXrandr *manager_xra
/* If this is the X server telling us we set a new configuration,
* we can simply short-cut to rebuilding our logical configuration.
*/
- if (new_config || meta_monitor_config_match_current (manager->config, manager))
+ if (new_config)
{
meta_monitor_manager_xrandr_rebuild_derived (manager);
goto out;
diff --git a/src/core/display.c b/src/core/display.c
index 4669593..185452b 100644
--- a/src/core/display.c
+++ b/src/core/display.c
@@ -1965,7 +1965,7 @@ meta_display_end_grab_op (MetaDisplay *display,
* beginning of the grab_op.
*/
if (!meta_prefs_get_raise_on_click () &&
- display->grab_threshold_movement_reached)
+ !display->grab_threshold_movement_reached)
meta_window_raise (display->grab_window);
meta_window_grab_op_ended (grab_window, grab_op);
diff --git a/src/core/screen.c b/src/core/screen.c
index 86446e4..dbf3f60 100644
--- a/src/core/screen.c
+++ b/src/core/screen.c
@@ -3022,7 +3022,6 @@ check_fullscreen_func (gpointer data)
{
MetaScreen *screen = data;
MetaWindow *window;
- GSList *tmp;
GSList *fullscreen_monitors = NULL;
GSList *obscured_monitors = NULL;
gboolean in_fullscreen_changed = FALSE;
diff --git a/src/wayland/meta-wayland-surface.c b/src/wayland/meta-wayland-surface.c
index c61598b..68fdb82 100644
--- a/src/wayland/meta-wayland-surface.c
+++ b/src/wayland/meta-wayland-surface.c
@@ -393,10 +393,7 @@ commit_pending_state (MetaWaylandSurface *surface,
}
if (pending->scale > 0)
- {
- surface->scale = pending->scale;
- meta_surface_actor_wayland_scale_texture (META_SURFACE_ACTOR_WAYLAND (surface->surface_actor));
- }
+ surface->scale = pending->scale;
if (!cairo_region_is_empty (pending->damage))
surface_process_damage (surface, pending->damage);
@@ -411,10 +408,14 @@ commit_pending_state (MetaWaylandSurface *surface,
}
if (pending->input_region)
{
- pending->input_region = scale_region (pending->input_region, surface->scale);
+ pending->input_region = scale_region (pending->input_region,
+ meta_surface_actor_wayland_get_scale (META_SURFACE_ACTOR_WAYLAND (surface->surface_actor)));
meta_surface_actor_set_input_region (surface->surface_actor, pending->input_region);
}
+ /* scale surface texture */
+ meta_surface_actor_wayland_scale_texture (META_SURFACE_ACTOR_WAYLAND (surface->surface_actor));
+
/* wl_surface.frame */
wl_list_insert_list (&compositor->frame_callbacks, &pending->frame_callback_list);
wl_list_init (&pending->frame_callback_list);
Reply to: