src/java.desktop/unix/classes/sun/awt/X11/XToolkit.java

Print this page




  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);