XToolkit.java revision 1976
private static final PlatformLogger eventLog = PlatformLogger.getLogger("sun.awt.X11.event.XToolkit");
private static final PlatformLogger timeoutTaskLog = PlatformLogger.getLogger("sun.awt.X11.timeoutTask.XToolkit");
private static final PlatformLogger keyEventLog = PlatformLogger.getLogger("sun.awt.X11.kye.XToolkit");
private static final PlatformLogger backingStoreLog = PlatformLogger.getLogger("sun.awt.X11.backingStore.XToolkit");
static final boolean PRIMARY_LOOP = false;
static final boolean SECONDARY_LOOP = true;
protected static boolean dynamicLayoutSetting = false;
private static boolean areExtraMouseButtonsEnabled = true;
private boolean loadedXSettings;
static int arrowCursor;
private static long _display;
static int awt_multiclick_time;
static boolean securityWarningEnabled;
initIDs();
m_removeSourceEvents = SunToolkit.getMethod(EventQueue.class, "removeSourceEvents", new Class[] {Object.class, Boolean.TYPE}) ;
private static long saved_error_handler;
private static boolean noisyAwtHandler;
public static void RESTORE_XERROR_HANDLER() {
XSync();
if (noisyAwtHandler) {
} catch (Throwable z) {
private native static void initIDs();
static boolean isToolkitThread() {
static void initSecurityWarning() {
static boolean isSecurityWarningEnabled() {
return securityWarningEnabled;
static native void awt_output_flush();
static final void awtFUnlock() {
awtUnlock();
return uidefaults;
static void initUIDefaults() {
catch (Exception e)
e.printStackTrace();
public static long getDisplay() {
return _display;
public static long getDefaultRootWindow() {
awtLock();
return res;
awtUnlock();
void init() {
awtLock();
tryXKB();
areExtraMouseButtonsEnabled = Boolean.parseBoolean(System.getProperty("sun.awt.enableExtraMouseButtons", "true"));
awtUnlock();
public void run() {
freeXKB();
dumpPeers();
return val;
return awtAppClassName;
public XToolkit() {
init();
new PrivilegedAction() {
return currentTG;
return peer;
return peer;
synchronized(winMap) {
synchronized(winMap) {
synchronized(winMap) {
synchronized(winToDispatcher) {
synchronized(winToDispatcher) {
awtLock();
awtUnlock();
awtLock();
awtUnlock();
awtLock();
awtUnlock();
awtLock();
awtUnlock();
public interface XEventListener {
synchronized (listeners) {
synchronized (listeners) {
(ev.get_type() == XConstants.MotionNotify || ev.get_type() == XConstants.EnterNotify || ev.get_type() == XConstants.LeaveNotify))
synchronized(winToDispatcher) {
static native void awt_toolkit_init();
public void run() {
awtLock();
eventNumber++;
if( keyEventLog.isLoggable(PlatformLogger.FINE) && (ev.get_type() == XConstants.KeyPress || ev.get_type() == XConstants.KeyRelease) ) {
if( keyEventLog.isLoggable(PlatformLogger.FINE) && (ev.get_type() == XConstants.KeyPress || ev.get_type() == XConstants.KeyRelease) ) {
awtUnlock();
static int getDefaultScreenWidth() {
awtLock();
awtUnlock();
return screenWidth;
static int getDefaultScreenHeight() {
awtLock();
awtUnlock();
return screenHeight;
protected int getScreenWidth() {
return getDefaultScreenWidth();
protected int getScreenHeight() {
return getDefaultScreenHeight();
if (workareaPresent)
return null;
workArea.x,
boolean strutPresent = XA_NET_WM_STRUT_PARTIAL.getAtomData(window, XAtom.XA_CARDINAL, native_ptr, 4);
if (!strutPresent)
if (strutPresent)
return insets;
if (p != null) return p;
public void setDynamicLayout(boolean b) {
dynamicLayoutSetting = b;
protected boolean isDynamicLayoutSet() {
return dynamicLayoutSetting;
protected boolean isDynamicLayoutSupported() {
public boolean isDynamicLayoutActive() {
return isDynamicLayoutSupported();
public DragSourceContextPeer createDragSourceContextPeer(DragGestureEvent dge) throws InvalidDnDOperationException {
public <T extends DragGestureRecognizer> T
Component c,
int srcActions,
return null;
return peer;
return peer;
return peer;
return peer;
return peer;
return peer;
return peer;
return peer;
return peer;
return peer;
XCanvasPeer peer = (isXEmbedServerRequested() ? new XEmbedCanvasPeer(target) : new XCanvasPeer(target));
return peer;
return peer;
return peer;
return peer;
return peer;
return peer;
return peer;
return peer;
return xPeer;
return peer;
return peer;
public KeyboardFocusManagerPeer createKeyboardFocusManagerPeer(KeyboardFocusManager manager) throws HeadlessException {
return peer;
throws IndexOutOfBoundsException {
return peer;
return peer;
public boolean isTraySupported() {
public int getMaximumCursorColors() {
awtLock();
awtUnlock();
return clipboard;
return selection;
public void beep() {
awtLock();
awtUnlock();
throw new IllegalArgumentException();
return printJob;
throw new IllegalArgumentException();
return printJob;
static void XSync() {
awtLock();
awtUnlock();
public int getScreenResolution() {
awtLock();
awtUnlock();
static native long getDefaultXColormap();
static native long getDefaultScreenData();
return screenmodel;
return getStaticColorModel();
return new XInputMethodDescriptor();
static int getMultiClickTime() {
return awt_multiclick_time;
static void initializeMultiClickTime() {
awtLock();
String multiclick_time_query = XlibWrapper.XGetDefault(XToolkit.getDisplay(), "*", "multiClickTime");
awtUnlock();
throws HeadlessException
static void dumpPeers() {
private static boolean initialized;
private static boolean timeStampUpdated;
private static long timeStamp;
new XEventDispatcher() {
awtLock();
timeStampUpdated = true;
awtUnlock();
static long getCurrentServerTime() {
awtLock();
if (!initialized) {
initialized = true;
timeStampUpdated = false;
if (isToolkitThread()) {
while (!timeStampUpdated) {
awtLockWait();
if (log.isLoggable(PlatformLogger.FINE)) log.fine("Catched exception, timeStamp may not be correct (ie = " + ie + ")");
awtUnlock();
return timeStamp;
protected void initializeDesktopProperties() {
private native synchronized int getNumberOfButtonsImpl();
public int getNumberOfButtons(){
awtLock();
awtUnlock();
if (!loadedXSettings &&
loadedXSettings = true;
/* set the fontconfig/KDE property so that
hint);
private void loadXSettings() {
while (i.hasNext()) {
// Net/DndDragThreshold -> ???
// Net/DoubleClickTime -> awt.multiClickInterval
static int altMask;
static int metaMask;
static int numLockMask;
static int modeSwitchMask;
static int modLockIsShiftLock;
awtLock();
return code;
awtUnlock();
awtLock();
awtUnlock();
static void setupModifierMap() {
final int modmask[] = { XConstants.ShiftMask, XConstants.LockMask, XConstants.ControlMask, XConstants.Mod1Mask,
awtLock();
++modn)
awtUnlock();
awtLock();
boolean removed = false;
awtUnlock();
static native void wakeup_poll();
awtLock();
wakeup_poll();
awtUnlock();
private long getNextTaskTime() {
awtLock();
awtUnlock();
private static void callTimeoutTasks() {
throw td;
static long getAwtDefaultFg() {
return awt_defaultFg;
int numButtons = ((Integer)getDefaultToolkit().getDesktopProperty("awt.mouse.numButtons")).intValue();
static long reset_time_utc;
protected boolean needsXEmbedImpl() {
return null;
catch (IllegalAccessException e)
e.printStackTrace();
catch (InvocationTargetException e) {
e.printStackTrace();
public boolean isAlwaysOnTopSupported() {
public boolean useBufferPerWindow() {
static int getBackingStoreType() {
return backingStoreType;
private static void setBackingStoreType() {
awtLock();
awtUnlock();
private static int backingStoreType;
static boolean awt_UseXKB = false;
static boolean awt_UseXKB_Calls = false;
static boolean isXsunKPBehavior() {
awtLock();
awtUnlock();
static boolean isXKBenabled() {
awtLock();
return awt_UseXKB;
awtUnlock();
static boolean tryXKB() {
awtLock();
awt_UseXKB = XlibWrapper.XQueryExtension( getDisplay(), name, XlibWrapper.larg1, XlibWrapper.larg2, XlibWrapper.larg3);
if( awt_UseXKB ) {
if( awt_UseXKB_Calls ) {
awt_UseXKB_Calls = XlibWrapper.XkbQueryExtension( getDisplay(), XlibWrapper.larg1, XlibWrapper.larg2,
if( awt_UseXKB_Calls ) {
return awt_UseXKB;
awtUnlock();
static boolean canUseXKBCalls() {
awtLock();
return awt_UseXKB_Calls;
awtUnlock();
static int getXKBEffectiveGroup() {
awtLock();
return awt_XKBEffectiveGroup;
awtUnlock();
static int getXKBBaseEventCode() {
awtLock();
return awt_XKBBaseEventCode;
awtUnlock();
static long getXKBKbdDesc() {
awtLock();
return awt_XKBDescPtr;
awtUnlock();
void freeXKB() {
awtLock();
awtUnlock();
switch( xkb_type ) {
freeXKB();
private static long eventNumber;
public static long getEventNumber() {
awtLock();
return eventNumber;
awtUnlock();
private static boolean oops_updated;
private static boolean oops_failed;
oops_updated = true;
oops_failed = true;
awtLock();
oops_updated = false;
oops_failed = false;
eventLog.finer("WM_S0 selection owner {0}", XlibWrapper.XGetSelectionOwner(getDisplay(), atom.getAtom()));
XSync();
} catch (InterruptedException e) {
throw new RuntimeException(e);
awtUnlock();
awtLock();
awtUnlock();
public boolean isDesktopSupported(){
return new XDesktopPeer();
return areExtraMouseButtonsEnabled;
public boolean isWindowOpacitySupported() {
public boolean isWindowShapingSupported() {
public boolean isWindowTranslucencySupported() {
public static boolean getSunAwtDisableGrab() {