diff options
Diffstat (limited to 'x11-wm/mutter/files/mutter-3.16.2-size-unredirected.patch')
-rw-r--r-- | x11-wm/mutter/files/mutter-3.16.2-size-unredirected.patch | 151 |
1 files changed, 151 insertions, 0 deletions
diff --git a/x11-wm/mutter/files/mutter-3.16.2-size-unredirected.patch b/x11-wm/mutter/files/mutter-3.16.2-size-unredirected.patch new file mode 100644 index 000000000000..0999ebd582a0 --- /dev/null +++ b/x11-wm/mutter/files/mutter-3.16.2-size-unredirected.patch @@ -0,0 +1,151 @@ +From 351f444f9d16a90636feb217b15f0f376bf96d85 Mon Sep 17 00:00:00 2001 +From: "Jasper St. Pierre" <jstpierre@mecheye.net> +Date: Tue, 23 Jun 2015 16:23:45 -0700 +Subject: surface-actor-x11: Make sure to set a size when unredirected + +When we're unredirected, we don't have a pixmap, and thus our allocation +becomes 0x0. So when events come in, they pass right through our actor, +going to the one underneath in the stack. + +Fix this by having a fallback size on the shaped texture actor when +we're unredirected, causing it to always have a valid allocation. + +This fixes clicking on stuff in sloppy / mouse mode focus. + +diff --git a/src/compositor/meta-shaped-texture-private.h b/src/compositor/meta-shaped-texture-private.h +index 4ee8027..21c6335 100644 +--- a/src/compositor/meta-shaped-texture-private.h ++++ b/src/compositor/meta-shaped-texture-private.h +@@ -32,6 +32,9 @@ + ClutterActor *meta_shaped_texture_new (void); + void meta_shaped_texture_set_texture (MetaShapedTexture *stex, + CoglTexture *texture); ++void meta_shaped_texture_set_fallback_size (MetaShapedTexture *stex, ++ guint fallback_width, ++ guint fallback_height); + gboolean meta_shaped_texture_is_obscured (MetaShapedTexture *self); + + #endif +diff --git a/src/compositor/meta-shaped-texture.c b/src/compositor/meta-shaped-texture.c +index 163c5e6..8701d1b 100644 +--- a/src/compositor/meta-shaped-texture.c ++++ b/src/compositor/meta-shaped-texture.c +@@ -86,6 +86,7 @@ struct _MetaShapedTexturePrivate + cairo_region_t *unobscured_region; + + guint tex_width, tex_height; ++ guint fallback_width, fallback_height; + + guint create_mipmaps : 1; + }; +@@ -136,7 +137,20 @@ set_unobscured_region (MetaShapedTexture *self, + g_clear_pointer (&priv->unobscured_region, (GDestroyNotify) cairo_region_destroy); + if (unobscured_region) + { +- cairo_rectangle_int_t bounds = { 0, 0, priv->tex_width, priv->tex_height }; ++ guint width, height; ++ ++ if (priv->texture) ++ { ++ width = priv->tex_width; ++ height = priv->tex_height; ++ } ++ else ++ { ++ width = priv->fallback_width; ++ height = priv->fallback_height; ++ } ++ ++ cairo_rectangle_int_t bounds = { 0, 0, width, height }; + priv->unobscured_region = cairo_region_copy (unobscured_region); + cairo_region_intersect_rectangle (priv->unobscured_region, &bounds); + } +@@ -499,16 +513,21 @@ meta_shaped_texture_get_preferred_width (ClutterActor *self, + gfloat *natural_width_p) + { + MetaShapedTexturePrivate *priv; ++ guint width; + + g_return_if_fail (META_IS_SHAPED_TEXTURE (self)); + + priv = META_SHAPED_TEXTURE (self)->priv; + +- if (min_width_p) +- *min_width_p = priv->tex_width; ++ if (priv->texture) ++ width = priv->tex_width; ++ else ++ width = priv->fallback_width; + ++ if (min_width_p) ++ *min_width_p = width; + if (natural_width_p) +- *natural_width_p = priv->tex_width; ++ *natural_width_p = width; + } + + static void +@@ -518,16 +537,21 @@ meta_shaped_texture_get_preferred_height (ClutterActor *self, + gfloat *natural_height_p) + { + MetaShapedTexturePrivate *priv; ++ guint height; + + g_return_if_fail (META_IS_SHAPED_TEXTURE (self)); + + priv = META_SHAPED_TEXTURE (self)->priv; + +- if (min_height_p) +- *min_height_p = priv->tex_height; ++ if (priv->texture) ++ height = priv->tex_height; ++ else ++ height = priv->fallback_height; + ++ if (min_height_p) ++ *min_height_p = height; + if (natural_height_p) +- *natural_height_p = priv->tex_height; ++ *natural_height_p = height; + } + + static cairo_region_t * +@@ -860,6 +884,17 @@ meta_shaped_texture_get_image (MetaShapedTexture *stex, + return surface; + } + ++void ++meta_shaped_texture_set_fallback_size (MetaShapedTexture *self, ++ guint fallback_width, ++ guint fallback_height) ++{ ++ MetaShapedTexturePrivate *priv = self->priv; ++ ++ priv->fallback_width = fallback_width; ++ priv->fallback_height = fallback_height; ++} ++ + static void + meta_shaped_texture_cull_out (MetaCullable *cullable, + cairo_region_t *unobscured_region, +diff --git a/src/compositor/meta-surface-actor-x11.c b/src/compositor/meta-surface-actor-x11.c +index 4aa7ecd..b50b8f2 100644 +--- a/src/compositor/meta-surface-actor-x11.c ++++ b/src/compositor/meta-surface-actor-x11.c +@@ -416,6 +416,7 @@ meta_surface_actor_x11_set_size (MetaSurfaceActorX11 *self, + int width, int height) + { + MetaSurfaceActorX11Private *priv = meta_surface_actor_x11_get_instance_private (self); ++ MetaShapedTexture *stex = meta_surface_actor_get_texture (META_SURFACE_ACTOR (self)); + + if (priv->last_width == width && + priv->last_height == height) +@@ -424,4 +425,5 @@ meta_surface_actor_x11_set_size (MetaSurfaceActorX11 *self, + priv->size_changed = TRUE; + priv->last_width = width; + priv->last_height = height; ++ meta_shaped_texture_set_fallback_size (stex, width, height); + } +-- +cgit v0.10.2 + |