--- old/src/java.desktop/unix/native/libawt_xawt/awt/awt_GraphicsEnv.c 2016-08-30 16:05:13.773994793 +0300 +++ new/src/java.desktop/unix/native/libawt_xawt/awt/awt_GraphicsEnv.c 2016-08-30 16:05:13.637994797 +0300 @@ -2181,7 +2181,8 @@ JNIEXPORT jdouble JNICALL Java_sun_awt_X11GraphicsDevice_getNativeScaleFactor (JNIEnv *env, jobject this, jint screen) { - char *name = get_output_screen_name(env, screen); + // in case of Xinerama individual screen scales are not supported + char *name = get_output_screen_name(env, usingXinerama ? 0 : screen); double scale = getNativeScaleFactor(name); if (name) { free(name); --- old/src/java.desktop/unix/native/common/awt/systemscale/systemScale.c 2016-08-30 16:05:14.077994782 +0300 +++ new/src/java.desktop/unix/native/common/awt/systemscale/systemScale.c 2016-08-30 16:05:13.941994787 +0300 @@ -148,7 +148,7 @@ void *scale = fp_g_variant_get_child_value(entry, 1); if (screen && scale) { char *name = fp_g_variant_get_string(screen, NULL); - if (name && strcmp(name, output_name)) { + if (name && !strcmp(name, output_name)) { result = fp_g_variant_get_int32(scale) / 8.; } fp_g_variant_unref(screen); --- old/src/java.desktop/unix/classes/sun/awt/X11GraphicsDevice.java 2016-08-30 16:05:14.373994771 +0300 +++ new/src/java.desktop/unix/classes/sun/awt/X11GraphicsDevice.java 2016-08-30 16:05:14.237994776 +0300 @@ -63,7 +63,7 @@ private SunDisplayChanger topLevels = new SunDisplayChanger(); private DisplayMode origDisplayMode; private boolean shutdownHookRegistered; - private final int scale; + private int scale; public X11GraphicsDevice(int screennum) { this.screen = screennum; @@ -488,6 +488,9 @@ * X11GraphicsEnvironment when the display mode has been changed. */ public synchronized void displayChanged() { + if (SunGraphicsEnvironment.isUIScaleEnabled()) { + scale = initScaleFactor(); + } // On X11 the visuals do not change, and therefore we don't need // to reset the defaultConfig, config, doubleBufferVisuals, // neither do we need to reset the native data. --- old/src/java.desktop/unix/classes/sun/awt/X11/XToolkit.java 2016-08-30 16:05:14.669994761 +0300 +++ new/src/java.desktop/unix/classes/sun/awt/X11/XToolkit.java 2016-08-30 16:05:14.533994766 +0300 @@ -1570,6 +1570,10 @@ Integer.valueOf(getMultiClickTime())); desktopProperties.put("awt.mouse.numButtons", Integer.valueOf(getNumberOfButtons())); + if(SunGraphicsEnvironment.isUIScaleEnabled()) { + addPropertyChangeListener("gnome.Xft/DPI", evt -> + localEnv.displayChanged()); + } } }