@Override
  public Point getLocationOnScreen(final Window frame) {
    try {
      final LocationStorage cfg = createConfig(frame);
      if (cfg.isValid()) {
        if ("absolute".equalsIgnoreCase(cfg.getType())) {
          return AbstractLocator.validate(new Point(cfg.getX(), cfg.getY()), frame);
        }
        // Do a "is on screen check" here
        Window parent = getParent();
        Container actualParent = frame.getParent();
        Point pLoc = null;

        if (parent != null) {
          pLoc = parent.getLocationOnScreen();
        }
        if (pLoc == null && actualParent != null) {
          pLoc = actualParent.getLocationOnScreen();
        }
        if (pLoc == null) {
          return getFallbackLocator().getLocationOnScreen(frame);
        }
        return AbstractLocator.validate(new Point(cfg.getX() + pLoc.x, cfg.getY() + pLoc.y), frame);
      }
    } catch (final Throwable e) {

      // frame.getParent() might be null or invisble
      // e.printStackTrace();
    }
    return getFallbackLocator().getLocationOnScreen(frame);
  }