Mercurial > hg > release > icedtea6-1.13
view patches/openjdk/8150954-pr2868-composite_desktop.patch @ 3245:17669a12c966
New backports for issues to be fixed in 1.13.11.
S6863746, PR2951: javap should not scan ct.sym by default
S8071705, PR2820, RH1182694: Java application menu misbehaves when running multiple screen stacked vertically
S8150954, PR2868, RH1176206: AWT Robot not compatible with GNOME Shell
PR2890: OpenJDK should check for system cacerts database (e.g. /etc/pki/java/cacerts)
2016-05-03 Andrew John Hughes <gnu.andrew@member.fsf.org>
* Makefile.am:
(ICEDTEA_PATCHES): Add new patches.
* NEWS: Updated.
* patches/openjdk/6307603-xrender-01.patch:
Regenerated after application of 8150954 / PR2868.
* patches/openjdk/6863746-pr2951-no_ct.sym_in_javap.patch,
* patches/openjdk/8071705-pr2820-menu_misbehaviour.patch,
* patches/openjdk/8150954-pr2868-composite_desktop.patch,
* patches/pr2890-system_cacerts.patch:
New backports for issues to be fixed in 1.13.11.
author | Andrew John Hughes <gnu.andrew@redhat.com> |
---|---|
date | Wed, 04 May 2016 02:51:07 +0100 |
parents | |
children |
line wrap: on
line source
# HG changeset patch # User andrew # Date 1458776818 0 # Wed Mar 23 23:46:58 2016 +0000 # Node ID a8a1f3433cf6221d727d500514d6ec593ad7ac9c # Parent c850c5110affb0dc26cf147af79316a70f891b31 8150954, PR2868, RH1176206: AWT Robot not compatible with GNOME Shell Summary: Use the overlay window rather than the root window when on a composite display. diff -Nru openjdk.orig/jdk/make/sun/xawt/Makefile openjdk/jdk/make/sun/xawt/Makefile --- openjdk.orig/jdk/make/sun/xawt/Makefile 2016-01-20 01:42:04.000000000 +0000 +++ openjdk/jdk/make/sun/xawt/Makefile 2016-05-03 22:01:06.150486940 +0100 @@ -87,7 +87,7 @@ vpath %.c $(PLATFORM_SRC)/native/sun/java2d/opengl vpath %.c $(PLATFORM_SRC)/native/sun/java2d/x11 -OTHER_LDLIBS = $(LIBM) -lawt -lXext -lX11 -ldl \ +OTHER_LDLIBS = $(LIBM) -lawt -lXext -lX11 -lXcomposite -ldl \ $(LDFLAGS_COMMON) $(AWT_RUNPATH) $(OTHER_LDFLAGS) -lXtst -lXi ifeq ($(PLATFORM), solaris) diff -Nru openjdk.orig/jdk/src/solaris/native/sun/awt/awt_Robot.c openjdk/jdk/src/solaris/native/sun/awt/awt_Robot.c --- openjdk.orig/jdk/src/solaris/native/sun/awt/awt_Robot.c 2016-05-03 21:56:41.430889964 +0100 +++ openjdk/jdk/src/solaris/native/sun/awt/awt_Robot.c 2016-05-03 22:01:48.157788289 +0100 @@ -39,6 +39,7 @@ #include <X11/extensions/XTest.h> #include <X11/extensions/XInput.h> #include <X11/extensions/XI.h> +#include <X11/extensions/Xcomposite.h> #include <jni.h> #include <sizecalc.h> #include "robot_common.h" @@ -131,6 +132,33 @@ } } +static Bool hasXCompositeOverlayExtension(Display *display) { + + int xoverlay = False; + int eventBase, errorBase; + if (XCompositeQueryExtension(display, &eventBase, &errorBase)) { + int major = 0; + int minor = 0; + + XCompositeQueryVersion(display, &major, &minor); + if (major > 0 || minor >= 3) + xoverlay = True; + } + + return xoverlay; +} + +static jboolean isXCompositeDisplay(Display *display, int screenNumber) { + + char NET_WM_CM_Sn[25]; + snprintf(NET_WM_CM_Sn, sizeof(NET_WM_CM_Sn), "_NET_WM_CM_S%d\0", screenNumber); + + Atom managerSelection = XInternAtom(display, NET_WM_CM_Sn, 0); + Window owner = XGetSelectionOwner(display, managerSelection); + + return owner != 0; +} + static XImage *getWindowImage(Display * display, Window window, int32_t x, int32_t y, int32_t w, int32_t h) { @@ -258,6 +286,12 @@ DASSERT(adata != NULL); rootWindow = XRootWindow(awt_display, adata->awt_visInfo.screen); + if (isXCompositeDisplay(awt_display, adata->awt_visInfo.screen) && + hasXCompositeOverlayExtension(awt_display)) + { + rootWindow = XCompositeGetOverlayWindow(awt_display, rootWindow); + } + image = getWindowImage(awt_display, rootWindow, x, y, width, height); /* Array to use to crunch around the pixel values */