< prev index next >

src/java.desktop/unix/classes/sun/awt/X11/GtkFileDialogPeer.java

Print this page

        

*** 40,49 **** --- 40,51 ---- private final FileDialog fd; // A pointer to the native GTK FileChooser widget private volatile long widget = 0L; + private long standaloneWindow; + private volatile boolean quit; GtkFileDialogPeer(FileDialog fd) { super(fd); this.fd = fd; }
*** 109,121 **** --- 111,125 ---- @Override public void setVisible(boolean b) { XToolkit.awtLock(); try { + quit = !b; if (b) { Runnable task = () -> { showNativeDialog(); + standaloneWindow = 0; fd.setVisible(false); }; new ManagedLocalsThread(task).start(); } else { quit();
*** 126,136 **** --- 130,147 ---- } } @Override public void dispose() { + XToolkit.awtLock(); + try { + quit = true; quit(); + } + finally { + XToolkit.awtUnlock(); + } super.dispose(); } @Override public void setDirectory(String dir) {
*** 142,151 **** --- 153,173 ---- public void setFile(String file) { // We do not implement this method because we // have delegated to FileDialog#setFile } + protected void requestXFocus(long time, boolean timeProvided) { + if(standaloneWindow == 0) { + super.requestXFocus(time, timeProvided); + return; + } + XNETProtocol net_protocol = XWM.getWM().getNETProtocol(); + if (net_protocol != null) { + net_protocol.setActiveWindow(standaloneWindow); + } + } + @Override public void setFilenameFilter(FilenameFilter filter) { // We do not implement this method because we // have delegated to FileDialog#setFilenameFilter }
*** 168,176 **** --- 190,212 ---- filename = file.getName(); // Directory path for gtk_file_chooser_set_current_folder. dirname = file.getParent(); } } + if (!quit) { run(fd.getTitle(), fd.getMode(), dirname, filename, fd.getFilenameFilter(), fd.isMultipleMode(), fd.getX(), fd.getY()); } + } + + /** + * Called by native code when GTK dialog is created. + */ + boolean setWindow(long xid) { + if (!quit && widget != 0) { + standaloneWindow = xid; + requestXFocus(); + return true; + } + return false; + } }
< prev index next >