summaryrefslogtreecommitdiffstats
path: root/libjava/gnu/java/awt/peer/gtk
diff options
context:
space:
mode:
authorfitzsim <fitzsim@138bc75d-0d04-0410-961f-82ee72b054a4>2003-10-09 00:26:29 +0000
committerfitzsim <fitzsim@138bc75d-0d04-0410-961f-82ee72b054a4>2003-10-09 00:26:29 +0000
commitafdfc197c91adb0d71a2b07f8f71457dc157eaf3 (patch)
treee8c4b26ac43e59bc2b91154944ca054acfa5b1ae /libjava/gnu/java/awt/peer/gtk
parent945d9f0e95b5519f87de0221eed0061dd7be321b (diff)
downloadppe42-gcc-afdfc197c91adb0d71a2b07f8f71457dc157eaf3.tar.gz
ppe42-gcc-afdfc197c91adb0d71a2b07f8f71457dc157eaf3.zip
2003-10-08 Thomas Fitzsimmons <fitzsim@redhat.com>
* gnu/java/awt/peer/gtk/GtkButtonPeer.java (handleEvent): Remove modality check. * gnu/java/awt/peer/gtk/GtkDialogPeer.java (initializeInsets): Initialize insets to use latest insets. * gnu/java/awt/peer/gtk/GtkFramePeer.java: Likewise. * gnu/java/awt/peer/gtk/GtkWindowPeer.java (latestInsets): New field. (postConfigureEvent): Update latestInsets field when insets change. Remove call to setSize. Move validate call outside of if blocks. (setVisible): Call setBounds before showing window. (nativeSetVisible): New native method. * java/awt/Window.java (show): Show visible owned windows. (hide): Hide visible owned windows. * jni/gtk-peer/gnu_java_awt_peer_gtk_GtkEvents.c (awt_event_handler): Implement modality using GTK grabs. * jni/gtk-peer/gnu_java_awt_peer_gtk_GtkMainThread.c (global_gtk_window_group): New global variable. (gtkInit): Initialize global_gtk_window_group. * jni/gtk-peer/gnu_java_awt_peer_gtk_GtkWindowPeer.c (create): Clamp width and height values to at least 1. Add this window to the global GTK window group. (setVisible): Rename to nativeSetVisible. (setup_window): Remove function. (setSize): Clamp width and height values to at least 1. (nativeSetBounds): Likewise. (gdk_window_get_root_geometry): Remove function. * jni/gtk-peer/gtkpeer.h: Remove gdk_window_get_root_geometry and setup_window declarations. Declare global_gtk_window_group. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@72252 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'libjava/gnu/java/awt/peer/gtk')
-rw-r--r--libjava/gnu/java/awt/peer/gtk/GtkButtonPeer.java3
-rw-r--r--libjava/gnu/java/awt/peer/gtk/GtkDialogPeer.java12
-rw-r--r--libjava/gnu/java/awt/peer/gtk/GtkFramePeer.java8
-rw-r--r--libjava/gnu/java/awt/peer/gtk/GtkWindowPeer.java42
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);
+ }
}
OpenPOWER on IntegriCloud