screenVisual = new HashMap<Integer,Visual>();
defaultDepth = display.default_depth;
atomsWmSelection = new Atom[display.screens.length];
Window wmSelectionWin = new Window(rootWin, 0,0, 1, 1, 0, new Window.Attributes());
for (int i = 0; i< display.screens.length; i++) {
Screen screen = display.screens[i];
gnu.x11.Enum scrdepths = screen.depths();
while (scrdepths.more()) {
Depth depth = (Depth) scrdepths.next();
screenDepth.put(depth.depth(), depth);
gnu.x11.Enum enm = depth.visuals();
while (enm.more()) {
Visual visual = (Visual) enm.next();
screenVisual.put(visual.id(), visual);
}
}
// AWT in Java6u1 requires that the WM acquire these selections.
// Note: even though the WM conventions recommend that CurrentTime
// not be used we can use it here because the LG WM is the only one
// acquiring these selections.
atomsWmSelection[i] = (Atom)Atom.intern(display, "WM_S" + i);
wmSelectionWin.set_selection_owner(atomsWmSelection[i], Display.CURRENT_TIME);
display.check_error();
}
atomWmState = (Atom)Atom.intern(display, "WM_STATE");
atomWmChangeState = (Atom)Atom.intern(display, "WM_CHANGE_STATE");
atomWmProtocols = (Atom)Atom.intern(display, "WM_PROTOCOLS");
atomWmDeleteWindow = (Atom)Atom.intern(display, "WM_DELETE_WINDOW");
atomWmTakeFocus = (Atom)Atom.intern(display, "WM_TAKE_FOCUS");
atomWmColormapWindows=(Atom)Atom.intern(display,"WM_COLORMAP_WINDOWS");
atomWmTransientFor = (Atom)Atom.intern(display, "WM_TRANSIENT_FOR");
atomCompoundText = (Atom)Atom.intern(display, "COMPOUND_TEXT");
atomServerShutdown = (Atom)Atom.intern(display, "SERVER_SHUTDOWN");
try {
selectInput(rootWin);
} catch (Error err) {
if (err.code == Error.BAD_ACCESS && err.bad == rootWin.id) {
logger.severe("Failed to access root window. Another WM is running?");
throw new RuntimeException ("Failed to access root window\n"
+ "Another WM is running?"); // FIXME
} else {
throw err;
}
}
// Remote Windows: Automatically composite redirect all root top-level windows
compositeTopLevelWindows();
// Init WmNET support for screen 0
// TODO: multiscreen
Window[] rootWins = new Window[1];
Window[] checkWins = new Window[1];
rootWins[0] = rootWin;
checkWins[0] = new Window(rootWin, 0,0, 1, 1, 0, new Window.Attributes());
X11WindowManagerHints.initWmNETSupport(display, rootWins, checkWins);
// prepare for the event dispatch thread
Thread eventThread = new Thread( this, "X11WindowManager" );
// eventThread.setPriority(Thread.NORM_PRIORITY + 2); // FIXME