Skip to content

Commit 9f31ab2

Browse files
authored
Merge pull request #461 from scijava/disable-ui-events-for-invisible-uis
Choose UserInterfaces smarter, ensure UIs shown when UI functionality called
2 parents bea8f8c + f806874 commit 9f31ab2

File tree

1 file changed

+27
-11
lines changed

1 file changed

+27
-11
lines changed

src/main/java/org/scijava/ui/DefaultUIService.java

Lines changed: 27 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -244,17 +244,17 @@ public List<PluginInfo<DisplayViewer<?>>> getViewerPlugins() {
244244

245245
@Override
246246
public void show(final Object o) {
247-
getDefaultUI().show(o);
247+
getVisibleUI(true).show(o);
248248
}
249249

250250
@Override
251251
public void show(final String name, final Object o) {
252-
getDefaultUI().show(name, o);
252+
getVisibleUI(true).show(name, o);
253253
}
254254

255255
@Override
256256
public void show(final Display<?> display) {
257-
getDefaultUI().show(display);
257+
getVisibleUI(true).show(display);
258258
}
259259

260260
@Override
@@ -309,44 +309,43 @@ public DialogPrompt.Result showDialog(final String message,
309309
final String title, final DialogPrompt.MessageType messageType,
310310
final DialogPrompt.OptionType optionType)
311311
{
312-
final UserInterface ui = getDefaultUI();
312+
UserInterface ui = getVisibleUI(false);
313313
if (ui == null) return null;
314-
final DialogPrompt dialogPrompt =
315-
ui.dialogPrompt(message, title, messageType, optionType);
314+
final DialogPrompt dialogPrompt = ui.dialogPrompt(message, title, messageType, optionType);
316315
return dialogPrompt == null ? null : dialogPrompt.prompt();
317316
}
318317

319318
@Override
320319
public File chooseFile(final File file, final String style) {
321-
final UserInterface ui = getDefaultUI();
320+
final UserInterface ui = getVisibleUI(true);
322321
return ui == null ? null : ui.chooseFile(file, style);
323322
}
324323

325324
@Override
326325
public File
327326
chooseFile(final String title, final File file, final String style)
328327
{
329-
final UserInterface ui = getDefaultUI();
328+
final UserInterface ui = getVisibleUI(true);
330329
return ui == null ? null : ui.chooseFile(title, file, style);
331330
}
332331

333332
@Override
334333
public File[] chooseFiles(File parent, File[] files, FileFilter filter, String style) {
335-
final UserInterface ui = getDefaultUI();
334+
final UserInterface ui = getVisibleUI(true);
336335
return ui == null ? null : ui.chooseFiles(parent, files, filter, style);
337336
}
338337

339338
@Override
340339
public List<File> chooseFiles(File parent, List<File> fileList, FileFilter filter, String style) {
341-
final UserInterface ui = getDefaultUI();
340+
final UserInterface ui = getVisibleUI(true);
342341
return ui == null ? null : ui.chooseFiles(parent, fileList, filter, style);
343342
}
344343

345344
@Override
346345
public void showContextMenu(final String menuRoot, final Display<?> display,
347346
final int x, final int y)
348347
{
349-
final UserInterface ui = getDefaultUI();
348+
final UserInterface ui = getVisibleUI(true);
350349
if (ui != null) ui.showContextMenu(menuRoot, display, x, y);
351350
}
352351

@@ -542,4 +541,21 @@ private void addUserInterface(final String name, final UserInterface ui) {
542541
private String getTitle() {
543542
return appService.getApp().getTitle();
544543
}
544+
545+
private UserInterface getVisibleUI(final boolean forceShow) {
546+
// finds the first (highest priority) VISIBLE UserInterface
547+
// if none are visible, then we show default UI if the caller indicated so.
548+
UserInterface defaultUI = getDefaultUI();
549+
if (defaultUI == null) return null;
550+
if (defaultUI.isVisible()) return defaultUI;
551+
else if(getVisibleUIs().size() > 0) {
552+
return getVisibleUIs().get(0);
553+
}
554+
555+
if (forceShow) {
556+
showUI(defaultUI);
557+
return defaultUI;
558+
}
559+
return null;
560+
}
545561
}

0 commit comments

Comments
 (0)