diff --git a/src/java/org/lwjgl/opengl/XRandR.java b/src/java/org/lwjgl/opengl/XRandR.java index d9876b9a..825b99ed 100644 --- a/src/java/org/lwjgl/opengl/XRandR.java +++ b/src/java/org/lwjgl/opengl/XRandR.java @@ -119,11 +119,20 @@ public class XRandR { * @param screens * The desired screen set, may not be null */ - public static void setConfiguration(Screen[]/* ... */screens) { + public static void setConfiguration(final Screen[]/* ... */screens) { if (screens.length == 0) { throw new IllegalArgumentException("Must specify at least one screen"); } - + + AccessController.doPrivileged(new PrivilegedAction() { + public Object run() { + setScreen(screens); + return null; + } + }); + } + + private static void setScreen(Screen[] screens) { List/* */cmd = new ArrayList/* */(); cmd.add("xrandr"); @@ -164,7 +173,6 @@ public class XRandR { } catch (IOException e) { e.printStackTrace(); } - } /** @@ -172,7 +180,13 @@ public class XRandR { * xrandr is not supported */ public static String[] getScreenNames() { - populate(); + AccessController.doPrivileged(new PrivilegedAction() { + public Object run() { + populate(); + return null; + } + }); + return (String[]) screens.keySet().toArray(new String[screens.size()]); } @@ -182,7 +196,13 @@ public class XRandR { * null if there is no such screen */ public static Screen[] getResolutions(String name) { - populate(); + AccessController.doPrivileged(new PrivilegedAction() { + public Object run() { + populate(); + return null; + } + }); + // clone the array to prevent held copies being altered return (Screen[]) ((Screen[]) screens.get(name)).clone(); }