| /* Copyright (C) 1999, 2000 Free Software Foundation |
| |
| This file is part of libgcj. |
| |
| This software is copyrighted work licensed under the terms of the |
| Libgcj License. Please consult the file "LIBGCJ_LICENSE" for |
| details. */ |
| |
| package gnu.gcj.xlib; |
| |
| import java.util.Dictionary; |
| import java.util.Hashtable; |
| import java.util.Vector; |
| import java.util.Enumeration; |
| |
| import gnu.gcj.RawData; |
| |
| /** |
| * A connection to an X11 display. |
| * |
| * @author Rolf W. Rasmussen <rolfwr@ii.uib.no> |
| */ |
| |
| public class Display |
| { |
| static |
| { |
| staticInit(); |
| } |
| |
| public Display() |
| { |
| init(); |
| } |
| |
| private static native void staticInit(); |
| private native void init(); |
| protected native void finalize(); |
| |
| RawData display = null; |
| |
| /* TODO?: Rather than storing such data here, we might consider |
| using the context manager facilities provided by Xlib... */ |
| private Dictionary xids = new Hashtable(); |
| |
| protected final void addXID(int xid, XID window) |
| { |
| xids.put(new Integer(xid), window); |
| } |
| |
| protected final void removeXID(int xid) |
| { |
| xids.remove(new Integer(xid)); |
| } |
| |
| public final Window getDefaultRootWindow() |
| { |
| int rootXID = getDefaultRootWindowXID(); |
| return getWindow(rootXID); |
| } |
| |
| public final XID getXID(int xid) |
| { |
| return (XID) xids.get(new Integer(xid)); |
| } |
| |
| public final Window getWindow(int xid) |
| { |
| Window window = (Window) getXID(xid); |
| if (window == null) |
| { |
| window = new Window(this, xid); |
| addXID(xid, window); |
| } |
| return window; |
| } |
| |
| public final Screen getDefaultScreen() |
| { |
| /* Screens objects are not cached since they are lightweight. |
| We just create a new object when requested. */ |
| return new Screen(this, getDefaultScreenNumber()); |
| } |
| |
| public final native int getDefaultScreenNumber(); |
| |
| private final native int getDefaultRootWindowXID(); |
| |
| private Dictionary atoms = new Hashtable(); |
| |
| public final int getAtom(String name) |
| { |
| Integer atomInt = (Integer) atoms.get(name); |
| if (atomInt == null) |
| return internAtom(name); |
| return atomInt.intValue(); |
| } |
| |
| // TODO?: cache reverse lookup too? |
| public final native String getAtomName(int atom); |
| |
| private final native int internAtom(String name); |
| |
| public native void flush(); |
| } |