classpath-patches
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[cp-patches] support Save file dialogs in GTK peers


From: Thomas Fitzsimmons
Subject: [cp-patches] support Save file dialogs in GTK peers
Date: Fri, 26 Aug 2005 00:35:28 -0400

Hi,

This patch adds support for Save file dialogs in the GTK peers.

Tom

2005-08-26  Thomas Fitzsimmons  <address@hidden>

        PR classpath/21660:
        * gnu/java/awt/peer/gtk/GtkFileDialogPeer.java,
        native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkFileDialogPeer.c
        (AWT_FILEDIALOG_LOAD): New macro.
        (AWT_FILEDIALOG_SAVE): Likewise.
        (create(GtkContainerPeer,int)): Add mode parameter.  Create Save
        dialog if mode is AWT_FILEDIALOG_SAVE.  Remove workaround for
        http://bugzilla.gnome.org/show_bug.cgi?id=166852.
        (create()): Add mode argument to create call.
        * gnu/java/awt/peer/gtk/GtkWindowPeer.java,
        native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkWindowPeer.c
        (setVisibleNative): Override method.
        (setVisibleNativeUnlocked): Override method.  Call gdk_flush after
        showing or hiding window.
        * include/gnu_java_awt_peer_gtk_GtkFileDialogPeer.h: Regenerate.
        * include/gnu_java_awt_peer_gtk_GtkWindowPeer.h: Regenerate.

Index: gnu/java/awt/peer/gtk/GtkFileDialogPeer.java
===================================================================
RCS file: 
/cvsroot/classpath/classpath/gnu/java/awt/peer/gtk/GtkFileDialogPeer.java,v
retrieving revision 1.27
diff -u -r1.27 GtkFileDialogPeer.java
--- gnu/java/awt/peer/gtk/GtkFileDialogPeer.java        25 Aug 2005 02:26:49 
-0000      1.27
+++ gnu/java/awt/peer/gtk/GtkFileDialogPeer.java        26 Aug 2005 04:33:08 
-0000
@@ -55,7 +55,7 @@
   private String currentDirectory = null;
   private FilenameFilter filter;
 
-  native void create (GtkContainerPeer parent);
+  native void create (GtkContainerPeer parent, int mode);
   native void connectSignals ();
   native void nativeSetFile (String file);
   public native String nativeGetDirectory();
@@ -64,7 +64,8 @@
 
   public void create()
   {
-    create((GtkContainerPeer) awtComponent.getParent().getPeer());
+    create((GtkContainerPeer) awtComponent.getParent().getPeer(),
+           ((FileDialog) awtComponent).getMode());
 
     FileDialog fd = (FileDialog) awtComponent;
 
Index: gnu/java/awt/peer/gtk/GtkWindowPeer.java
===================================================================
RCS file: 
/cvsroot/classpath/classpath/gnu/java/awt/peer/gtk/GtkWindowPeer.java,v
retrieving revision 1.40
diff -u -r1.40 GtkWindowPeer.java
--- gnu/java/awt/peer/gtk/GtkWindowPeer.java    25 Aug 2005 02:26:49 -0000      
1.40
+++ gnu/java/awt/peer/gtk/GtkWindowPeer.java    26 Aug 2005 04:33:08 -0000
@@ -105,6 +105,9 @@
   {
   }
 
+  public native void setVisibleNative (boolean b);
+  public native void setVisibleNativeUnlocked (boolean b);
+
   native void connectSignals ();
 
   public GtkWindowPeer (Window window)
Index: include/gnu_java_awt_peer_gtk_GtkFileDialogPeer.h
===================================================================
RCS file: 
/cvsroot/classpath/classpath/include/gnu_java_awt_peer_gtk_GtkFileDialogPeer.h,v
retrieving revision 1.8
diff -u -r1.8 gnu_java_awt_peer_gtk_GtkFileDialogPeer.h
--- include/gnu_java_awt_peer_gtk_GtkFileDialogPeer.h   8 Oct 2004 22:16:09 
-0000       1.8
+++ include/gnu_java_awt_peer_gtk_GtkFileDialogPeer.h   26 Aug 2005 04:33:08 
-0000
@@ -10,7 +10,7 @@
 {
 #endif
 
-JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GtkFileDialogPeer_create 
(JNIEnv *env, jobject, jobject);
+JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GtkFileDialogPeer_create 
(JNIEnv *env, jobject, jobject, jint);
 JNIEXPORT void JNICALL 
Java_gnu_java_awt_peer_gtk_GtkFileDialogPeer_connectSignals (JNIEnv *env, 
jobject);
 JNIEXPORT void JNICALL 
Java_gnu_java_awt_peer_gtk_GtkFileDialogPeer_nativeSetFile (JNIEnv *env, 
jobject, jstring);
 JNIEXPORT jstring JNICALL 
Java_gnu_java_awt_peer_gtk_GtkFileDialogPeer_nativeGetDirectory (JNIEnv *env, 
jobject);
Index: include/gnu_java_awt_peer_gtk_GtkWindowPeer.h
===================================================================
RCS file: 
/cvsroot/classpath/classpath/include/gnu_java_awt_peer_gtk_GtkWindowPeer.h,v
retrieving revision 1.18
diff -u -r1.18 gnu_java_awt_peer_gtk_GtkWindowPeer.h
--- include/gnu_java_awt_peer_gtk_GtkWindowPeer.h       25 Aug 2005 02:26:49 
-0000      1.18
+++ include/gnu_java_awt_peer_gtk_GtkWindowPeer.h       26 Aug 2005 04:33:08 
-0000
@@ -15,6 +15,8 @@
 JNIEXPORT void JNICALL 
Java_gnu_java_awt_peer_gtk_GtkWindowPeer_gtkWindowSetModal (JNIEnv *env, 
jobject, jboolean);
 JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GtkWindowPeer_realize 
(JNIEnv *env, jobject);
 JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GtkWindowPeer_create (JNIEnv 
*env, jobject, jint, jboolean, jobject);
+JNIEXPORT void JNICALL 
Java_gnu_java_awt_peer_gtk_GtkWindowPeer_setVisibleNative (JNIEnv *env, 
jobject, jboolean);
+JNIEXPORT void JNICALL 
Java_gnu_java_awt_peer_gtk_GtkWindowPeer_setVisibleNativeUnlocked (JNIEnv *env, 
jobject, jboolean);
 JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GtkWindowPeer_connectSignals 
(JNIEnv *env, jobject);
 JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GtkWindowPeer_toBack (JNIEnv 
*env, jobject);
 JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GtkWindowPeer_toFront 
(JNIEnv *env, jobject);
Index: native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkFileDialogPeer.c
===================================================================
RCS file: 
/cvsroot/classpath/classpath/native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkFileDialogPeer.c,v
retrieving revision 1.23
diff -u -r1.23 gnu_java_awt_peer_gtk_GtkFileDialogPeer.c
--- native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkFileDialogPeer.c       18 Aug 
2005 01:22:00 -0000      1.23
+++ native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkFileDialogPeer.c       26 Aug 
2005 04:33:09 -0000
@@ -40,6 +40,9 @@
 #include "gnu_java_awt_peer_gtk_GtkComponentPeer.h"
 #include "gnu_java_awt_peer_gtk_GtkFileDialogPeer.h"
 
+#define AWT_FILEDIALOG_LOAD 0
+#define AWT_FILEDIALOG_SAVE 1
+
 static void handle_response_cb (GtkDialog *dialog,
                                 gint responseId,
                                 jobject peer_obj);
@@ -87,7 +90,7 @@
 
 JNIEXPORT void JNICALL 
 Java_gnu_java_awt_peer_gtk_GtkFileDialogPeer_create 
-  (JNIEnv *env, jobject obj, jobject parent)
+  (JNIEnv *env, jobject obj, jobject parent, int mode)
 {
   void *parentp;
   gpointer widget;
@@ -99,19 +102,29 @@
 
   parentp = NSA_GET_PTR(env, parent);
 
-  /* 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);
+  if (mode == AWT_FILEDIALOG_LOAD)
+    widget = gtk_file_chooser_dialog_new
+      ("Open File",
+       GTK_WINDOW(parentp),
+       GTK_FILE_CHOOSER_ACTION_OPEN,
+       GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL,
+       GTK_STOCK_OPEN, GTK_RESPONSE_ACCEPT,
+       NULL);
+  else
+    {
+      widget = gtk_file_chooser_dialog_new
+        ("Save File",
+         GTK_WINDOW(parentp),
+         GTK_FILE_CHOOSER_ACTION_SAVE,
+         GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL,
+         GTK_STOCK_SAVE, GTK_RESPONSE_ACCEPT,
+         NULL);
+      gtk_file_chooser_set_do_overwrite_confirmation
+        (GTK_FILE_CHOOSER (widget), TRUE);
+    }
+
 
-  /* GtkFileSelect is not modal by default */
+  /* GtkFileChooserDialog is not modal by default */
   gtk_window_set_modal (GTK_WINDOW (widget), TRUE);
 
   /* We must add this window to the group so input in the others are
Index: native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkWindowPeer.c
===================================================================
RCS file: 
/cvsroot/classpath/classpath/native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkWindowPeer.c,v
retrieving revision 1.55
diff -u -r1.55 gnu_java_awt_peer_gtk_GtkWindowPeer.c
--- native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkWindowPeer.c   25 Aug 2005 
02:26:50 -0000      1.55
+++ native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkWindowPeer.c   26 Aug 2005 
04:33:09 -0000
@@ -1198,6 +1198,34 @@
 }
 
 JNIEXPORT void JNICALL
+Java_gnu_java_awt_peer_gtk_GtkWindowPeer_setVisibleNative
+  (JNIEnv *env, jobject obj, jboolean visible)
+{
+  gdk_threads_enter ();
+
+  Java_gnu_java_awt_peer_gtk_GtkWindowPeer_setVisibleNativeUnlocked
+    (env, obj, visible);
+
+  gdk_threads_leave ();
+}
+
+JNIEXPORT void JNICALL
+Java_gnu_java_awt_peer_gtk_GtkWindowPeer_setVisibleNativeUnlocked
+  (JNIEnv *env, jobject obj, jboolean visible)
+{
+  void *ptr;
+
+  ptr = NSA_GET_PTR (env, obj);
+
+  if (visible)
+    gtk_widget_show (GTK_WIDGET (ptr));
+  else
+    gtk_widget_hide (GTK_WIDGET (ptr));
+
+  gdk_flush ();
+}
+
+JNIEXPORT void JNICALL
 Java_gnu_java_awt_peer_gtk_GtkWindowPeer_connectSignals
   (JNIEnv *env, jobject obj)
 {

reply via email to

[Prev in Thread] Current Thread [Next in Thread]