src/solaris/classes/sun/awt/X11/XToolkit.java

Print this page




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