/[classpath]/classpath/native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkFileDialogPeer.c
ViewVC logotype

Diff of /classpath/native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkFileDialogPeer.c

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 1.14.2.5 by gnu_andrew, Tue Aug 2 20:12:40 2005 UTC revision 1.14.2.6 by gnu_andrew, Sat Sep 10 15:32:01 2005 UTC
# Line 40  exception statement from your version. * Line 40  exception statement from your version. *
40  #include "gnu_java_awt_peer_gtk_GtkComponentPeer.h"  #include "gnu_java_awt_peer_gtk_GtkComponentPeer.h"
41  #include "gnu_java_awt_peer_gtk_GtkFileDialogPeer.h"  #include "gnu_java_awt_peer_gtk_GtkFileDialogPeer.h"
42    
43    #define AWT_FILEDIALOG_LOAD 0
44    #define AWT_FILEDIALOG_SAVE 1
45    
46  static void handle_response_cb (GtkDialog *dialog,  static void handle_response_cb (GtkDialog *dialog,
47                                  gint responseId,                                  gint responseId,
48                                  jobject peer_obj);                                  jobject peer_obj);
49    
50    static jmethodID gtkSetFilenameID;
51    static jmethodID gtkHideFileDialogID;
52    static jmethodID gtkDisposeFileDialogID;
53    static jmethodID filenameFilterCallbackID;
54    
55    void
56    cp_gtk_filedialog_init_jni (void)
57    {
58      jclass gtkfiledialogpeer;
59    
60      gtkfiledialogpeer =
61        (*cp_gtk_gdk_env())->FindClass (cp_gtk_gdk_env(),
62                                        "gnu/java/awt/peer/gtk/GtkFileDialogPeer");
63    
64      gtkDisposeFileDialogID =
65        (*cp_gtk_gdk_env())->GetMethodID (cp_gtk_gdk_env(),
66                                          gtkfiledialogpeer,
67                                          "gtkDisposeFileDialog", "()V");
68    
69      gtkHideFileDialogID =
70        (*cp_gtk_gdk_env())->GetMethodID (cp_gtk_gdk_env(),
71                                          gtkfiledialogpeer,
72                                          "gtkHideFileDialog", "()V");
73    
74      gtkSetFilenameID =
75        (*cp_gtk_gdk_env())->GetMethodID (cp_gtk_gdk_env(),
76                                          gtkfiledialogpeer,
77                                          "gtkSetFilename",
78                                          "(Ljava/lang/String;)V");
79    
80      filenameFilterCallbackID =
81        (*cp_gtk_gdk_env())->GetMethodID (cp_gtk_gdk_env(),
82                                          gtkfiledialogpeer,
83                                          "filenameFilterCallback",
84                                          "(Ljava/lang/String;)Z");
85    }
86    
87  /*  /*
88   * Make a new file selection dialog   * Make a new file selection dialog
89   */   */
90    
91  JNIEXPORT void JNICALL  JNIEXPORT void JNICALL
92  Java_gnu_java_awt_peer_gtk_GtkFileDialogPeer_create  Java_gnu_java_awt_peer_gtk_GtkFileDialogPeer_create
93    (JNIEnv *env, jobject obj, jobject parent)    (JNIEnv *env, jobject obj, jobject parent, int mode)
94  {  {
95    void *parentp;    void *parentp;
96    gpointer widget;    gpointer widget;
# Line 62  Java_gnu_java_awt_peer_gtk_GtkFileDialog Line 102  Java_gnu_java_awt_peer_gtk_GtkFileDialog
102    
103    parentp = NSA_GET_PTR(env, parent);    parentp = NSA_GET_PTR(env, parent);
104    
105    /* FIXME: we should be using the default gnome-vfs backend but it is    if (mode == AWT_FILEDIALOG_LOAD)
106       not currently thread-safe.  See:      widget = gtk_file_chooser_dialog_new
107       http://bugzilla.gnome.org/show_bug.cgi?id=166852 */        ("Open File",
108    widget = gtk_file_chooser_dialog_new_with_backend         GTK_WINDOW(parentp),
109      ("Open File",         GTK_FILE_CHOOSER_ACTION_OPEN,
110       GTK_WINDOW(parentp),         GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL,
111       GTK_FILE_CHOOSER_ACTION_OPEN,         GTK_STOCK_OPEN, GTK_RESPONSE_ACCEPT,
112       "gtk+",         NULL);
113       GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL,    else
114       GTK_STOCK_OPEN, GTK_RESPONSE_ACCEPT,      {
115       NULL);        widget = gtk_file_chooser_dialog_new
116            ("Save File",
117             GTK_WINDOW(parentp),
118             GTK_FILE_CHOOSER_ACTION_SAVE,
119             GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL,
120             GTK_STOCK_SAVE, GTK_RESPONSE_ACCEPT,
121             NULL);
122    #if GTK_MINOR_VERSION >= 8
123          gtk_file_chooser_set_do_overwrite_confirmation
124            (GTK_FILE_CHOOSER (widget), TRUE);
125    #endif
126        }
127    
128    /* GtkFileSelect is not modal by default */  
129      /* GtkFileChooserDialog is not modal by default */
130    gtk_window_set_modal (GTK_WINDOW (widget), TRUE);    gtk_window_set_modal (GTK_WINDOW (widget), TRUE);
131    
132    /* We must add this window to the group so input in the others are    /* We must add this window to the group so input in the others are
# Line 132  Java_gnu_java_awt_peer_gtk_GtkFileDialog Line 184  Java_gnu_java_awt_peer_gtk_GtkFileDialog
184     This function extracts the filename from the GtkFileFilterInfo object,     This function extracts the filename from the GtkFileFilterInfo object,
185     and passes it to the Java method.  The Java method will call the filter's     and passes it to the Java method.  The Java method will call the filter's
186     accept() method and will give back the return value. */     accept() method and will give back the return value. */
187  static gboolean filenameFilterCallback (const GtkFileFilterInfo *filter_info,  static gboolean filename_filter_cb (const GtkFileFilterInfo *filter_info,
188                                          gpointer obj)                                          gpointer obj)
189  {  {
   jclass cx;  
   jmethodID id;  
190    jstring *filename;    jstring *filename;
191    gboolean accepted;    gboolean accepted;
192    
   cx = (*cp_gtk_gdk_env())->GetObjectClass (cp_gtk_gdk_env(), (jobject) obj);  
   id = (*cp_gtk_gdk_env())->GetMethodID (cp_gtk_gdk_env(), cx, "filenameFilterCallback",  
                                              "(Ljava/lang/String;)Z");  
   
193    filename = (*cp_gtk_gdk_env())->NewStringUTF(cp_gtk_gdk_env(), filter_info->filename);    filename = (*cp_gtk_gdk_env())->NewStringUTF(cp_gtk_gdk_env(), filter_info->filename);
194    
195    gdk_threads_leave();    accepted = (*cp_gtk_gdk_env())->CallBooleanMethod(cp_gtk_gdk_env(), obj,
196                                                        filenameFilterCallbackID,
197    accepted = (*cp_gtk_gdk_env())->CallBooleanMethod(cp_gtk_gdk_env(), obj, id, filename);                                                      filename);
   
   gdk_threads_enter();  
198    
199    return accepted;    return accepted;
200  }  }
# Line 168  Java_gnu_java_awt_peer_gtk_GtkFileDialog Line 212  Java_gnu_java_awt_peer_gtk_GtkFileDialog
212    
213    filter = gtk_file_filter_new();    filter = gtk_file_filter_new();
214    gtk_file_filter_add_custom(filter, GTK_FILE_FILTER_FILENAME,    gtk_file_filter_add_custom(filter, GTK_FILE_FILTER_FILENAME,
215                               filenameFilterCallback, obj, NULL);                               filename_filter_cb, obj, NULL);
216    
217    gtk_file_chooser_set_filter(GTK_FILE_CHOOSER(ptr), filter);    gtk_file_chooser_set_filter(GTK_FILE_CHOOSER(ptr), filter);
218    
# Line 220  handle_response_cb (GtkDialog *dialog __ Line 264  handle_response_cb (GtkDialog *dialog __
264                      gint responseId,                      gint responseId,
265                      jobject peer_obj)                      jobject peer_obj)
266  {  {
   static int isDisposeIDSet = 0;  
   static int isIDSet = 0;  
   static jmethodID gtkSetFilenameID;  
   static jmethodID hideID;  
   static jmethodID disposeID;  
267    void *ptr;    void *ptr;
268    G_CONST_RETURN gchar *fileName;    G_CONST_RETURN gchar *fileName;
269    jstring str_fileName = NULL;    jstring str_fileName = NULL;
# Line 240  handle_response_cb (GtkDialog *dialog __ Line 279  handle_response_cb (GtkDialog *dialog __
279    
280    if (responseId == GTK_RESPONSE_DELETE_EVENT)    if (responseId == GTK_RESPONSE_DELETE_EVENT)
281    {    {
     if (!isDisposeIDSet)  
       {  
         jclass cx = (*cp_gtk_gdk_env())->GetObjectClass (cp_gtk_gdk_env(), peer_obj);  
         disposeID = (*cp_gtk_gdk_env())->GetMethodID (cp_gtk_gdk_env(), cx, "gtkDisposeFileDialog", "()V");  
         isDisposeIDSet = 1;  
       }  
   
282      /* We can dispose of the dialog now (and unblock show) */      /* We can dispose of the dialog now (and unblock show) */
283      gdk_threads_leave ();      (*cp_gtk_gdk_env())->CallVoidMethod (cp_gtk_gdk_env(), peer_obj,
284      (*cp_gtk_gdk_env())->CallVoidMethod (cp_gtk_gdk_env(), peer_obj, disposeID);                                           gtkDisposeFileDialogID);
     gdk_threads_enter ();  
285    
286      return;      return;
287    }    }
288    
289    if (responseId == GTK_RESPONSE_ACCEPT) {    if (responseId == GTK_RESPONSE_ACCEPT)
     fileName = gtk_file_chooser_get_filename (GTK_FILE_CHOOSER (GTK_WIDGET (ptr)));  
     str_fileName = (*cp_gtk_gdk_env())->NewStringUTF (cp_gtk_gdk_env(), fileName);  
   }  
   
   if (!isIDSet)  
290      {      {
291        jclass cx = (*cp_gtk_gdk_env())->GetObjectClass (cp_gtk_gdk_env(), peer_obj);        fileName = gtk_file_chooser_get_filename (GTK_FILE_CHOOSER (GTK_WIDGET (ptr)));
292        hideID = (*cp_gtk_gdk_env())->GetMethodID (cp_gtk_gdk_env(), cx, "gtkHideFileDialog", "()V");        str_fileName = (*cp_gtk_gdk_env())->NewStringUTF (cp_gtk_gdk_env(), fileName);
       gtkSetFilenameID = (*cp_gtk_gdk_env())->GetMethodID (cp_gtk_gdk_env(), cx,  
                                    "gtkSetFilename", "(Ljava/lang/String;)V");  
       isIDSet = 1;  
293      }      }
294    
295    /* Set the Java object field 'file' with this value. */    /* Set the Java object field 'file' with this value. */
296    gdk_threads_leave ();    (*cp_gtk_gdk_env())->CallVoidMethod (cp_gtk_gdk_env(), peer_obj,
297    (*cp_gtk_gdk_env())->CallVoidMethod (cp_gtk_gdk_env(), peer_obj, gtkSetFilenameID, str_fileName);                                         gtkSetFilenameID, str_fileName);
298    
299    /* We can hide the dialog now (and unblock show) */    /* We can hide the dialog now (and unblock show) */
300    (*cp_gtk_gdk_env())->CallVoidMethod (cp_gtk_gdk_env(), peer_obj, hideID);    (*cp_gtk_gdk_env())->CallVoidMethod (cp_gtk_gdk_env(), peer_obj,
301                                           gtkHideFileDialogID);
   gdk_threads_enter ();  
302  }  }
   

Legend:
Removed from v.1.14.2.5  
changed lines
  Added in v.1.14.2.6

savannah-hackers-public@gnu.org
ViewVC Help
Powered by ViewVC 1.1.26