From fa0b06bbe59d32545aeaa1754b3f4024f91798ce Mon Sep 17 00:00:00 2001 From: anthony Date: Tue, 30 Nov 2010 17:36:56 +0300 Subject: [PATCH] 6998592: FileDialog tests crashed on solaris Summary: Override GtkFileDialogPeer.toFront() Reviewed-by: art, dcherepanov --- make/sun/xawt/mapfile-vers | 1 + .../sun/awt/X11/GtkFileDialogPeer.java | 5 ++++- src/solaris/native/sun/awt/gtk2_interface.c | 1 + src/solaris/native/sun/awt/gtk2_interface.h | 1 + .../sun/awt/sun_awt_X11_GtkFileDialogPeer.c | 22 +++++++++++++++++++ .../sun/awt/sun_awt_X11_GtkFileDialogPeer.h | 8 +++++++ 6 files changed, 37 insertions(+), 1 deletion(-) diff --git a/make/sun/xawt/mapfile-vers b/make/sun/xawt/mapfile-vers index 0d951efff..920d829fc 100644 --- a/make/sun/xawt/mapfile-vers +++ b/make/sun/xawt/mapfile-vers @@ -432,6 +432,7 @@ SUNWprivate_1.1 { Java_sun_awt_X11_GtkFileDialogPeer_initIDs; Java_sun_awt_X11_GtkFileDialogPeer_run; Java_sun_awt_X11_GtkFileDialogPeer_quit; + Java_sun_awt_X11_GtkFileDialogPeer_toFront; Java_sun_print_CUPSPrinter_initIDs; Java_sun_print_CUPSPrinter_getCupsServer; diff --git a/src/solaris/classes/sun/awt/X11/GtkFileDialogPeer.java b/src/solaris/classes/sun/awt/X11/GtkFileDialogPeer.java index f67efb57f..572a92000 100644 --- a/src/solaris/classes/sun/awt/X11/GtkFileDialogPeer.java +++ b/src/solaris/classes/sun/awt/X11/GtkFileDialogPeer.java @@ -57,9 +57,12 @@ class GtkFileDialogPeer extends XDialogPeer implements FileDialogPeer { private native void run(String title, int mode, String dir, String file, FilenameFilter filter, boolean isMultipleMode); - private native void quit(); + @Override + public native void toFront(); + + /** * Called exclusively by the native C code. */ diff --git a/src/solaris/native/sun/awt/gtk2_interface.c b/src/solaris/native/sun/awt/gtk2_interface.c index a26a839d1..767fe47cf 100644 --- a/src/solaris/native/sun/awt/gtk2_interface.c +++ b/src/solaris/native/sun/awt/gtk2_interface.c @@ -607,6 +607,7 @@ gboolean gtk2_load() fp_gtk_tree_view_new = dl_symbol("gtk_tree_view_new"); fp_gtk_viewport_new = dl_symbol("gtk_viewport_new"); fp_gtk_window_new = dl_symbol("gtk_window_new"); + fp_gtk_window_present = dl_symbol("gtk_window_present"); fp_gtk_dialog_new = dl_symbol("gtk_dialog_new"); fp_gtk_frame_new = dl_symbol("gtk_frame_new"); diff --git a/src/solaris/native/sun/awt/gtk2_interface.h b/src/solaris/native/sun/awt/gtk2_interface.h index 3ecaf94af..c7265bff4 100644 --- a/src/solaris/native/sun/awt/gtk2_interface.h +++ b/src/solaris/native/sun/awt/gtk2_interface.h @@ -749,6 +749,7 @@ int (*fp_gdk_pixbuf_get_rowstride)(const GdkPixbuf *pixbuf); int (*fp_gdk_pixbuf_get_width)(const GdkPixbuf *pixbuf); GdkPixbuf *(*fp_gdk_pixbuf_new_from_file)(const char *filename, GError **error); void (*fp_gtk_widget_destroy)(GtkWidget *widget); +void (*fp_gtk_window_present)(GtkWindow *window); /** diff --git a/src/solaris/native/sun/awt/sun_awt_X11_GtkFileDialogPeer.c b/src/solaris/native/sun/awt/sun_awt_X11_GtkFileDialogPeer.c index 890284e57..1832401e4 100644 --- a/src/solaris/native/sun/awt/sun_awt_X11_GtkFileDialogPeer.c +++ b/src/solaris/native/sun/awt/sun_awt_X11_GtkFileDialogPeer.c @@ -80,6 +80,28 @@ JNIEXPORT void JNICALL Java_sun_awt_X11_GtkFileDialogPeer_quit quit(env, jpeer, FALSE); } +/* + * Class: sun_awt_X11_GtkFileDialogPeer + * Method: toFront + * Signature: ()V + */ +JNIEXPORT void JNICALL Java_sun_awt_X11_GtkFileDialogPeer_toFront +(JNIEnv * env, jobject jpeer) +{ + GtkWidget * dialog; + + fp_gdk_threads_enter(); + + dialog = (GtkWidget*)jlong_to_ptr( + (*env)->GetLongField(env, jpeer, widgetFieldID)); + + if (dialog != NULL) { + fp_gtk_window_present((GtkWindow*)dialog); + } + + fp_gdk_threads_leave(); +} + /** * Convert a GSList to an array of filenames (without the parent folder) */ diff --git a/src/solaris/native/sun/awt/sun_awt_X11_GtkFileDialogPeer.h b/src/solaris/native/sun/awt/sun_awt_X11_GtkFileDialogPeer.h index 7c3c2338d..81ed11ae5 100644 --- a/src/solaris/native/sun/awt/sun_awt_X11_GtkFileDialogPeer.h +++ b/src/solaris/native/sun/awt/sun_awt_X11_GtkFileDialogPeer.h @@ -33,6 +33,14 @@ JNIEXPORT void JNICALL Java_sun_awt_X11_GtkFileDialogPeer_run JNIEXPORT void JNICALL Java_sun_awt_X11_GtkFileDialogPeer_quit (JNIEnv *, jobject); +/* + * Class: sun_awt_X11_GtkFileDialogPeer + * Method: toFront + * Signature: ()V + */ +JNIEXPORT void JNICALL Java_sun_awt_X11_GtkFileDialogPeer_toFront +(JNIEnv *, jobject); + #ifdef __cplusplus } #endif -- GitLab