jdk/src/solaris/classes/sun/awt/motif/MFileDialogPeer.java
changeset 1192 715cf9378c53
parent 1051 90cf935adb35
parent 1191 f142c1da78c2
child 1193 41afb8ee8f45
--- a/jdk/src/solaris/classes/sun/awt/motif/MFileDialogPeer.java	Wed Jul 05 16:40:31 2017 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,300 +0,0 @@
-/*
- * Copyright 1995-2003 Sun Microsystems, Inc.  All Rights Reserved.
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation.  Sun designates this
- * particular file as subject to the "Classpath" exception as provided
- * by Sun in the LICENSE file that accompanied this code.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
- * CA 95054 USA or visit www.sun.com if you need additional information or
- * have any questions.
- */
-package sun.awt.motif;
-
-import java.awt.*;
-import java.awt.peer.*;
-import java.io.*;
-import java.awt.datatransfer.*;
-import java.util.ArrayList;
-import sun.awt.datatransfer.ToolkitThreadBlockedHandler;
-
-public class MFileDialogPeer extends MDialogPeer implements FileDialogPeer {
-    private FilenameFilter filter;
-    private String[] NativeFilteredFiles;
-    native void create(MComponentPeer parent);
-    void create(MComponentPeer parent, Object arg) {
-        create(parent);
-    }
-    public MFileDialogPeer(FileDialog target) {
-        super(target);
-        FileDialog      fdialog = (FileDialog)target;
-        String          dir = fdialog.getDirectory();
-        String          file = fdialog.getFile();
-        FilenameFilter  filter = fdialog.getFilenameFilter();
-
-        insets = new Insets(0, 0, 0, 0);
-        setDirectory(dir);
-        if (file != null) {
-            setFile(file);
-        }
-            setFilenameFilter(filter);
-    }
-    native void         pReshape(int x, int y, int width, int height);
-    native void         pDispose();
-    native void         pShow();
-    native void         pHide();
-    native void         setFileEntry(String dir, String file, String[] ffiles);
-    native void insertReplaceFileDialogText(String l);
-    public native void  setFont(Font f);
-
-    String getFilteredFile(String file) {
-        if (file == null) {
-            file = ((FileDialog)target).getFile();
-        }
-        String dir = ((FileDialog)target).getDirectory();
-        if (dir == null) {
-            dir = "./";
-        }
-        if (file == null) {
-            file = "";
-        }
-        if (filter != null && !filter.accept(new File(dir), file)) {
-            file = "";
-        }
-        return file;
-    }
-    // NOTE: This method is called by privileged threads.
-    //       DO NOT INVOKE CLIENT CODE ON THIS THREAD!
-    public void         handleSelected(final String file) {
-        final FileDialog fileDialog = (FileDialog)target;
-        MToolkit.executeOnEventHandlerThread(fileDialog, new Runnable() {
-            public void run() {
-                int index = file.lastIndexOf(java.io.File.separatorChar);/*2509*//*ibm*/
-                String dir;
-
-                if (index == -1) {
-                    dir = "."+java.io.File.separator;
-                    fileDialog.setFile(file);
-                } else {
-                    dir = file.substring(0, index + 1);
-                    fileDialog.setFile(file.substring(index + 1));
-                }
-                fileDialog.setDirectory(dir);
-                fileDialog.hide();
-            }
-        });
-    } // handleSelected()
-
-    // NOTE: This method is called by privileged threads.
-    //       DO NOT INVOKE CLIENT CODE ON THIS THREAD!
-    public void         handleCancel() {
-        final FileDialog fileDialog = (FileDialog)target;
-        MToolkit.executeOnEventHandlerThread(fileDialog, new Runnable() {
-            public void run() {
-                fileDialog.setFile(null);
-                fileDialog.hide();
-            }
-        });
-    } // handleCancel()
-
-    // NOTE: This method is called by privileged threads.
-    //       DO NOT INVOKE CLIENT CODE ON THIS THREAD!
-    public void         handleQuit() {
-        final FileDialog fileDialog = (FileDialog)target;
-        MToolkit.executeOnEventHandlerThread(fileDialog, new Runnable() {
-            public void run() {
-                fileDialog.hide();
-            }
-        });
-    } // handleQuit()
-
-    public  void setDirectory(String dir) {
-        String file = ((FileDialog)target).getFile();
-        setFileEntry((dir != null) ? dir : "./", (file != null) ? file
-                     : "", null);
-    }
-
-
-    public  void setFile(String file) {
-        String dir = ((FileDialog)target).getDirectory();
-        if (dir == null) {
-            dir = "./";
-        }
-        setFileEntry((dir != null) ? dir : "./", getFilteredFile(null), null);
-    }
-    class DirectoryFilter implements FilenameFilter {
-        FilenameFilter userFilter;
-        DirectoryFilter(FilenameFilter userFilter) {
-            this.userFilter = userFilter;
-        }
-        public boolean accept(File parent, String name) {
-            File toTest = new File(parent, name);
-            if (toTest.isDirectory()) {
-                return false;
-            } else if (userFilter != null) {
-                return userFilter.accept(parent, name);
-            } else {
-                return true;
-            }
-        }
-    }
-    public void doFilter(FilenameFilter filter, String dir) {
-        String d = (dir == null) ? (((FileDialog)target).getDirectory()):(dir);
-        String f = getFilteredFile(null);
-        File df = new File((d != null) ? d : ".");
-        String[] files = df.list(new DirectoryFilter(filter));
-        String[] nffiles = NativeFilteredFiles;
-
-        // At this point we have two file lists.
-        // The first one is a filtered list of files that we retrieve
-        // by using Java code and Java filter.
-        // The second one is a filtered list of files that we retrieve
-        // by using the native code and native pattern.
-        // We should find an intersection of these two lists. The result
-        // will be exactly what we expect to see in setFileEntry.
-        // For more details please see 4784704.
-        if ( files != null ) {
-            ArrayList filearr = new ArrayList();
-            if (nffiles != null) {
-                for (int j = 0; j < files.length; j++) {
-                    for (int n = 0; n < nffiles.length; n++) {
-                        if (files[j].equals(nffiles[n])) {
-                            filearr.add(files[j]);
-                            break;
-                        }
-                    }
-                }
-            }
-            files = new String[filearr.size()];
-            for (int i = 0; i < files.length; i++) {
-                files[i] = (String)filearr.get(i);
-            }
-        }
-        if (files == null || files.length == 0) {
-            files = new String[1];
-            files[0] = "";
-        }
-        setFileEntry((d != null) ? d : ".", (f != null) ? f : "", files);
-    }
-    private boolean proceedFiltering(final String dir, String[] nffiles,
-                                     boolean isPrivileged)
-    {
-        // Transfer the native filtered file list to the doFilter method.
-        NativeFilteredFiles = nffiles;
-        // If we are not on the Toolkit thread we can call doFilter() directly.
-        // If the filter is null no user code will be invoked
-        if (!isPrivileged || filter == null) {
-            try {
-                doFilter(filter, dir);
-                return true;
-            } catch(Exception e) {
-                e.printStackTrace();
-                return false;
-            }
-        }
-        // Otherwise we have to call user code on EvenDispatchThread
-        final ToolkitThreadBlockedHandler priveleged_lock =
-            MToolkitThreadBlockedHandler.getToolkitThreadBlockedHandler();
-        final boolean[] finished = new boolean[1];
-        final boolean[] result = new boolean[1];
-        finished[0] = false;
-        result[0] = false;
-
-
-        // Use the same Toolkit blocking mechanism as in DnD.
-        priveleged_lock.lock();
-
-        MToolkit.executeOnEventHandlerThread((FileDialog)target, new Runnable() {
-            public void run() {
-                priveleged_lock.lock();
-                try {
-                    doFilter(filter, dir);
-                    result[0] = true;
-                } catch (Exception e) {
-                    e.printStackTrace();
-                    result[0] = false;
-                } finally {
-                    finished[0] = true;
-                    priveleged_lock.exit();
-                    priveleged_lock.unlock();
-                }
-            }
-        });
-
-        while (!finished[0]) {
-            priveleged_lock.enter();
-        }
-
-        priveleged_lock.unlock();
-
-        return result[0];
-    }
-
-    public void setFilenameFilter(FilenameFilter filter) {
-        this.filter = filter;
-        FileDialog      fdialog = (FileDialog)target;
-        String          dir = fdialog.getDirectory();
-        String          file = fdialog.getFile();
-        setFile(file);
-        doFilter(filter, null);
-    }
-
-    // Called from native widget when paste key is pressed and we
-    // already own the selection (prevents Motif from hanging while
-    // waiting for the selection)
-    //
-    public void pasteFromClipboard() {
-        Clipboard clipboard = target.getToolkit().getSystemClipboard();
-
-        Transferable content = clipboard.getContents(this);
-        if (content != null) {
-            try {
-                String data = (String)(content.getTransferData(DataFlavor.stringFlavor));
-                insertReplaceFileDialogText(data);
-            } catch (Exception e) {
-            }
-        }
-    }
-
-// CAVEAT:
-// Peer coalescing code turned over the fact that the following functions
-// were being inherited from Dialog and were not implemented in awt_FileDialog.c
-// Five methods decribed by the peer interface are at fault (setResizable, setTitle,
-// toFront, toBack and handleFocusTraversalEvent).  Additionally show has to be overridden
-// as it was necessary to add a show function in MDialogPeer for modality flag passing.
-// As a result we were winding up in  awt_Dialog.c (now coalesced into awt_TopLevel).
-// As Filedialogs are modal and its unclear to me that any of these functions
-// can be called while the FD is on-screen let it go.  RJM.
-    public void show() {
-        // must have our own show or we wind up in pShow for Window. Bad. Very bad.
-        setVisible(true);
-        setFilenameFilter(filter);
-    }
-
-    /**
-     * MFileDialogPeer doesn't have native pData so we don't do restack on it
-     * @see java.awt.peer.ContainerPeer#restack
-     */
-    public void restack() {
-    }
-
-    /**
-     * @see java.awt.peer.ContainerPeer#isRestackSupported
-     */
-    public boolean isRestackSupported() {
-        return false;
-    }
-}