pacho 15/06/28 10:33:10 Added: mutter-3.16.2-size-unredirected.patch Log: surface-actor-x11: Make sure to set a size when unredirected (from 3.16 branch). This fixes clicking on stuff in sloppy / mouse mode focus. (Portage version: 2.2.20/cvs/Linux x86_64, signed Manifest commit with key A188FBD4)
Revision Changes Path 1.1 x11-wm/mutter/files/mutter-3.16.2-size-unredirected.patch file : http://sources.gentoo.org/viewvc.cgi/gentoo-x86/x11-wm/mutter/files/mutter-3.16.2-size-unredirected.patch?rev=1.1&view=markup plain: http://sources.gentoo.org/viewvc.cgi/gentoo-x86/x11-wm/mutter/files/mutter-3.16.2-size-unredirected.patch?rev=1.1&content-type=text/plain Index: mutter-3.16.2-size-unredirected.patch =================================================================== >From 351f444f9d16a90636feb217b15f0f376bf96d85 Mon Sep 17 00:00:00 2001 From: "Jasper St. Pierre" <[email protected]> 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
