diff options
Diffstat (limited to 'libjava/gnu/java/awt')
| -rw-r--r-- | libjava/gnu/java/awt/peer/gtk/GtkButtonPeer.java | 3 | ||||
| -rw-r--r-- | libjava/gnu/java/awt/peer/gtk/GtkDialogPeer.java | 12 | ||||
| -rw-r--r-- | libjava/gnu/java/awt/peer/gtk/GtkFramePeer.java | 8 | ||||
| -rw-r--r-- | libjava/gnu/java/awt/peer/gtk/GtkWindowPeer.java | 42 |
4 files changed, 47 insertions, 18 deletions
diff --git a/libjava/gnu/java/awt/peer/gtk/GtkButtonPeer.java b/libjava/gnu/java/awt/peer/gtk/GtkButtonPeer.java index 1b057507b02..0801f9c6ec0 100644 --- a/libjava/gnu/java/awt/peer/gtk/GtkButtonPeer.java +++ b/libjava/gnu/java/awt/peer/gtk/GtkButtonPeer.java @@ -66,8 +66,7 @@ public class GtkButtonPeer extends GtkComponentPeer public void handleEvent (AWTEvent e) { - if (e.getID () == MouseEvent.MOUSE_CLICKED && isEnabled () - && !modalHasGrab ()) + if (e.getID () == MouseEvent.MOUSE_CLICKED && isEnabled ()) { MouseEvent me = (MouseEvent) e; if (!me.isConsumed () diff --git a/libjava/gnu/java/awt/peer/gtk/GtkDialogPeer.java b/libjava/gnu/java/awt/peer/gtk/GtkDialogPeer.java index e7b047ea2e2..551d05ded8f 100644 --- a/libjava/gnu/java/awt/peer/gtk/GtkDialogPeer.java +++ b/libjava/gnu/java/awt/peer/gtk/GtkDialogPeer.java @@ -54,11 +54,13 @@ public class GtkDialogPeer extends GtkWindowPeer void initializeInsets () { - // Unfortunately, X does not provide a clean way to calculate the - // dimensions of a dialog's borders before it has been displayed. - // So we guess and then fix the dimensions upon receipt of the - // first configure event. - insets = new Insets (20, 6, 6, 6); + synchronized (latestInsets) + { + insets = new Insets (latestInsets.top, + latestInsets.left, + latestInsets.bottom, + latestInsets.right); + } } void create () diff --git a/libjava/gnu/java/awt/peer/gtk/GtkFramePeer.java b/libjava/gnu/java/awt/peer/gtk/GtkFramePeer.java index b44a02d13db..ce5aa71e573 100644 --- a/libjava/gnu/java/awt/peer/gtk/GtkFramePeer.java +++ b/libjava/gnu/java/awt/peer/gtk/GtkFramePeer.java @@ -76,7 +76,13 @@ public class GtkFramePeer extends GtkWindowPeer // dimensions of a frame's borders before it has been displayed. // So we guess and then fix the dimensions upon receipt of the // first configure event. - insets = new Insets (20, 6, 6, 6); + synchronized (latestInsets) + { + insets = new Insets (latestInsets.top, + latestInsets.left, + latestInsets.bottom, + latestInsets.right); + } } void create () diff --git a/libjava/gnu/java/awt/peer/gtk/GtkWindowPeer.java b/libjava/gnu/java/awt/peer/gtk/GtkWindowPeer.java index be615042524..8875913d4fc 100644 --- a/libjava/gnu/java/awt/peer/gtk/GtkWindowPeer.java +++ b/libjava/gnu/java/awt/peer/gtk/GtkWindowPeer.java @@ -56,6 +56,15 @@ public class GtkWindowPeer extends GtkContainerPeer static protected final int GDK_WINDOW_TYPE_HINT_DOCK = 6; static protected final int GDK_WINDOW_TYPE_HINT_DESKTOP = 7; + // Unfortunately, X does not provide a clean way to calculate the + // dimensions of a window's borders before it has been displayed. + // So when creating the application's first window we guess the + // border dimensions. Then if need be for that window, we fix the + // dimensions upon receipt of the first configure event. Windows + // created after the first one will use the latest inset values + // received in postConfigureEvent. + static Insets latestInsets = new Insets (20, 6, 6, 6); + native void create (int type, boolean decorated, int width, int height, GtkWindowPeer parent); @@ -109,18 +118,19 @@ public class GtkWindowPeer extends GtkContainerPeer set ("title", title); } + native void setSize (int width, int height); + public void setResizable (boolean resizable) { // Call setSize; otherwise when resizable is changed from true to // false the window will shrink to the dimensions it had before it // was resizable. setSize (awtComponent.getWidth() - insets.left - insets.right, - awtComponent.getHeight() - insets.top - insets.bottom); + awtComponent.getHeight() - insets.top - insets.bottom); set ("allow_shrink", resizable); set ("allow_grow", resizable); } - native void setSize (int width, int height); native void setBoundsCallback (Window window, int x, int y, int width, int height); @@ -159,7 +169,13 @@ public class GtkWindowPeer extends GtkContainerPeer insets.bottom = bottom; insets.right = right; - awtComponent.validate(); + synchronized (latestInsets) + { + latestInsets.top = top; + latestInsets.left = left; + latestInsets.bottom = bottom; + latestInsets.right = right; + } } else { @@ -178,15 +194,21 @@ public class GtkWindowPeer extends GtkContainerPeer frame_y, frame_width, frame_height); - - if (frame_width != awtComponent.getWidth() - || frame_height != awtComponent.getHeight()) - setSize (width, height); - - awtComponent.validate(); } } + awtComponent.validate(); } - native public void setVisible (boolean b); + native void nativeSetVisible (boolean b); + public void setVisible (boolean b) + { + // Prevent the window manager from automatically placing this + // window when it is shown. + if (b) + setBounds (awtComponent.getX(), + awtComponent.getY(), + awtComponent.getWidth(), + awtComponent.getHeight()); + nativeSetVisible (b); + } } |

