b2582bf
From b3b5aa01c63aee1df079e0394b0e6372df1838d0 Mon Sep 17 00:00:00 2001
Florian Müllner d3a743c
From: =?UTF-8?q?Florian=20M=C3=BCllner?= <fmuellner@gnome.org>
Florian Müllner d3a743c
Date: Fri, 12 May 2017 13:40:31 +0200
Florian Müllner d3a743c
Subject: [PATCH] window-actor: Special-case shaped Java windows
Florian Müllner d3a743c
Florian Müllner d3a743c
OpenJDK wrongly assumes that shaping a window implies no shadows.
Florian Müllner d3a743c
They got lucky until commit b975676c changed the fallback case,
Florian Müllner d3a743c
but now their compliance tests are broken. Make them happy again
Florian Müllner d3a743c
by special-casing shaped Java windows.
Florian Müllner d3a743c
---
Florian Müllner c6091e7
 src/compositor/meta-window-actor-x11.c | 8 ++++++++
b2582bf
 src/x11/window-x11-private.h           | 2 ++
b2582bf
 src/x11/window-x11.c                   | 9 +++++++++
b2582bf
 3 files changed, 19 insertions(+)
Florian Müllner d3a743c
Florian Müllner c6091e7
diff --git a/src/compositor/meta-window-actor-x11.c b/src/compositor/meta-window-actor-x11.c
b2582bf
index 19827af331..7d5e46ac75 100644
Florian Müllner c6091e7
--- a/src/compositor/meta-window-actor-x11.c
Florian Müllner c6091e7
+++ b/src/compositor/meta-window-actor-x11.c
b2582bf
@@ -424,6 +424,14 @@ has_shadow (MetaWindowActorX11 *actor_x11)
Florian Müllner c6091e7
    */
Florian Müllner c6091e7
   if (window->has_custom_frame_extents)
Florian Müllner d3a743c
     return FALSE;
Florian Müllner c6091e7
+ 
Florian Müllner d3a743c
+  /*
Florian Müllner d3a743c
+   * OpenJDK wrongly assumes that shaping a window implies no compositor
Florian Müllner d3a743c
+   * shadows; make its compliance tests happy to give it what it wants ...
Florian Müllner d3a743c
+   */
Florian Müllner c6091e7
+  if (g_strcmp0 (window->res_name, "sun-awt-X11-XWindowPeer") == 0 &&
b2582bf
+      meta_window_x11_is_shaped (window))
Florian Müllner d3a743c
+    return FALSE;
Florian Müllner c6091e7
 
Florian Müllner d3a743c
   /*
Florian Müllner d3a743c
    * Generate shadows for all other windows.
b2582bf
diff --git a/src/x11/window-x11-private.h b/src/x11/window-x11-private.h
b2582bf
index c947744ee5..cb862f0d72 100644
b2582bf
--- a/src/x11/window-x11-private.h
b2582bf
+++ b/src/x11/window-x11-private.h
b2582bf
@@ -125,6 +125,8 @@ gboolean meta_window_x11_has_pointer (MetaWindow *window);
b2582bf
 gboolean meta_window_x11_same_application (MetaWindow *window,
b2582bf
                                            MetaWindow *other_window);
b2582bf
 
b2582bf
+gboolean meta_window_x11_is_shaped (MetaWindow *window);
b2582bf
+
b2582bf
 void meta_window_x11_shutdown_group (MetaWindow *window);
b2582bf
 
b2582bf
 META_EXPORT
b2582bf
diff --git a/src/x11/window-x11.c b/src/x11/window-x11.c
b2582bf
index 745c45db18..83cdd2e420 100644
b2582bf
--- a/src/x11/window-x11.c
b2582bf
+++ b/src/x11/window-x11.c
b2582bf
@@ -2585,6 +2585,15 @@ meta_window_x11_update_shape_region (MetaWindow *window)
b2582bf
   meta_window_set_shape_region (window, region);
b2582bf
 }
b2582bf
 
b2582bf
+gboolean
b2582bf
+meta_window_x11_is_shaped (MetaWindow *window)
b2582bf
+{
b2582bf
+  MetaWindowX11 *window_x11 = META_WINDOW_X11 (window);
b2582bf
+  MetaWindowX11Private *priv = meta_window_x11_get_instance_private (window_x11);
b2582bf
+
b2582bf
+  return priv->shape_region != NULL;
b2582bf
+}
b2582bf
+
b2582bf
 /* Generally meta_window_x11_same_application() is a better idea
b2582bf
  * of "sameness", since it handles the case where multiple apps
b2582bf
  * want to look like the same app or the same app wants to look
Florian Müllner d3a743c
-- 
b2582bf
2.43.2
Florian Müllner d3a743c