diff options
Diffstat (limited to 'libjava/gnu/gcj/xlib/natWMSizeHints.cc')
-rw-r--r-- | libjava/gnu/gcj/xlib/natWMSizeHints.cc | 75 |
1 files changed, 75 insertions, 0 deletions
diff --git a/libjava/gnu/gcj/xlib/natWMSizeHints.cc b/libjava/gnu/gcj/xlib/natWMSizeHints.cc new file mode 100644 index 000000000..fd546997f --- /dev/null +++ b/libjava/gnu/gcj/xlib/natWMSizeHints.cc @@ -0,0 +1,75 @@ +/* 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; +} |