/* Copyright (C) 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. */ #include #include #include #include #include #include #include #include #include #include void gnu::gcj::xlib::WindowAttributes::initFromWindow(Window* from) { display = from->getDisplay(); ::Display* dpy = (::Display*) display->display; ::Window win = from->getXID(); XWindowAttributes* attributesIn = new XWindowAttributes; in = reinterpret_cast(attributesIn); Status status = XGetWindowAttributes(dpy, win, attributesIn); if ((status == BadDrawable) | (status == BadWindow)) throw new XException(display, status); } void gnu::gcj::xlib::WindowAttributes::init(WindowAttributes* copyFrom) { XSetWindowAttributes* attributes = new XSetWindowAttributes; if (copyFrom != 0) { XSetWindowAttributes* from = (XSetWindowAttributes*) copyFrom->out; (*attributes) = (*from); } out = reinterpret_cast(attributes); } void gnu::gcj::xlib::WindowAttributes::finalize() { delete in; in = 0; delete out; out = 0; } void gnu::gcj::xlib::WindowAttributes::setBackground(jlong pixel) { XSetWindowAttributes* attributes = (XSetWindowAttributes*) out; attributes->background_pixel = pixel; mask = mask | CWBackPixel; } void gnu::gcj::xlib::WindowAttributes::setBackground(Pixmap* pixmap) { XSetWindowAttributes* attributes = (XSetWindowAttributes*) out; attributes->background_pixmap = pixmap->getXID(); mask = mask | CWBackPixmap; } void gnu::gcj::xlib::WindowAttributes::setEventMask(jlong eventMask) { XSetWindowAttributes* attributes = (XSetWindowAttributes*) out; attributes->event_mask = eventMask; mask = mask | CWEventMask; } gnu::gcj::xlib::Visual* gnu::gcj::xlib::WindowAttributes::getVisual() { if (in == 0) return 0; XWindowAttributes* attributesIn = (XWindowAttributes*) in; gnu::gcj::RawData* screenRef = reinterpret_cast(attributesIn->screen); Screen* screen = new Screen(display, screenRef); gnu::gcj::RawData* visualRef = reinterpret_cast(attributesIn->visual); return new gnu::gcj::xlib::Visual(visualRef, screen, attributesIn->depth); } void gnu::gcj::xlib::WindowAttributes::apply(Window* window) { ::Display* dpy = (::Display*) window->getDisplay()->display; ::Window win = window->getXID(); XSetWindowAttributes* attributes = (XSetWindowAttributes*) out; XChangeWindowAttributes(dpy, win, mask, attributes); }