private RemoteDesktopServerEvent createUpdateEvent(List selectedEvents) {
    Rectangle r = null;
    RemoteDesktopServerEvent e = null;
    long time = 0;
    int p1, p2;

    for (int i = 0; selectedEvents != null && i < selectedEvents.size(); i++) {
      e = (RemoteDesktopServerEvent) selectedEvents.get(i);
      if (e.getMessageType() == RemoteDesktopServerEvent.SERVER_UPDATE_EVENT) {
        time = Math.max(time, e.getWhen());
        if (r == null) {
          r = new Rectangle(e.getUpdateRect());
        } else {
          r.x = Math.min(r.x, e.getUpdateRect().x);
          r.y = Math.min(r.y, e.getUpdateRect().y);
          p1 = r.x + r.width;
          p2 = e.getUpdateRect().x + e.getUpdateRect().width;
          if (p2 > p1) {
            r.width = p2 - r.x;
          }
          p1 = r.y + r.height;
          p2 = e.getUpdateRect().y + e.getUpdateRect().height;
          if (p2 > p1) {
            r.height = p2 - r.y;
          }
        }
      }
    }
    if (r == null) {
      return null;
    }
    //            System.out.println("Resulting rect: "+r);
    e = new RemoteDesktopServerEvent(e.getClient(), r);
    e.setWhen(time);
    return e;
  }