< 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 >