--- a/jdk/make/sun/xawt/mapfile-vers Fri Feb 25 13:58:54 2011 +0300
+++ b/jdk/make/sun/xawt/mapfile-vers Fri Feb 25 15:33:50 2011 +0300
@@ -432,6 +432,7 @@
Java_sun_awt_X11_GtkFileDialogPeer_run;
Java_sun_awt_X11_GtkFileDialogPeer_quit;
Java_sun_awt_X11_GtkFileDialogPeer_toFront;
+ Java_sun_awt_X11_GtkFileDialogPeer_setBounds;
Java_sun_print_CUPSPrinter_initIDs;
Java_sun_print_CUPSPrinter_getCupsServer;
--- a/jdk/src/solaris/classes/sun/awt/X11/GtkFileDialogPeer.java Fri Feb 25 13:58:54 2011 +0300
+++ b/jdk/src/solaris/classes/sun/awt/X11/GtkFileDialogPeer.java Fri Feb 25 15:33:50 2011 +0300
@@ -56,12 +56,14 @@
}
private native void run(String title, int mode, String dir, String file,
- FilenameFilter filter, boolean isMultipleMode);
+ FilenameFilter filter, boolean isMultipleMode, int x, int y);
private native void quit();
@Override
public native void toFront();
+ @Override
+ public native void setBounds(int x, int y, int width, int height, int op);
/**
* Called exclusively by the native C code.
@@ -106,9 +108,8 @@
Thread t = new Thread() {
public void run() {
GtkFileDialogPeer.this.run(fd.getTitle(), fd.getMode(),
- fd.getDirectory(), fd.getFile(), fd
- .getFilenameFilter(), fd
- .isMultipleMode());
+ fd.getDirectory(), fd.getFile(), fd.getFilenameFilter(), fd.isMultipleMode(),
+ fd.getX(), fd.getY());
fd.setVisible(false);
}
};
--- a/jdk/src/solaris/native/sun/awt/gtk2_interface.c Fri Feb 25 13:58:54 2011 +0300
+++ b/jdk/src/solaris/native/sun/awt/gtk2_interface.c Fri Feb 25 15:33:50 2011 +0300
@@ -608,7 +608,10 @@
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_window_move = dl_symbol("gtk_window_move");
+ fp_gtk_window_resize = dl_symbol("gtk_window_resize");
+
+ fp_gtk_dialog_new = dl_symbol("gtk_dialog_new");
fp_gtk_frame_new = dl_symbol("gtk_frame_new");
fp_gtk_adjustment_new = dl_symbol("gtk_adjustment_new");
--- a/jdk/src/solaris/native/sun/awt/gtk2_interface.h Fri Feb 25 13:58:54 2011 +0300
+++ b/jdk/src/solaris/native/sun/awt/gtk2_interface.h Fri Feb 25 15:33:50 2011 +0300
@@ -750,7 +750,8 @@
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);
-
+void (*fp_gtk_window_move)(GtkWindow *window, gint x, gint y);
+void (*fp_gtk_window_resize)(GtkWindow *window, gint width, gint height);
/**
* Function Pointers for GtkFileChooser
--- a/jdk/src/solaris/native/sun/awt/sun_awt_X11_GtkFileDialogPeer.c Fri Feb 25 13:58:54 2011 +0300
+++ b/jdk/src/solaris/native/sun/awt/sun_awt_X11_GtkFileDialogPeer.c Fri Feb 25 15:33:50 2011 +0300
@@ -102,6 +102,33 @@
fp_gdk_threads_leave();
}
+/*
+ * Class: sun_awt_X11_GtkFileDialogPeer
+ * Method: setBounds
+ * Signature: (IIIII)V
+ */
+JNIEXPORT void JNICALL Java_sun_awt_X11_GtkFileDialogPeer_setBounds
+(JNIEnv * env, jobject jpeer, jint x, jint y, jint width, jint height, jint op)
+{
+ GtkWindow* dialog;
+
+ fp_gdk_threads_enter();
+
+ dialog = (GtkWindow*)jlong_to_ptr(
+ (*env)->GetLongField(env, jpeer, widgetFieldID));
+
+ if (dialog != NULL) {
+ if (x >= 0 && y >= 0) {
+ fp_gtk_window_move(dialog, (gint)x, (gint)y);
+ }
+ if (width > 0 && height > 0) {
+ fp_gtk_window_resize(dialog, (gint)width, (gint)height);
+ }
+ }
+
+ fp_gdk_threads_leave();
+}
+
/**
* Convert a GSList to an array of filenames (without the parent folder)
*/
@@ -175,12 +202,12 @@
/*
* Class: sun_awt_X11_GtkFileDialogPeer
* Method: run
- * Signature: (Ljava/lang/String;ILjava/lang/String;Ljava/lang/String;Ljava/io/FilenameFilter;Z;)V
+ * Signature: (Ljava/lang/String;ILjava/lang/String;Ljava/lang/String;Ljava/io/FilenameFilter;ZII)V
*/
JNIEXPORT void JNICALL
Java_sun_awt_X11_GtkFileDialogPeer_run(JNIEnv * env, jobject jpeer,
jstring jtitle, jint mode, jstring jdir, jstring jfile,
- jobject jfilter, jboolean multiple)
+ jobject jfilter, jboolean multiple, int x, int y)
{
GtkWidget *dialog = NULL;
GtkFileFilter *filter;
@@ -244,6 +271,14 @@
dialog), TRUE);
}
+ /* Set the initial location */
+ if (x >= 0 && y >= 0) {
+ fp_gtk_window_move((GtkWindow*)dialog, (gint)x, (gint)y);
+
+ // NOTE: it doesn't set the initial size for the file chooser
+ // as it seems like the file chooser overrides the size internally
+ }
+
fp_g_signal_connect(G_OBJECT(dialog), "response", G_CALLBACK(
handle_response), jpeer);
--- a/jdk/src/solaris/native/sun/awt/sun_awt_X11_GtkFileDialogPeer.h Fri Feb 25 13:58:54 2011 +0300
+++ b/jdk/src/solaris/native/sun/awt/sun_awt_X11_GtkFileDialogPeer.h Fri Feb 25 15:33:50 2011 +0300
@@ -20,10 +20,10 @@
/*
* Class: sun_awt_X11_GtkFileDialogPeer
* Method: run
- * Signature: (Ljava/lang/String;ILjava/lang/String;Ljava/lang/String;Ljava/io/FilenameFilter;Z;)V
+ * Signature: (Ljava/lang/String;ILjava/lang/String;Ljava/lang/String;Ljava/io/FilenameFilter;ZII)V
*/
JNIEXPORT void JNICALL Java_sun_awt_X11_GtkFileDialogPeer_run
-(JNIEnv *, jobject, jstring, jint, jstring, jstring, jobject, jboolean);
+(JNIEnv *, jobject, jstring, jint, jstring, jstring, jobject, jboolean, jint, jint);
/*
* Class: sun_awt_X11_GtkFileDialogPeer
@@ -41,6 +41,14 @@
JNIEXPORT void JNICALL Java_sun_awt_X11_GtkFileDialogPeer_toFront
(JNIEnv *, jobject);
+/*
+ * Class: sun_awt_X11_GtkFileDialogPeer
+ * Method: setBounds
+ * Signature: (IIIII)V
+ */
+JNIEXPORT void JNICALL Java_sun_awt_X11_GtkFileDialogPeer_setBounds
+(JNIEnv * env, jobject jpeer, jint x, jint y, jint width, jint height, jint op);
+
#ifdef __cplusplus
}
#endif