1473 if (isToolkitThread()) {
1474 XEvent event = new XEvent();
1475 try {
1476 XlibWrapper.XWindowEvent(XToolkit.getDisplay(),
1477 XBaseWindow.getXAWTRootWindow().getWindow(),
1478 XConstants.PropertyChangeMask,
1479 event.pData);
1480 timeFetcher.dispatchEvent(event);
1481 }
1482 finally {
1483 event.dispose();
1484 }
1485 }
1486 else {
1487 while (!timeStampUpdated) {
1488 awtLockWait();
1489 }
1490 }
1491 } catch (InterruptedException ie) {
1492 // Note: the returned timeStamp can be incorrect in this case.
1493 if (log.isLoggable(PlatformLogger.FINE)) log.fine("Catched exception, timeStamp may not be correct (ie = " + ie + ")");
1494 }
1495 } finally {
1496 awtUnlock();
1497 }
1498 return timeStamp;
1499 }
1500 protected void initializeDesktopProperties() {
1501 desktopProperties.put("DnD.Autoscroll.initialDelay",
1502 Integer.valueOf(50));
1503 desktopProperties.put("DnD.Autoscroll.interval",
1504 Integer.valueOf(50));
1505 desktopProperties.put("DnD.Autoscroll.cursorHysteresis",
1506 Integer.valueOf(5));
1507 desktopProperties.put("Shell.shellFolderManager",
1508 "sun.awt.shell.ShellFolderManager");
1509 // Don't want to call getMultiClickTime() if we are headless
1510 if (!GraphicsEnvironment.isHeadless()) {
1511 desktopProperties.put("awt.multiClickInterval",
1512 Integer.valueOf(getMultiClickTime()));
1513 desktopProperties.put("awt.mouse.numButtons",
1638 * <code>data</code> is the byte array directly from the x server and
1639 * may be in little endian format.
1640 * <p>
1641 * NB: This could be called from any thread if triggered by
1642 * <code>loadXSettings</code>. It is called from the System EDT
1643 * if triggered by an XSETTINGS change.
1644 */
1645 void parseXSettings(int screen_XXX_ignored,Map updatedSettings) {
1646
1647 if (updatedSettings == null || updatedSettings.isEmpty()) {
1648 return;
1649 }
1650
1651 Iterator i = updatedSettings.entrySet().iterator();
1652 while (i.hasNext()) {
1653 Map.Entry e = (Map.Entry)i.next();
1654 String name = (String)e.getKey();
1655
1656 name = "gnome." + name;
1657 setDesktopProperty(name, e.getValue());
1658 log.fine("name = " + name + " value = " + e.getValue());
1659
1660 // XXX: we probably want to do something smarter. In
1661 // particular, "Net" properties are of interest to the
1662 // "core" AWT itself. E.g.
1663 //
1664 // Net/DndDragThreshold -> ???
1665 // Net/DoubleClickTime -> awt.multiClickInterval
1666 }
1667
1668 setDesktopProperty(SunToolkit.DESKTOPFONTHINTS,
1669 SunToolkit.getDesktopFontHints());
1670
1671 Integer dragThreshold = null;
1672 synchronized (this) {
1673 dragThreshold = (Integer)desktopProperties.get("gnome.Net/DndDragThreshold");
1674 }
1675 if (dragThreshold != null) {
1676 setDesktopProperty("DnD.gestureMotionThreshold", dragThreshold);
1677 }
1678
2453 }
2454
2455 if (oops == null) {
2456 oops = XAtom.get("OOPS");
2457 }
2458
2459 awtLock();
2460 try {
2461 addEventDispatcher(win.getWindow(), oops_waiter);
2462
2463 oops_updated = false;
2464 oops_failed = false;
2465 // Wait for selection notify for oops on win
2466 long event_number = getEventNumber();
2467 XAtom atom = XAtom.get("WM_S0");
2468 eventLog.finer("WM_S0 selection owner {0}", XlibWrapper.XGetSelectionOwner(getDisplay(), atom.getAtom()));
2469 XlibWrapper.XConvertSelection(getDisplay(), atom.getAtom(),
2470 XAtom.get("VERSION").getAtom(), oops.getAtom(),
2471 win.getWindow(), XConstants.CurrentTime);
2472 XSync();
2473
2474
2475 eventLog.finer("Requested OOPS");
2476
2477 long start = System.currentTimeMillis();
2478 while (!oops_updated && !oops_failed) {
2479 try {
2480 awtLockWait(timeout);
2481 } catch (InterruptedException e) {
2482 throw new RuntimeException(e);
2483 }
2484 // This "while" is a protection from spurious
2485 // wake-ups. However, we shouldn't wait for too long
2486 if ((System.currentTimeMillis() - start > timeout) && timeout >= 0) {
2487 throw new OperationTimedOut(Long.toString(System.currentTimeMillis() - start));
2488 }
2489 }
2490 if (oops_failed && getEventNumber() - event_number == 1) {
2491 // If selection update failed we can simply wait some time
2492 // hoping some events will arrive
2493 awtUnlock();
|
1473 if (isToolkitThread()) {
1474 XEvent event = new XEvent();
1475 try {
1476 XlibWrapper.XWindowEvent(XToolkit.getDisplay(),
1477 XBaseWindow.getXAWTRootWindow().getWindow(),
1478 XConstants.PropertyChangeMask,
1479 event.pData);
1480 timeFetcher.dispatchEvent(event);
1481 }
1482 finally {
1483 event.dispose();
1484 }
1485 }
1486 else {
1487 while (!timeStampUpdated) {
1488 awtLockWait();
1489 }
1490 }
1491 } catch (InterruptedException ie) {
1492 // Note: the returned timeStamp can be incorrect in this case.
1493 if (log.isLoggable(PlatformLogger.FINE)) {
1494 log.fine("Catched exception, timeStamp may not be correct (ie = " + ie + ")");
1495 }
1496 }
1497 } finally {
1498 awtUnlock();
1499 }
1500 return timeStamp;
1501 }
1502 protected void initializeDesktopProperties() {
1503 desktopProperties.put("DnD.Autoscroll.initialDelay",
1504 Integer.valueOf(50));
1505 desktopProperties.put("DnD.Autoscroll.interval",
1506 Integer.valueOf(50));
1507 desktopProperties.put("DnD.Autoscroll.cursorHysteresis",
1508 Integer.valueOf(5));
1509 desktopProperties.put("Shell.shellFolderManager",
1510 "sun.awt.shell.ShellFolderManager");
1511 // Don't want to call getMultiClickTime() if we are headless
1512 if (!GraphicsEnvironment.isHeadless()) {
1513 desktopProperties.put("awt.multiClickInterval",
1514 Integer.valueOf(getMultiClickTime()));
1515 desktopProperties.put("awt.mouse.numButtons",
1640 * <code>data</code> is the byte array directly from the x server and
1641 * may be in little endian format.
1642 * <p>
1643 * NB: This could be called from any thread if triggered by
1644 * <code>loadXSettings</code>. It is called from the System EDT
1645 * if triggered by an XSETTINGS change.
1646 */
1647 void parseXSettings(int screen_XXX_ignored,Map updatedSettings) {
1648
1649 if (updatedSettings == null || updatedSettings.isEmpty()) {
1650 return;
1651 }
1652
1653 Iterator i = updatedSettings.entrySet().iterator();
1654 while (i.hasNext()) {
1655 Map.Entry e = (Map.Entry)i.next();
1656 String name = (String)e.getKey();
1657
1658 name = "gnome." + name;
1659 setDesktopProperty(name, e.getValue());
1660 if (log.isLoggable(PlatformLogger.FINE)) {
1661 log.fine("name = " + name + " value = " + e.getValue());
1662 }
1663
1664 // XXX: we probably want to do something smarter. In
1665 // particular, "Net" properties are of interest to the
1666 // "core" AWT itself. E.g.
1667 //
1668 // Net/DndDragThreshold -> ???
1669 // Net/DoubleClickTime -> awt.multiClickInterval
1670 }
1671
1672 setDesktopProperty(SunToolkit.DESKTOPFONTHINTS,
1673 SunToolkit.getDesktopFontHints());
1674
1675 Integer dragThreshold = null;
1676 synchronized (this) {
1677 dragThreshold = (Integer)desktopProperties.get("gnome.Net/DndDragThreshold");
1678 }
1679 if (dragThreshold != null) {
1680 setDesktopProperty("DnD.gestureMotionThreshold", dragThreshold);
1681 }
1682
2457 }
2458
2459 if (oops == null) {
2460 oops = XAtom.get("OOPS");
2461 }
2462
2463 awtLock();
2464 try {
2465 addEventDispatcher(win.getWindow(), oops_waiter);
2466
2467 oops_updated = false;
2468 oops_failed = false;
2469 // Wait for selection notify for oops on win
2470 long event_number = getEventNumber();
2471 XAtom atom = XAtom.get("WM_S0");
2472 eventLog.finer("WM_S0 selection owner {0}", XlibWrapper.XGetSelectionOwner(getDisplay(), atom.getAtom()));
2473 XlibWrapper.XConvertSelection(getDisplay(), atom.getAtom(),
2474 XAtom.get("VERSION").getAtom(), oops.getAtom(),
2475 win.getWindow(), XConstants.CurrentTime);
2476 XSync();
2477
2478 eventLog.finer("Requested OOPS");
2479
2480 long start = System.currentTimeMillis();
2481 while (!oops_updated && !oops_failed) {
2482 try {
2483 awtLockWait(timeout);
2484 } catch (InterruptedException e) {
2485 throw new RuntimeException(e);
2486 }
2487 // This "while" is a protection from spurious
2488 // wake-ups. However, we shouldn't wait for too long
2489 if ((System.currentTimeMillis() - start > timeout) && timeout >= 0) {
2490 throw new OperationTimedOut(Long.toString(System.currentTimeMillis() - start));
2491 }
2492 }
2493 if (oops_failed && getEventNumber() - event_number == 1) {
2494 // If selection update failed we can simply wait some time
2495 // hoping some events will arrive
2496 awtUnlock();
|