30 import java.awt.event.KeyEvent;
31 import java.awt.datatransfer.Clipboard;
32 import java.awt.dnd.DragSource;
33 import java.awt.dnd.DragGestureListener;
34 import java.awt.dnd.DragGestureEvent;
35 import java.awt.dnd.DragGestureRecognizer;
36 import java.awt.dnd.MouseDragGestureRecognizer;
37 import java.awt.dnd.InvalidDnDOperationException;
38 import java.awt.dnd.peer.DragSourceContextPeer;
39 import java.awt.font.TextAttribute;
40 import java.awt.im.InputMethodHighlight;
41 import java.awt.im.spi.InputMethodDescriptor;
42 import java.awt.image.ColorModel;
43 import java.awt.peer.*;
44 import java.beans.PropertyChangeListener;
45 import java.security.AccessController;
46 import java.security.PrivilegedAction;
47 import java.util.*;
48 import javax.swing.LookAndFeel;
49 import javax.swing.UIDefaults;
50 import sun.awt.*;
51 import sun.awt.datatransfer.DataTransferer;
52 import sun.font.FontConfigManager;
53 import sun.java2d.SunGraphicsEnvironment;
54 import sun.misc.*;
55 import sun.awt.util.ThreadGroupUtils;
56 import sun.print.PrintJob2D;
57 import sun.security.action.GetPropertyAction;
58 import sun.security.action.GetBooleanAction;
59 import sun.util.logging.PlatformLogger;
60 import static sun.awt.X11.XlibUtil.scaleDown;
61
62 public final class XToolkit extends UNIXToolkit implements Runnable {
63 private static final PlatformLogger log = PlatformLogger.getLogger("sun.awt.X11.XToolkit");
64 private static final PlatformLogger eventLog = PlatformLogger.getLogger("sun.awt.X11.event.XToolkit");
65 private static final PlatformLogger timeoutTaskLog = PlatformLogger.getLogger("sun.awt.X11.timeoutTask.XToolkit");
66 private static final PlatformLogger keyEventLog = PlatformLogger.getLogger("sun.awt.X11.kye.XToolkit");
67 private static final PlatformLogger backingStoreLog = PlatformLogger.getLogger("sun.awt.X11.backingStore.XToolkit");
68
69 //There is 400 ms is set by default on Windows and 500 by default on KDE and GNOME.
70 //We use the same hardcoded constant.
71 private static final int AWT_MULTICLICK_DEFAULT_TIME = 500;
72
73 static final boolean PRIMARY_LOOP = false;
74 static final boolean SECONDARY_LOOP = true;
265 }
266 });
267 } finally {
268 awtUnlock();
269 }
270 PrivilegedAction<Void> a = () -> {
271 Runnable r = () -> {
272 XSystemTrayPeer peer = XSystemTrayPeer.getPeerInstance();
273 if (peer != null) {
274 peer.dispose();
275 }
276 if (xs != null) {
277 ((XAWTXSettings)xs).dispose();
278 }
279 freeXKB();
280 if (log.isLoggable(PlatformLogger.Level.FINE)) {
281 dumpPeers();
282 }
283 };
284 String name = "XToolkt-Shutdown-Thread";
285 Thread shutdownThread = new ManagedLocalsThread(
286 ThreadGroupUtils.getRootThreadGroup(), r, name);
287 shutdownThread.setContextClassLoader(null);
288 Runtime.getRuntime().addShutdownHook(shutdownThread);
289 return null;
290 };
291 AccessController.doPrivileged(a);
292 }
293
294 static String getCorrectXIDString(String val) {
295 if (val != null) {
296 return val.replace('.', '-');
297 } else {
298 return val;
299 }
300 }
301
302 static native String getEnv(String key);
303
304
305 static String getAWTAppClassName() {
313 }
314
315 if (!GraphicsEnvironment.isHeadless()) {
316 String mainClassName = null;
317
318 StackTraceElement trace[] = (new Throwable()).getStackTrace();
319 int bottom = trace.length - 1;
320 if (bottom >= 0) {
321 mainClassName = trace[bottom].getClassName();
322 }
323 if (mainClassName == null || mainClassName.equals("")) {
324 mainClassName = "AWT";
325 }
326 awtAppClassName = getCorrectXIDString(mainClassName);
327
328 init();
329 XWM.init();
330
331 toolkitThread = AccessController.doPrivileged((PrivilegedAction<Thread>) () -> {
332 String name = "AWT-XAWT";
333 Thread thread = new ManagedLocalsThread(
334 ThreadGroupUtils.getRootThreadGroup(), this, name);
335 thread.setContextClassLoader(null);
336 thread.setPriority(Thread.NORM_PRIORITY + 1);
337 thread.setDaemon(true);
338 return thread;
339 });
340 toolkitThread.start();
341 }
342 }
343
344 @Override
345 public ButtonPeer createButton(Button target) {
346 ButtonPeer peer = new XButtonPeer(target);
347 targetCreatedPeer(target, peer);
348 return peer;
349 }
350
351 @Override
352 public FramePeer createLightweightFrame(LightweightFrame target) {
353 FramePeer peer = new XLightweightFramePeer(target);
|
30 import java.awt.event.KeyEvent;
31 import java.awt.datatransfer.Clipboard;
32 import java.awt.dnd.DragSource;
33 import java.awt.dnd.DragGestureListener;
34 import java.awt.dnd.DragGestureEvent;
35 import java.awt.dnd.DragGestureRecognizer;
36 import java.awt.dnd.MouseDragGestureRecognizer;
37 import java.awt.dnd.InvalidDnDOperationException;
38 import java.awt.dnd.peer.DragSourceContextPeer;
39 import java.awt.font.TextAttribute;
40 import java.awt.im.InputMethodHighlight;
41 import java.awt.im.spi.InputMethodDescriptor;
42 import java.awt.image.ColorModel;
43 import java.awt.peer.*;
44 import java.beans.PropertyChangeListener;
45 import java.security.AccessController;
46 import java.security.PrivilegedAction;
47 import java.util.*;
48 import javax.swing.LookAndFeel;
49 import javax.swing.UIDefaults;
50 import jdk.internal.perf.PerformanceLogger;
51 import sun.awt.*;
52 import sun.awt.datatransfer.DataTransferer;
53 import sun.font.FontConfigManager;
54 import sun.java2d.SunGraphicsEnvironment;
55 import sun.awt.util.ThreadGroupUtils;
56 import sun.print.PrintJob2D;
57 import sun.security.action.GetPropertyAction;
58 import sun.security.action.GetBooleanAction;
59 import sun.util.logging.PlatformLogger;
60 import static sun.awt.X11.XlibUtil.scaleDown;
61
62 public final class XToolkit extends UNIXToolkit implements Runnable {
63 private static final PlatformLogger log = PlatformLogger.getLogger("sun.awt.X11.XToolkit");
64 private static final PlatformLogger eventLog = PlatformLogger.getLogger("sun.awt.X11.event.XToolkit");
65 private static final PlatformLogger timeoutTaskLog = PlatformLogger.getLogger("sun.awt.X11.timeoutTask.XToolkit");
66 private static final PlatformLogger keyEventLog = PlatformLogger.getLogger("sun.awt.X11.kye.XToolkit");
67 private static final PlatformLogger backingStoreLog = PlatformLogger.getLogger("sun.awt.X11.backingStore.XToolkit");
68
69 //There is 400 ms is set by default on Windows and 500 by default on KDE and GNOME.
70 //We use the same hardcoded constant.
71 private static final int AWT_MULTICLICK_DEFAULT_TIME = 500;
72
73 static final boolean PRIMARY_LOOP = false;
74 static final boolean SECONDARY_LOOP = true;
265 }
266 });
267 } finally {
268 awtUnlock();
269 }
270 PrivilegedAction<Void> a = () -> {
271 Runnable r = () -> {
272 XSystemTrayPeer peer = XSystemTrayPeer.getPeerInstance();
273 if (peer != null) {
274 peer.dispose();
275 }
276 if (xs != null) {
277 ((XAWTXSettings)xs).dispose();
278 }
279 freeXKB();
280 if (log.isLoggable(PlatformLogger.Level.FINE)) {
281 dumpPeers();
282 }
283 };
284 String name = "XToolkt-Shutdown-Thread";
285 Thread shutdownThread = new sun.misc.ManagedLocalsThread(
286 ThreadGroupUtils.getRootThreadGroup(), r, name);
287 shutdownThread.setContextClassLoader(null);
288 Runtime.getRuntime().addShutdownHook(shutdownThread);
289 return null;
290 };
291 AccessController.doPrivileged(a);
292 }
293
294 static String getCorrectXIDString(String val) {
295 if (val != null) {
296 return val.replace('.', '-');
297 } else {
298 return val;
299 }
300 }
301
302 static native String getEnv(String key);
303
304
305 static String getAWTAppClassName() {
313 }
314
315 if (!GraphicsEnvironment.isHeadless()) {
316 String mainClassName = null;
317
318 StackTraceElement trace[] = (new Throwable()).getStackTrace();
319 int bottom = trace.length - 1;
320 if (bottom >= 0) {
321 mainClassName = trace[bottom].getClassName();
322 }
323 if (mainClassName == null || mainClassName.equals("")) {
324 mainClassName = "AWT";
325 }
326 awtAppClassName = getCorrectXIDString(mainClassName);
327
328 init();
329 XWM.init();
330
331 toolkitThread = AccessController.doPrivileged((PrivilegedAction<Thread>) () -> {
332 String name = "AWT-XAWT";
333 Thread thread = new sun.misc.ManagedLocalsThread(
334 ThreadGroupUtils.getRootThreadGroup(), this, name);
335 thread.setContextClassLoader(null);
336 thread.setPriority(Thread.NORM_PRIORITY + 1);
337 thread.setDaemon(true);
338 return thread;
339 });
340 toolkitThread.start();
341 }
342 }
343
344 @Override
345 public ButtonPeer createButton(Button target) {
346 ButtonPeer peer = new XButtonPeer(target);
347 targetCreatedPeer(target, peer);
348 return peer;
349 }
350
351 @Override
352 public FramePeer createLightweightFrame(LightweightFrame target) {
353 FramePeer peer = new XLightweightFramePeer(target);
|