< prev index next >

src/java.desktop/unix/classes/sun/awt/UNIXToolkit.java

Print this page

        

*** 1,7 **** /* ! * Copyright (c) 2004, 2015, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License version 2 only, as * published by the Free Software Foundation. Oracle designates this --- 1,7 ---- /* ! * Copyright (c) 2004, 2016, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License version 2 only, as * published by the Free Software Foundation. Oracle designates this
*** 27,49 **** --- 27,54 ---- import java.awt.RenderingHints; import static java.awt.RenderingHints.*; import java.awt.color.ColorSpace; import java.awt.image.*; import java.security.AccessController; + import java.security.PrivilegedAction; + import sun.security.action.GetIntegerAction; import com.sun.java.swing.plaf.gtk.GTKConstants.TextDirection; import sun.java2d.opengl.OGLRenderQueue; + import sun.security.action.GetPropertyAction; public abstract class UNIXToolkit extends SunToolkit { /** All calls into GTK should be synchronized on this lock */ public static final Object GTK_LOCK = new Object(); private static final int[] BAND_OFFSETS = { 0, 1, 2 }; private static final int[] BAND_OFFSETS_ALPHA = { 0, 1, 2, 3 }; private static final int DEFAULT_DATATRANSFER_TIMEOUT = 10000; + public enum GtkVersions {ANY, GTK1, GTK2, GTK3}; + private Boolean nativeGTKAvailable; private Boolean nativeGTKLoaded; private BufferedImage tmpImage = null; public static int getDatatransferTimeout() {
*** 77,87 **** // We've already checked the availability of the native GTK // libraries, so just return the status of that attempt. return nativeGTKAvailable; } else { ! boolean success = check_gtk(); nativeGTKAvailable = success; return success; } } } --- 82,92 ---- // We've already checked the availability of the native GTK // libraries, so just return the status of that attempt. return nativeGTKAvailable; } else { ! boolean success = check_gtk(getEnabledGtkVersion().ordinal()); nativeGTKAvailable = success; return success; } } }
*** 95,105 **** * lightweight boolean check, no native calls required). */ public boolean loadGTK() { synchronized (GTK_LOCK) { if (nativeGTKLoaded == null) { ! nativeGTKLoaded = load_gtk(); } } return nativeGTKLoaded; } --- 100,111 ---- * lightweight boolean check, no native calls required). */ public boolean loadGTK() { synchronized (GTK_LOCK) { if (nativeGTKLoaded == null) { ! nativeGTKLoaded = load_gtk(getEnabledGtkVersion().ordinal(), ! isGtkVerbose()); } } return nativeGTKLoaded; }
*** 239,256 **** // Set the local image so we can return it later from // getStockIcon(). tmpImage = new BufferedImage(colorModel, raster, false, null); } ! private static native boolean check_gtk(); ! private static native boolean load_gtk(); private static native boolean unload_gtk(); private native boolean load_gtk_icon(String filename); private native boolean load_stock_icon(int widget_type, String stock_id, int iconSize, int textDirection, String detail); private native void nativeSync(); @Override public void sync() { // flush the X11 buffer nativeSync(); --- 245,263 ---- // Set the local image so we can return it later from // getStockIcon(). tmpImage = new BufferedImage(colorModel, raster, false, null); } ! private static native boolean check_gtk(int version); ! private static native boolean load_gtk(int version, boolean verbose); private static native boolean unload_gtk(); private native boolean load_gtk_icon(String filename); private native boolean load_stock_icon(int widget_type, String stock_id, int iconSize, int textDirection, String detail); private native void nativeSync(); + private static native int get_gtk_version(); @Override public void sync() { // flush the X11 buffer nativeSync();
*** 336,341 **** --- 343,370 ---- if (loadGTK()) { return gtkCheckVersionImpl(major, minor, micro); } return false; } + + public static GtkVersions getEnabledGtkVersion() { + String version = AccessController.doPrivileged( + new GetPropertyAction("jdk.gtk.version")); + if (version == null) { + return GtkVersions.ANY; + } else if (version.startsWith("2")) { + return GtkVersions.GTK2; + } else if("3".equals(version) ){ + return GtkVersions.GTK3; + } + return GtkVersions.ANY; + } + + public static GtkVersions getGtkVersion() { + return GtkVersions.values()[get_gtk_version()]; + } + + public static boolean isGtkVerbose() { + return AccessController.doPrivileged((PrivilegedAction<Boolean>)() + -> Boolean.getBoolean("jdk.gtk.verbose")); + } }
< prev index next >