| /* 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 <X11/Xlib.h> |
| #include <X11/Xutil.h> |
| |
| #include <gcj/cni.h> |
| #include <gnu/gcj/RawData.h> |
| #include <java/lang/OutOfMemoryError.h> |
| |
| #include <gnu/gcj/xlib/Window.h> |
| #include <gnu/gcj/xlib/Display.h> |
| #include <gnu/gcj/xlib/WMSizeHints.h> |
| |
| void gnu::gcj::xlib::WMSizeHints::init(WMSizeHints* copyFrom) |
| { |
| XSizeHints* hints = XAllocSizeHints(); |
| if (hints == 0) |
| { |
| jstring errorMessage = JvNewStringLatin1("XAllocSizeHints failed"); |
| throw new java::lang::OutOfMemoryError(errorMessage); |
| } |
| |
| if (copyFrom != 0) |
| { |
| XSizeHints* from = (XSizeHints*) copyFrom->structure; |
| (*hints) = (*from); |
| } |
| else |
| { |
| // Is this necessary? |
| hints->flags = 0; |
| } |
| structure = reinterpret_cast<gnu::gcj::RawData*>(hints); |
| } |
| |
| void gnu::gcj::xlib::WMSizeHints::finalize() |
| { |
| delete structure; |
| } |
| |
| void gnu::gcj::xlib::WMSizeHints::applyNormalHints(gnu::gcj::xlib::Window* window) |
| { |
| Display* display = window->display; |
| ::Display* dpy = (::Display*) display->display; |
| ::Window win = window->getXID(); |
| XSizeHints* hints = (XSizeHints*) structure; |
| |
| XSetWMNormalHints(dpy, win, hints); |
| /* FIXME, alternative? |
| // X11 source reports XSetWMNormalHints() as an old routine. (?) |
| XSetWMSizeHints(dpy, win, hints, display->getAtom("WM_NORMAL_HINTS")); |
| */ |
| } |
| |
| void gnu::gcj::xlib::WMSizeHints::setMinSize(jint width, jint height) |
| { |
| XSizeHints* hints = (XSizeHints*) structure; |
| hints->min_width = width; |
| hints->min_height = height; |
| hints->flags = hints->flags | PMinSize; |
| } |
| |
| void gnu::gcj::xlib::WMSizeHints::setMaxSize(jint width, jint height) |
| { |
| XSizeHints* hints = (XSizeHints*) structure; |
| hints->max_width = width; |
| hints->max_height = height; |
| hints->flags = hints->flags | PMaxSize; |
| } |