aboutsummaryrefslogtreecommitdiff
path: root/libjava/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkFileDialogPeer.c
diff options
context:
space:
mode:
Diffstat (limited to 'libjava/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkFileDialogPeer.c')
-rw-r--r--libjava/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkFileDialogPeer.c90
1 files changed, 46 insertions, 44 deletions
diff --git a/libjava/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkFileDialogPeer.c b/libjava/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkFileDialogPeer.c
index 3a2e41f21a7..791916174ed 100644
--- a/libjava/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkFileDialogPeer.c
+++ b/libjava/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkFileDialogPeer.c
@@ -41,8 +41,8 @@ exception statement from your version. */
#include "gnu_java_awt_peer_gtk_GtkFileDialogPeer.h"
static void handle_response (GtkDialog *dialog,
- gint responseId,
- jobject peer_obj);
+ gint responseId,
+ jobject peer_obj);
/*
* Make a new file selection dialog
@@ -62,15 +62,17 @@ Java_gnu_java_awt_peer_gtk_GtkFileDialogPeer_create
gdk_threads_enter ();
- widget = gtk_file_chooser_dialog_new("",
- GTK_WINDOW(parentp),
- GTK_FILE_CHOOSER_ACTION_OPEN,
- GTK_STOCK_OK, GTK_RESPONSE_OK,
- GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL,
- NULL);
-
- /* GtkFileChooser doesn't show hidden files by default. */
- g_object_set(GTK_FILE_CHOOSER(widget), "show_hidden", TRUE);
+ /* FIXME: we should be using the default gnome-vfs backend but it is
+ not currently thread-safe. See:
+ http://bugzilla.gnome.org/show_bug.cgi?id=166852 */
+ widget = gtk_file_chooser_dialog_new_with_backend
+ ("Open File",
+ GTK_WINDOW(parentp),
+ GTK_FILE_CHOOSER_ACTION_OPEN,
+ "gtk+",
+ GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL,
+ GTK_STOCK_OPEN, GTK_RESPONSE_ACCEPT,
+ NULL);
/* GtkFileSelect is not modal by default */
gtk_window_set_modal (GTK_WINDOW (widget), TRUE);
@@ -97,7 +99,7 @@ Java_gnu_java_awt_peer_gtk_GtkFileDialogPeer_connectSignals
g_signal_connect (G_OBJECT (GTK_DIALOG (ptr)),
"response",
GTK_SIGNAL_FUNC (handle_response), *gref);
-
+
gdk_threads_leave ();
/* Connect the superclass signals. */
@@ -112,7 +114,7 @@ Java_gnu_java_awt_peer_gtk_GtkFileDialogPeer_nativeGetDirectory
const char *str;
ptr = NSA_GET_PTR (env, obj);
-
+
gdk_threads_enter ();
str = gtk_file_chooser_get_current_folder (GTK_FILE_CHOOSER(ptr));
@@ -135,14 +137,14 @@ static gboolean filenameFilterCallback (const GtkFileFilterInfo *filter_info,
jstring *filename;
gboolean accepted;
- cx = (*gdk_env)->GetObjectClass (gdk_env, (jobject) obj);
- id = (*gdk_env)->GetMethodID (gdk_env, cx, "filenameFilterCallback",
+ cx = (*gdk_env())->GetObjectClass (gdk_env(), (jobject) obj);
+ id = (*gdk_env())->GetMethodID (gdk_env(), cx, "filenameFilterCallback",
"(Ljava/lang/String;)Z");
- filename = (*gdk_env)->NewStringUTF(gdk_env, filter_info->filename);
-
+ filename = (*gdk_env())->NewStringUTF(gdk_env(), filter_info->filename);
+
gdk_threads_leave();
- accepted = (*gdk_env)->CallBooleanMethod(gdk_env, obj, id, filename);
+ accepted = (*gdk_env())->CallBooleanMethod(gdk_env(), obj, id, filename);
gdk_threads_enter();
return accepted;
@@ -166,8 +168,8 @@ Java_gnu_java_awt_peer_gtk_GtkFileDialogPeer_nativeSetFilenameFilter
gtk_file_chooser_set_filter(GTK_FILE_CHOOSER(ptr), filter);
gdk_threads_leave ();
- }
-
+}
+
JNIEXPORT void JNICALL
Java_gnu_java_awt_peer_gtk_GtkFileDialogPeer_nativeSetDirectory
(JNIEnv *env, jobject obj, jstring directory)
@@ -196,7 +198,7 @@ Java_gnu_java_awt_peer_gtk_GtkFileDialogPeer_nativeSetFile
ptr = NSA_GET_PTR (env, obj);
str = (*env)->GetStringUTFChars (env, filename, 0);
-
+
gdk_threads_enter ();
gtk_file_chooser_set_filename (GTK_FILE_CHOOSER (ptr), str);
gdk_threads_leave ();
@@ -207,7 +209,7 @@ Java_gnu_java_awt_peer_gtk_GtkFileDialogPeer_nativeSetFile
static void
handle_response (GtkDialog *dialog __attribute__((unused)),
gint responseId,
- jobject peer_obj)
+ jobject peer_obj)
{
static int isDisposeIDSet = 0;
static int isIDSet = 0;
@@ -221,51 +223,51 @@ handle_response (GtkDialog *dialog __attribute__((unused)),
/* We only need this for the case when the user closed the window,
or clicked ok or cancel. */
if (responseId != GTK_RESPONSE_DELETE_EVENT
- && responseId != GTK_RESPONSE_OK
+ && responseId != GTK_RESPONSE_ACCEPT
&& responseId != GTK_RESPONSE_CANCEL)
return;
-
- ptr = NSA_GET_PTR (gdk_env, peer_obj);
-
+
+ ptr = NSA_GET_PTR (gdk_env(), peer_obj);
+
if (responseId == GTK_RESPONSE_DELETE_EVENT)
{
if (!isDisposeIDSet)
- {
- jclass cx = (*gdk_env)->GetObjectClass (gdk_env, peer_obj);
- disposeID = (*gdk_env)->GetMethodID (gdk_env, cx, "gtkDisposeFileDialog", "()V");
+ {
+ jclass cx = (*gdk_env())->GetObjectClass (gdk_env(), peer_obj);
+ disposeID = (*gdk_env())->GetMethodID (gdk_env(), cx, "gtkDisposeFileDialog", "()V");
isDisposeIDSet = 1;
- }
-
- gdk_threads_leave ();
+ }
+ gdk_threads_leave ();
+
/* We can dispose of the dialog now (and unblock show) */
- (*gdk_env)->CallVoidMethod (gdk_env, peer_obj, disposeID);
+ (*gdk_env())->CallVoidMethod (gdk_env(), peer_obj, disposeID);
- gdk_threads_enter ();
+ gdk_threads_enter ();
return;
-}
+ }
- if (responseId == GTK_RESPONSE_OK) {
+ if (responseId == GTK_RESPONSE_ACCEPT) {
fileName = gtk_file_chooser_get_filename (GTK_FILE_CHOOSER (GTK_WIDGET (ptr)));
- str_fileName = (*gdk_env)->NewStringUTF (gdk_env, fileName);
+ str_fileName = (*gdk_env())->NewStringUTF (gdk_env(), fileName);
}
-
+
if (!isIDSet)
{
- jclass cx = (*gdk_env)->GetObjectClass (gdk_env, peer_obj);
- hideID = (*gdk_env)->GetMethodID (gdk_env, cx, "gtkHideFileDialog", "()V");
- gtkSetFilenameID = (*gdk_env)->GetMethodID (gdk_env, cx,
+ jclass cx = (*gdk_env())->GetObjectClass (gdk_env(), peer_obj);
+ hideID = (*gdk_env())->GetMethodID (gdk_env(), cx, "gtkHideFileDialog", "()V");
+ gtkSetFilenameID = (*gdk_env())->GetMethodID (gdk_env(), cx,
"gtkSetFilename", "(Ljava/lang/String;)V");
isIDSet = 1;
}
gdk_threads_leave ();
-
+
/* Set the Java object field 'file' with this value. */
- (*gdk_env)->CallVoidMethod (gdk_env, peer_obj, gtkSetFilenameID, str_fileName);
+ (*gdk_env())->CallVoidMethod (gdk_env(), peer_obj, gtkSetFilenameID, str_fileName);
/* We can hide the dialog now (and unblock show) */
- (*gdk_env)->CallVoidMethod (gdk_env, peer_obj, hideID);
+ (*gdk_env())->CallVoidMethod (gdk_env(), peer_obj, hideID);
gdk_threads_enter ();
}