diff options
author | Lillian Angel <langel@redhat.com> | 2005-11-15 15:11:54 +0000 |
---|---|---|
committer | Lillian Angel <langel@redhat.com> | 2005-11-15 15:11:54 +0000 |
commit | bd43e448e6e0afc373b17858d43a942bb6852397 (patch) | |
tree | 7db66aa5dfae02ed48be7f1fbf6b734bbbf06e1b | |
parent | 57edb56e055692ae39329ca042f8e4c5a98edd19 (diff) | |
download | classpath-bd43e448e6e0afc373b17858d43a942bb6852397.tar.gz |
2005-11-15 Lillian Angel <langel@redhat.com>
* gnu/java/awt/peer/gtk/GtkComponentPeer.java
(gtkWindowGetLocationOnScreen): Added declaration
for native function.
(getLocationOnScreen): Changed to handle 2 different cases.
If the component is a window, gtkWindowGetLocationOnScreen is
called; otherwise, gtkWidetGetLocationOnScreen.
* include/gnu_java_awt_peer_gtk_GtkComponentPeer.h:
Added signature for new function Java_gnu_java_awt_peer_
gtk_GtkComponentPeer_gtkWindowGetLocationOnScreen.
* native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkComponentPeer.c
(Java_gnu_java_awt_peer_gtk_GtkComponentPeer_gtkWidgetGetLocationOnScreen):
Implemented.
-rw-r--r-- | gnu/java/awt/peer/gtk/GtkComponentPeer.java | 9 | ||||
-rw-r--r-- | include/gnu_java_awt_peer_gtk_GtkComponentPeer.h | 1 | ||||
-rw-r--r-- | native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkComponentPeer.c | 35 |
3 files changed, 37 insertions, 8 deletions
diff --git a/gnu/java/awt/peer/gtk/GtkComponentPeer.java b/gnu/java/awt/peer/gtk/GtkComponentPeer.java index 7cc07cceb..fe0dae70d 100644 --- a/gnu/java/awt/peer/gtk/GtkComponentPeer.java +++ b/gnu/java/awt/peer/gtk/GtkComponentPeer.java @@ -71,6 +71,7 @@ import java.awt.image.ImageProducer; import java.awt.image.VolatileImage; import java.awt.peer.ComponentPeer; import java.awt.peer.ContainerPeer; +import java.awt.peer.WindowPeer; import java.util.Timer; import java.util.TimerTask; @@ -98,6 +99,7 @@ public class GtkComponentPeer extends GtkGenericPeer native int[] gtkWidgetGetBackground (); native void gtkWidgetGetDimensions (int[] dim); native void gtkWidgetGetPreferredDimensions (int[] dim); + native void gtkWindowGetLocationOnScreen (int[] point); native void gtkWidgetGetLocationOnScreen (int[] point); native void gtkWidgetSetCursor (int type); native void gtkWidgetSetCursorUnlocked (int type); @@ -270,8 +272,11 @@ public class GtkComponentPeer extends GtkGenericPeer public Point getLocationOnScreen () { int point[] = new int[2]; - gtkWidgetGetLocationOnScreen (point); - return new Point (point[0] - insets.left, point[1] - insets.top); + if( this instanceof WindowPeer ) + gtkWindowGetLocationOnScreen (point); + else + gtkWidgetGetLocationOnScreen (point); + return new Point (point[0], point[1]); } public Dimension getMinimumSize () diff --git a/include/gnu_java_awt_peer_gtk_GtkComponentPeer.h b/include/gnu_java_awt_peer_gtk_GtkComponentPeer.h index 2c32e3f6c..da86e23a8 100644 --- a/include/gnu_java_awt_peer_gtk_GtkComponentPeer.h +++ b/include/gnu_java_awt_peer_gtk_GtkComponentPeer.h @@ -16,6 +16,7 @@ JNIEXPORT jintArray JNICALL Java_gnu_java_awt_peer_gtk_GtkComponentPeer_gtkWidge JNIEXPORT jintArray JNICALL Java_gnu_java_awt_peer_gtk_GtkComponentPeer_gtkWidgetGetBackground (JNIEnv *env, jobject); JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GtkComponentPeer_gtkWidgetGetDimensions (JNIEnv *env, jobject, jintArray); JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GtkComponentPeer_gtkWidgetGetPreferredDimensions (JNIEnv *env, jobject, jintArray); +JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GtkComponentPeer_gtkWindowGetLocationOnScreen (JNIEnv *env, jobject, jintArray); JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GtkComponentPeer_gtkWidgetGetLocationOnScreen (JNIEnv *env, jobject, jintArray); JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GtkComponentPeer_gtkWidgetSetCursor (JNIEnv *env, jobject, jint); JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GtkComponentPeer_gtkWidgetSetCursorUnlocked (JNIEnv *env, jobject, jint); diff --git a/native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkComponentPeer.c b/native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkComponentPeer.c index 85ce2ae65..6de7b61b8 100644 --- a/native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkComponentPeer.c +++ b/native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkComponentPeer.c @@ -454,7 +454,7 @@ Java_gnu_java_awt_peer_gtk_GtkComponentPeer_gtkWidgetDispatchKeyEvent * Find the origin of a widget's window. */ JNIEXPORT void JNICALL -Java_gnu_java_awt_peer_gtk_GtkComponentPeer_gtkWidgetGetLocationOnScreen +Java_gnu_java_awt_peer_gtk_GtkComponentPeer_gtkWindowGetLocationOnScreen (JNIEnv * env, jobject obj, jintArray jpoint) { void *ptr; @@ -467,11 +467,34 @@ Java_gnu_java_awt_peer_gtk_GtkComponentPeer_gtkWidgetGetLocationOnScreen gdk_window_get_root_origin (GTK_WIDGET (ptr)->window, point, point+1); - if (!GTK_IS_CONTAINER (ptr)) - { - *point += GTK_WIDGET(ptr)->allocation.x; - *(point+1) += GTK_WIDGET(ptr)->allocation.y; - } + (*env)->ReleaseIntArrayElements(env, jpoint, point, 0); + + gdk_threads_leave (); +} + +/* + * Find the origin of a widget + */ +JNIEXPORT void JNICALL +Java_gnu_java_awt_peer_gtk_GtkComponentPeer_gtkWidgetGetLocationOnScreen + (JNIEnv * env, jobject obj, jintArray jpoint) +{ + void *ptr; + jint *point; + GtkWidget *widget; + + gdk_threads_enter (); + + ptr = NSA_GET_PTR (env, obj); + point = (*env)->GetIntArrayElements (env, jpoint, 0); + + widget = GTK_WIDGET(ptr); + while(gtk_widget_get_parent(widget) != NULL) + widget = gtk_widget_get_parent(widget); + gdk_window_get_position (GTK_WIDGET(widget)->window, point, point+1); + + *point += GTK_WIDGET(ptr)->allocation.x; + *(point+1) += GTK_WIDGET(ptr)->allocation.y; (*env)->ReleaseIntArrayElements(env, jpoint, point, 0); |