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:
parent
6037221c71
commit
a8c2775c37
6 changed files with 109 additions and 18 deletions
|
@ -1,5 +1,24 @@
|
||||||
2004-01-05 Thomas Fitzsimmons <fitzsim@redhat.com>
|
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,
|
* gnu/java/awt/peer/gtk/GtkScrollPanePeer.java,
|
||||||
jni/gtk-peer/gnu_java_awt_peer_gtk_GtkScrollPanePeer.c
|
jni/gtk-peer/gnu_java_awt_peer_gtk_GtkScrollPanePeer.c
|
||||||
(create(int, int)): New method.
|
(create(int, int)): New method.
|
||||||
|
|
|
@ -50,18 +50,29 @@ import java.awt.Toolkit;
|
||||||
*/
|
*/
|
||||||
public class EmbeddedWindow extends Frame
|
public class EmbeddedWindow extends Frame
|
||||||
{
|
{
|
||||||
private int window_id;
|
private long handle;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Creates an window to be embedded into another application.
|
* Creates a window to be embedded into another application. The
|
||||||
*
|
* window will only be embedded after its setHandle method has been
|
||||||
* @param window_id The native handle to the screen area where the AWT window
|
* called.
|
||||||
* should be embedded.
|
|
||||||
*/
|
*/
|
||||||
public EmbeddedWindow (int window_id)
|
public EmbeddedWindow ()
|
||||||
{
|
{
|
||||||
super();
|
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.
|
// an AWT internal java.awt.Component.peer member variable.
|
||||||
native void setWindowPeer (EmbeddedWindowPeer peer);
|
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
|
* Gets the native handle of the screen area where the window will
|
||||||
* be embedded.
|
* be embedded.
|
||||||
*
|
*
|
||||||
* @return The native handle that was passed to the constructor.
|
* @return The native handle that was passed to the constructor.
|
||||||
*/
|
*/
|
||||||
public int getHandle()
|
public long getHandle()
|
||||||
{
|
{
|
||||||
return window_id;
|
return handle;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -43,4 +43,5 @@ import java.awt.peer.FramePeer;
|
||||||
|
|
||||||
public interface EmbeddedWindowPeer extends FramePeer
|
public interface EmbeddedWindowPeer extends FramePeer
|
||||||
{
|
{
|
||||||
|
void embed (long handle);
|
||||||
}
|
}
|
||||||
|
|
|
@ -45,11 +45,25 @@ import gnu.java.awt.peer.EmbeddedWindowPeer;
|
||||||
public class GtkEmbeddedWindowPeer extends GtkFramePeer
|
public class GtkEmbeddedWindowPeer extends GtkFramePeer
|
||||||
implements EmbeddedWindowPeer
|
implements EmbeddedWindowPeer
|
||||||
{
|
{
|
||||||
native void create(int window_id);
|
native void create (long socket_id);
|
||||||
|
|
||||||
void create ()
|
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)
|
public GtkEmbeddedWindowPeer (EmbeddedWindow w)
|
||||||
|
|
|
@ -42,7 +42,7 @@ exception statement from your version. */
|
||||||
|
|
||||||
JNIEXPORT void JNICALL
|
JNIEXPORT void JNICALL
|
||||||
Java_gnu_java_awt_peer_gtk_GtkEmbeddedWindowPeer_create
|
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 *window;
|
||||||
GtkWidget *vbox, *layout;
|
GtkWidget *vbox, *layout;
|
||||||
|
@ -51,8 +51,8 @@ Java_gnu_java_awt_peer_gtk_GtkEmbeddedWindowPeer_create
|
||||||
NSA_SET_GLOBAL_REF (env, obj);
|
NSA_SET_GLOBAL_REF (env, obj);
|
||||||
|
|
||||||
gdk_threads_enter ();
|
gdk_threads_enter ();
|
||||||
|
|
||||||
window = gtk_plug_new (window_id);
|
window = gtk_plug_new ((GdkNativeWindow) socket_id);
|
||||||
|
|
||||||
vbox = gtk_vbox_new (0, 0);
|
vbox = gtk_vbox_new (0, 0);
|
||||||
layout = gtk_layout_new (NULL, NULL);
|
layout = gtk_layout_new (NULL, NULL);
|
||||||
|
@ -66,3 +66,21 @@ Java_gnu_java_awt_peer_gtk_GtkEmbeddedWindowPeer_create
|
||||||
|
|
||||||
NSA_SET_PTR (env, obj, window);
|
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 ();
|
||||||
|
}
|
||||||
|
|
|
@ -998,10 +998,20 @@ pre_event_handler (GtkWidget *widget, GdkEvent *event, jobject peer)
|
||||||
gdk_threads_leave ();
|
gdk_threads_leave ();
|
||||||
|
|
||||||
/* FIXME: hard-code these values for now. */
|
/* FIXME: hard-code these values for now. */
|
||||||
top = 20;
|
if (GTK_IS_PLUG (widget))
|
||||||
left = 6;
|
{
|
||||||
bottom = 6;
|
top = 0;
|
||||||
right = 6;
|
left = 0;
|
||||||
|
bottom = 0;
|
||||||
|
right = 0;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
top = 20;
|
||||||
|
left = 6;
|
||||||
|
bottom = 6;
|
||||||
|
right = 6;
|
||||||
|
}
|
||||||
|
|
||||||
(*gdk_env)->CallVoidMethod (gdk_env, peer,
|
(*gdk_env)->CallVoidMethod (gdk_env, peer,
|
||||||
postConfigureEventID,
|
postConfigureEventID,
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue