summaryrefslogtreecommitdiff
path: root/libjava/gnu/gcj/xlib/natWMSizeHints.cc
blob: fd546997f8b4df7a8ec598372ba0751b0e073a81 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
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;
}