diff options
| author | fnasser <fnasser@138bc75d-0d04-0410-961f-82ee72b054a4> | 2004-01-08 21:12:25 +0000 |
|---|---|---|
| committer | fnasser <fnasser@138bc75d-0d04-0410-961f-82ee72b054a4> | 2004-01-08 21:12:25 +0000 |
| commit | 204a2e9c5b6424fcb314dee3fc431be07db88061 (patch) | |
| tree | 240ed2d35f3bb8323d793e3af65083d1f6585530 /libjava/gnu/java | |
| parent | 3e02af1ad5f8b50982749f588582d8843b7841b7 (diff) | |
| download | ppe42-gcc-204a2e9c5b6424fcb314dee3fc431be07db88061.tar.gz ppe42-gcc-204a2e9c5b6424fcb314dee3fc431be07db88061.zip | |
* gnu/java/awt/peer/gtk/GtkFileDialogPeer.java (nativeSetFile):
New name for the former setFile native method.
(setFile): New method.
(setDirectory): Implemented.
(connectSignals): New native method.
(setFilenameFilter): Improve comment.
(getGraphics): Comment.
(gtkHideFileDialog): New method.
(gtkDisposeFileDialog): New method.
(gtkSetFilename): New method.
* java/awt/Dialog.java (show): Block on modal dialogs, but only
for FileDialog for now.
(hide): New method.
(dispose): New method.
* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkFileDialogPeer.c
(Java_gnu_java_awt_peer_gtk_GtkFileDialog_create): Replace
deprecated creation functions. Make dialog modal. Add it to the
window group.
(Java_gnu_java_awt_peer_gtk_GtkFileDialog_connectSignals): New
function.
(Java_gnu_java_awt_peer_gtk_GtkFileDialogPeer_gtkFileSelectionSetFilename):
Rename to...
(Java_gnu_java_awt_peer_gtk_GtkFileDialogPeer_nativeSetFile): New
name.
(window_closed): New function.
(ok_clicked): New function.
(cancel_clicked): New function.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@75557 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'libjava/gnu/java')
| -rw-r--r-- | libjava/gnu/java/awt/peer/gtk/GtkFileDialogPeer.java | 131 |
1 files changed, 126 insertions, 5 deletions
diff --git a/libjava/gnu/java/awt/peer/gtk/GtkFileDialogPeer.java b/libjava/gnu/java/awt/peer/gtk/GtkFileDialogPeer.java index 07422ace79b..dc2c8b0be9c 100644 --- a/libjava/gnu/java/awt/peer/gtk/GtkFileDialogPeer.java +++ b/libjava/gnu/java/awt/peer/gtk/GtkFileDialogPeer.java @@ -38,13 +38,21 @@ exception statement from your version. */ package gnu.java.awt.peer.gtk; +import java.awt.AWTEvent; +import java.awt.Dialog; import java.awt.FileDialog; import java.awt.Graphics; +import java.awt.event.WindowEvent; import java.awt.peer.FileDialogPeer; import java.io.FilenameFilter; public class GtkFileDialogPeer extends GtkDialogPeer implements FileDialogPeer { + static final String FS = System.getProperty("file.separator"); + + private String currentFile = null; + private String currentDirectory = null; + native void create (); public GtkFileDialogPeer (FileDialog fd) @@ -52,21 +60,134 @@ public class GtkFileDialogPeer extends GtkDialogPeer implements FileDialogPeer super (fd); } - public void setDirectory (String directory) + native void connectJObject (); + native void connectSignals (); + native void nativeSetFile (String file); + + public void setFile (String fileName) { - setFile (directory); + /* If nothing changed do nothing. This usually happens because + the only way we have to set the file name in FileDialog is by + calling its SetFile which will call us back. */ + if ((fileName == null && currentFile == null) + || (fileName != null && fileName.equals (currentFile))) + return; + + if (fileName == null || fileName.equals ("")) + { + currentFile = ""; + nativeSetFile (""); + return; + } + + // Remove any directory path from the filename + int sepIndex = fileName.lastIndexOf (FS); + if (sepIndex < 0) + { + currentFile = fileName; + nativeSetFile (fileName); + } + else + { + if (fileName.length() > (sepIndex + 1)) + { + String fn = fileName.substring (sepIndex + 1); + currentFile = fn; + nativeSetFile (fn); + } + else + { + currentFile = ""; + nativeSetFile (""); + } + } } - public native void setFile (String file); - public native void connectJObject (); + public void setDirectory (String directory) + { + /* If nothing changed so nothing. This usually happens because + the only way we have to set the directory in FileDialog is by + calling its setDirectory which will call us back. */ + if ((directory == null && currentDirectory == null) + || (directory != null && directory.equals (currentDirectory))) + return; + + if (directory == null || directory.equals ("")) + { + currentDirectory = FS; + nativeSetFile (FS); + return; + } + + currentDirectory = directory; + + // Gtk expects the directory to end with a file separator + if (directory.substring (directory.length () - 1).equals (FS)) + nativeSetFile (directory); + else + nativeSetFile (directory + FS); + } public void setFilenameFilter (FilenameFilter filter) { - /* GTK has no filters. */ + /* GTK has no filter callbacks yet. It works by setting a pattern + * (see gtk_file_selection_complete), which we can't convert + * to the callback paradigm. With GTK-2.4 there will be a + * gtk_file_filter_add_custom function that we can use. */ } public Graphics getGraphics () { + // GtkFileDialog will repaint by itself return null; } + + void gtkHideFileDialog () + { + ((Dialog) awtComponent).hide(); + } + + void gtkDisposeFileDialog () + { + ((Dialog) awtComponent).dispose(); + } + + /* Callback to set the file and directory values when the user is finished + * with the dialog. + */ + void gtkSetFilename (String fileName) + { + FileDialog fd = (FileDialog) awtWidget; + if (fileName == null) + { + currentFile = null; + fd.setFile(null); + return; + } + + int sepIndex = fileName.lastIndexOf (FS); + if (sepIndex < 0) + { + /* This should never happen on Unix (all paths start with '/') */ + currentFile = fileName; + } + else + { + if (fileName.length() > (sepIndex + 1)) + { + String fn = fileName.substring (sepIndex + 1); + currentFile = fn; + } + else + { + currentFile = null; + } + + String dn = fileName.substring (0, sepIndex + 1); + currentDirectory = dn; + fd.setDirectory(dn); + } + + fd.setFile (currentFile); + } } |

