1 /* Copyright (C) 2000  Free Software Foundation
2 
3    This file is part of libgcj.
4 
5 This software is copyrighted work licensed under the terms of the
6 Libgcj License.  Please consult the file "LIBGCJ_LICENSE" for
7 details.  */
8 
9 #include <X11/Xlib.h>
10 #include <X11/Xutil.h>
11 
12 #include <gcj/cni.h>
13 #include <gnu/gcj/RawData.h>
14 #include <java/lang/OutOfMemoryError.h>
15 
16 #include <gnu/gcj/xlib/Window.h>
17 #include <gnu/gcj/xlib/Display.h>
18 #include <gnu/gcj/xlib/WMSizeHints.h>
19 
init(WMSizeHints * copyFrom)20 void gnu::gcj::xlib::WMSizeHints::init(WMSizeHints* copyFrom)
21 {
22   XSizeHints* hints = XAllocSizeHints();
23   if (hints == 0)
24     {
25       jstring errorMessage = JvNewStringLatin1("XAllocSizeHints failed");
26       throw new ::java::lang::OutOfMemoryError(errorMessage);
27     }
28 
29   if (copyFrom != 0)
30     {
31       XSizeHints* from = (XSizeHints*) copyFrom->structure;
32       (*hints) = (*from);
33     }
34   else
35     {
36       // Is this necessary?
37       hints->flags = 0;
38     }
39   structure = reinterpret_cast<gnu::gcj::RawData*>(hints);
40 }
41 
finalize()42 void gnu::gcj::xlib::WMSizeHints::finalize()
43 {
44   delete structure;
45 }
46 
applyNormalHints(gnu::gcj::xlib::Window * window)47 void gnu::gcj::xlib::WMSizeHints::applyNormalHints(gnu::gcj::xlib::Window* window)
48 {
49   Display* display = window->display;
50   ::Display* dpy = (::Display*) display->display;
51   ::Window win = window->getXID();
52   XSizeHints* hints = (XSizeHints*) structure;
53 
54   XSetWMNormalHints(dpy, win, hints);
55   /* FIXME, alternative?
56      // X11 source reports XSetWMNormalHints() as an old routine. (?)
57      XSetWMSizeHints(dpy, win, hints, display->getAtom("WM_NORMAL_HINTS"));
58   */
59 }
60 
setMinSize(jint width,jint height)61 void gnu::gcj::xlib::WMSizeHints::setMinSize(jint width, jint height)
62 {
63   XSizeHints* hints = (XSizeHints*) structure;
64   hints->min_width = width;
65   hints->min_height = height;
66   hints->flags = hints->flags | PMinSize;
67 }
68 
setMaxSize(jint width,jint height)69 void gnu::gcj::xlib::WMSizeHints::setMaxSize(jint width, jint height)
70 {
71   XSizeHints* hints = (XSizeHints*) structure;
72   hints->max_width = width;
73   hints->max_height = height;
74   hints->flags = hints->flags | PMaxSize;
75 }
76