summaryrefslogtreecommitdiffstats
path: root/libjava/gnu/java
diff options
context:
space:
mode:
authorfnasser <fnasser@138bc75d-0d04-0410-961f-82ee72b054a4>2004-01-08 21:12:25 +0000
committerfnasser <fnasser@138bc75d-0d04-0410-961f-82ee72b054a4>2004-01-08 21:12:25 +0000
commit204a2e9c5b6424fcb314dee3fc431be07db88061 (patch)
tree240ed2d35f3bb8323d793e3af65083d1f6585530 /libjava/gnu/java
parent3e02af1ad5f8b50982749f588582d8843b7841b7 (diff)
downloadppe42-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.java131
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);
+ }
}
OpenPOWER on IntegriCloud