/* * Copyright 2010 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.X11; import java.awt.*; import java.awt.peer.*; import sun.awt.AWTAccessor; /** * DirectoryDialogPeer for the GtkFileChooser. * * @author Costantino Cerbo (c.cerbo@gmail.com) */ class GtkDirectoryDialogPeer extends XDialogPeer implements DirectoryDialogPeer { private DirectoryDialog dd; GtkDirectoryDialogPeer(DirectoryDialog target) { super((Dialog) target); this.dd = target; } private native void run(String title, String dir); private native void quit(); /** * Called exclusively by the native C code. */ private void setDirectoryInternal(String directory) { AWTAccessor.DirectoryDialogAccessor accessor = AWTAccessor .getDirectoryDialogAccessor(); accessor.setDirectory(dd, directory); } @Override public void setVisible(boolean b) { XToolkit.awtLock(); try { if (b) { Thread t = new Thread() { public void run() { GtkDirectoryDialogPeer.this.run(dd.getTitle(), dd.getDirectory()); dd.setVisible(false); } }; t.start(); } else { quit(); dd.setVisible(false); } } finally { XToolkit.awtUnlock(); } } @Override public void dispose() { quit(); super.dispose(); } @Override public void setDirectory(String dir) { // We do not implement this method because we // have delegated to FileDialog#setDirectory } }