Ejemplo n.º 1
0
  /** Returns a created or reused named display. */
  public static long openDisplay(String name) {
    long dpy = 0;
    NamedDisplay namedDpy = null;
    name = validateDisplayName(name);
    boolean reused = false;

    synchronized (globalLock) {
      for (int i = 0; i < reusableDisplayList.size(); i++) {
        if (reusableDisplayList.get(i).getName().equals(name)) {
          namedDpy = reusableDisplayList.remove(i);
          dpy = namedDpy.getHandle();
          reused = true;
          break;
        }
      }
      if (0 == dpy) {
        dpy = XOpenDisplay(name);
        if (0 == dpy) {
          throw new NativeWindowException(
              "X11Util.Display: Unable to create a display("
                  + name
                  + ") connection. Thread "
                  + Thread.currentThread().getName());
        }
        // if you like to debug and synchronize X11 commands ..
        // setSynchronizeDisplay(dpy, true);
        namedDpy = new NamedDisplay(name, dpy);
        pendingDisplayList.add(namedDpy);
      }
      namedDpy.addRef();
      openDisplayMap.put(dpy, namedDpy);
      openDisplayList.add(namedDpy);
      if (markAllDisplaysUnclosable) {
        namedDpy.setUncloseable(true);
      }
    }
    if (DEBUG) {
      System.err.println(
          "X11Util.Display: openDisplay [reuse "
              + reused
              + "] "
              + namedDpy
              + ". Thread "
              + Thread.currentThread().getName());
      // Thread.dumpStack();
    }
    return namedDpy.getHandle();
  }