2004-01-05 Thomas Fitzsimmons <fitzsim@redhat.com>

* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkEvents.c
	(pre_event_handler): Set all insets to 0 when a Configure event
	is received for a GtkPlug.
	* gnu/java/awt/EmbeddedWindow.java (window_id): Rename handle.
	Make handle long, not int.
	(EmbeddedWindow()): New constructor.
	(EmbeddedWindow(int)): Rename window_id to handle.  Make handle
	long, not int.
	(setHandle): New method.
	(getHandle): Return long, not int.
	* gnu/java/awt/peer/EmbeddedWindowPeer.java (embed): New method
	declaration.
	* gnu/java/awt/peer/gtk/GtkEmbeddedWindowPeer.java,
	jni/gtk-peer/gnu_java_awt_peer_gtk_GtkEmbeddedWindowPeer.c:
	(create(long)): Take long parameter, not int.  Cast gtk_plug_new
	argument to GdkNativeWindow.
	(construct): New method.
	(embed): New method.

From-SVN: r75447
This commit is contained in:
Thomas Fitzsimmons 2004-01-05 21:41:21 +00:00 committed by Thomas Fitzsimmons
parent 6037221c71
commit a8c2775c37
6 changed files with 109 additions and 18 deletions

View file

@ -1,5 +1,24 @@
2004-01-05 Thomas Fitzsimmons <fitzsim@redhat.com>
* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkEvents.c
(pre_event_handler): Set all insets to 0 when a Configure event
is received for a GtkPlug.
* gnu/java/awt/EmbeddedWindow.java (window_id): Rename handle.
Make handle long, not int.
(EmbeddedWindow()): New constructor.
(EmbeddedWindow(int)): Rename window_id to handle. Make handle
long, not int.
(setHandle): New method.
(getHandle): Return long, not int.
* gnu/java/awt/peer/EmbeddedWindowPeer.java (embed): New method
declaration.
* gnu/java/awt/peer/gtk/GtkEmbeddedWindowPeer.java,
jni/gtk-peer/gnu_java_awt_peer_gtk_GtkEmbeddedWindowPeer.c:
(create(long)): Take long parameter, not int. Cast gtk_plug_new
argument to GdkNativeWindow.
(construct): New method.
(embed): New method.
* gnu/java/awt/peer/gtk/GtkScrollPanePeer.java,
jni/gtk-peer/gnu_java_awt_peer_gtk_GtkScrollPanePeer.c
(create(int, int)): New method.

View file

@ -50,18 +50,29 @@ import java.awt.Toolkit;
*/
public class EmbeddedWindow extends Frame
{
private int window_id;
private long handle;
/**
* Creates an window to be embedded into another application.
*
* @param window_id The native handle to the screen area where the AWT window
* should be embedded.
* Creates a window to be embedded into another application. The
* window will only be embedded after its setHandle method has been
* called.
*/
public EmbeddedWindow (int window_id)
public EmbeddedWindow ()
{
super();
this.window_id = window_id;
this.handle = 0;
}
/**
* Creates a window to be embedded into another application.
*
* @param handle the native handle to the screen area where the AWT
* window should be embedded
*/
public EmbeddedWindow (long handle)
{
super();
this.handle = handle;
}
/**
@ -83,14 +94,32 @@ public class EmbeddedWindow extends Frame
// an AWT internal java.awt.Component.peer member variable.
native void setWindowPeer (EmbeddedWindowPeer peer);
/**
* If the native peer for this embedded window has been created,
* then setHandle will embed the window. If not, setHandle tells
* us where to embed ourselves when our peer is created.
*
* @param handle the native handle to the screen area where the AWT
* window should be embedded
*/
public void setHandle(long handle)
{
if (this.handle != 0)
throw new RuntimeException ("EmbeddedWindow is already embedded");
this.handle = handle;
if (peer != null)
((EmbeddedWindowPeer) peer).embed (this.handle);
}
/**
* Gets the native handle of the screen area where the window will
* be embedded.
*
* @return The native handle that was passed to the constructor.
*/
public int getHandle()
public long getHandle()
{
return window_id;
return handle;
}
}

View file

@ -43,4 +43,5 @@ import java.awt.peer.FramePeer;
public interface EmbeddedWindowPeer extends FramePeer
{
void embed (long handle);
}

View file

@ -45,11 +45,25 @@ import gnu.java.awt.peer.EmbeddedWindowPeer;
public class GtkEmbeddedWindowPeer extends GtkFramePeer
implements EmbeddedWindowPeer
{
native void create(int window_id);
native void create (long socket_id);
void create ()
{
create (((EmbeddedWindow) awtComponent).getHandle());
create (((EmbeddedWindow) awtComponent).getHandle ());
}
native void construct (long socket_id);
// FIXME: embed doesn't work right now, though I believe it should.
// This means that you can't call setVisible (true) on an
// EmbeddedWindow before calling setHandle with a valid handle. The
// problem is that somewhere after the call to
// GtkEmbeddedWindow.create and before the call to
// GtkEmbeddedWindow.construct, the GtkPlug peer is being realized.
// GtkSocket silently fails to embed an already-realized GtkPlug.
public void embed (long handle)
{
construct (handle);
}
public GtkEmbeddedWindowPeer (EmbeddedWindow w)

View file

@ -42,7 +42,7 @@ exception statement from your version. */
JNIEXPORT void JNICALL
Java_gnu_java_awt_peer_gtk_GtkEmbeddedWindowPeer_create
(JNIEnv *env, jobject obj, jint window_id)
(JNIEnv *env, jobject obj, jlong socket_id)
{
GtkWidget *window;
GtkWidget *vbox, *layout;
@ -51,8 +51,8 @@ Java_gnu_java_awt_peer_gtk_GtkEmbeddedWindowPeer_create
NSA_SET_GLOBAL_REF (env, obj);
gdk_threads_enter ();
window = gtk_plug_new (window_id);
window = gtk_plug_new ((GdkNativeWindow) socket_id);
vbox = gtk_vbox_new (0, 0);
layout = gtk_layout_new (NULL, NULL);
@ -66,3 +66,21 @@ Java_gnu_java_awt_peer_gtk_GtkEmbeddedWindowPeer_create
NSA_SET_PTR (env, obj, window);
}
JNIEXPORT void JNICALL
Java_gnu_java_awt_peer_gtk_GtkEmbeddedWindowPeer_construct
(JNIEnv *env, jobject obj, jlong socket_id)
{
void *ptr;
ptr = NSA_GET_PTR (env, obj);
gdk_threads_enter ();
if (GTK_WIDGET_REALIZED (GTK_WIDGET (ptr)))
g_printerr ("ERROR: GtkPlug is already realized\n");
gtk_plug_construct (GTK_PLUG (ptr), (GdkNativeWindow) socket_id);
gdk_threads_leave ();
}

View file

@ -998,10 +998,20 @@ pre_event_handler (GtkWidget *widget, GdkEvent *event, jobject peer)
gdk_threads_leave ();
/* FIXME: hard-code these values for now. */
top = 20;
left = 6;
bottom = 6;
right = 6;
if (GTK_IS_PLUG (widget))
{
top = 0;
left = 0;
bottom = 0;
right = 0;
}
else
{
top = 20;
left = 6;
bottom = 6;
right = 6;
}
(*gdk_env)->CallVoidMethod (gdk_env, peer,
postConfigureEventID,