123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249 |
- /* Copyright (C) 2000, 2002, 2003 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. */
- package gnu.awt.xlib;
- import java.awt.*;
- import java.awt.peer.*;
- import java.awt.image.*;
- import gnu.gcj.xlib.WMSizeHints;
- import gnu.gcj.xlib.WindowAttributes;
- import gnu.gcj.xlib.Display;
- import gnu.gcj.xlib.Visual;
- import gnu.gcj.xlib.Screen;
- import gnu.gcj.xlib.XConfigureEvent;
- /** FIXME: a lot of the code here should be moved down to XWindowPeer. */
- public class XFramePeer extends XCanvasPeer implements FramePeer
- {
- private boolean processingConfigureNotify = false;
-
- public XFramePeer(Frame frame)
- {
- super(frame);
-
- // Set some defaults for a toplevel component:
- if (frame.getFont() == null)
- frame.setFont(new Font("helvetica", Font.PLAIN, 12));
- if (frame.getBackground() == null)
- frame.setBackground(Color.lightGray);
- if (frame.getForeground() == null)
- frame.setForeground(Color.black);
- }
- /** Find parent window for toplevel window, ie. root window of
- selected screen. Bounds are not changed. */
- gnu.gcj.xlib.Window locateParentWindow(Rectangle bounds)
- {
- Screen screen = config.getVisual().getScreen();
- return screen.getRootWindow();
- }
-
- void initWindowProperties()
- {
- Frame frame = (Frame) component;
- setResizable(frame.isResizable());
- String title = frame.getTitle();
- if (!title.equals("")) setTitle(title);
- }
- long getBasicEventMask()
- {
- return super.getBasicEventMask() |
- WindowAttributes.MASK_STRUCTURE_NOTIFY;
- }
- void configureNotify(XConfigureEvent configEvent)
- {
- processingConfigureNotify = true; // to avoid setBounds flood
- component.setBounds(configEvent.getBounds());
- processingConfigureNotify = false;
- }
- /* Overridden to ignore request to set bounds if the request occurs
- while processing an XConfigureNotify event, in which case the X
- window already has the desired bounds.
- That's what java.awt.Window.setBoundsCallback is for, but it's
- package-private, and using our own flag eliminates the need to
- circumvent java security.
- */
- public void setBounds(int x, int y, int width, int height)
- {
- if (!processingConfigureNotify)
- super.setBounds(x, y, width, height);
- }
-
- // Implementing ContainerPeer:
- static final Insets INSETS_0_PROTOTYPE = new Insets(0, 0, 0, 0);
- public Insets getInsets()
- {
- return (Insets) INSETS_0_PROTOTYPE.clone();
- }
- public Insets insets ()
- {
- return getInsets ();
- }
- public void beginValidate()
- {
- }
- public void endValidate()
- {
- // reassert sizing hints
- Frame frame = (Frame) component;
- setResizable(frame.isResizable());
- }
-
- // Implementing WindowPeer:
- public void toBack()
- {
- window.toBack ();
- }
-
- public void toFront()
- {
- window.toFront ();
- }
- // Implementing FramePeer:
- public void setIconImage(Image image)
- {
- throw new UnsupportedOperationException("not implemented yet");
- }
-
- public void setMenuBar(MenuBar mb)
- {
- throw new UnsupportedOperationException("not implemented yet");
- }
- public void setTitle(String title)
- {
- synchronized (window.getDisplay())
- {
- // Oh, what a nice implementation :-)
- window.setProperty("WM_NAME", "STRING", title);
-
- ensureFlush();
- }
- }
- public void setResizable(boolean resizable)
- {
- Frame frame = (Frame) component;
-
- WMSizeHints sizeHints = new WMSizeHints();
- if (resizable)
- {
- Dimension minSize = frame.getMinimumSize();
- sizeHints.setMinSize(minSize.width, minSize.height);
-
- Dimension maxSize = frame.getMaximumSize();
-
- if ((maxSize.width < Short.MAX_VALUE) ||
- (maxSize.height < Short.MAX_VALUE))
- {
- maxSize.width = Math.min(maxSize.width, Short.MAX_VALUE);
- maxSize.height = Math.min(maxSize.height, Short.MAX_VALUE);
- sizeHints.setMaxSize(maxSize.width, maxSize.height);
- }
- }
- else
- {
- // lock resizing to current bounds
- Dimension size = frame.getSize();
- sizeHints.setMinSize(size.width, size.height);
- sizeHints.setMaxSize(size.width, size.height);
- }
- sizeHints.applyNormalHints(window);
- }
- public int getState ()
- {
- return 0;
- }
- public void setState (int state)
- {
- }
- public void setMaximizedBounds (Rectangle r)
- {
- }
- public void beginLayout () { }
- public void endLayout () { }
- public boolean isPaintPending () { return false; }
- /**
- * @since 1.5
- */
- public void setBoundsPrivate (int x, int y, int width, int height)
- {
- // TODO: Implement this.
- throw new UnsupportedOperationException("Not yet implemented.");
- }
- public Rectangle getBoundsPrivate()
- {
- // TODO: Implement this.
- throw new UnsupportedOperationException("Not yet implemented.");
- }
- /**
- * @since 1.5
- */
- public void updateAlwaysOnTop()
- {
- }
- /**
- * @since 1.5
- */
- public boolean requestWindowFocus ()
- {
- return false;
- }
- public void setAlwaysOnTop(boolean alwaysOnTop)
- {
- throw new UnsupportedOperationException("not implemented yet");
- }
- public void updateFocusableWindowState()
- {
- throw new UnsupportedOperationException("not implemented yet");
- }
- public void setModalBlocked(Dialog blocker, boolean blocked)
- {
- throw new UnsupportedOperationException("not implemented yet");
- }
- public void updateMinimumSize()
- {
- throw new UnsupportedOperationException("not implemented yet");
- }
- public void updateIconImages()
- {
- throw new UnsupportedOperationException("not implemented yet");
- }
- }
|