Skip to content

Commit 25a9627

Browse files
committed
Fix dialogs showing multiple times
We were re-registering the menu item actions every time the context menu was being recreated. Fix this by removing all existing actions before registering the new one.
1 parent 67b21f6 commit 25a9627

File tree

1 file changed

+24
-17
lines changed

1 file changed

+24
-17
lines changed

src/main/java/edu/umich/soar/visualsoar/operatorwindow/OperatorNode.java

Lines changed: 24 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -345,49 +345,49 @@ public void showContextMenu(Component c, int x, int y) {
345345
private JPopupMenu createContextMenu() {
346346
JPopupMenu contextMenu = new JPopupMenu();
347347
contextMenu.add(addSubOperatorItem);
348-
addSubOperatorItem.addActionListener(
348+
setMenuItemAction(addSubOperatorItem,
349349
e -> {
350350
OperatorWindow ow = (OperatorWindow) contextMenu.getInvoker();
351351
ow.addSubOperator();
352352
});
353353

354354
contextMenu.add(addTopFolderItem);
355-
addTopFolderItem.addActionListener(
355+
setMenuItemAction(addTopFolderItem,
356356
e -> {
357357
OperatorWindow ow = (OperatorWindow) contextMenu.getInvoker();
358358
ow.addTopFolder();
359359
});
360360

361361
contextMenu.add(addFileItem);
362-
addFileItem.addActionListener(
362+
setMenuItemAction(addFileItem,
363363
e -> {
364364
OperatorWindow ow = (OperatorWindow) contextMenu.getInvoker();
365365
ow.addFile();
366366
});
367367

368368
impasseSubMenu.add(tieImpasseItem);
369-
tieImpasseItem.addActionListener(
369+
setMenuItemAction(tieImpasseItem,
370370
e -> {
371371
OperatorWindow ow = (OperatorWindow) contextMenu.getInvoker();
372372
ow.addImpasse("Impasse__Operator_Tie");
373373
});
374374

375375
impasseSubMenu.add(conflictImpasseItem);
376-
conflictImpasseItem.addActionListener(
376+
setMenuItemAction(conflictImpasseItem,
377377
e -> {
378378
OperatorWindow ow = (OperatorWindow) contextMenu.getInvoker();
379379
ow.addImpasse("Impasse__Operator_Conflict");
380380
});
381381

382382
impasseSubMenu.add(constraintImpasseItem);
383-
constraintImpasseItem.addActionListener(
383+
setMenuItemAction(constraintImpasseItem,
384384
e -> {
385385
OperatorWindow ow = (OperatorWindow) contextMenu.getInvoker();
386386
ow.addImpasse("Impasse__Operator_Constraint-Failure");
387387
});
388388

389389
impasseSubMenu.add(stateNoChangeImpasseItem);
390-
stateNoChangeImpasseItem.addActionListener(
390+
setMenuItemAction(stateNoChangeImpasseItem,
391391
e -> {
392392
OperatorWindow ow = (OperatorWindow) contextMenu.getInvoker();
393393
ow.addImpasse("Impasse__State_No-Change");
@@ -396,14 +396,14 @@ private JPopupMenu createContextMenu() {
396396
contextMenu.add(impasseSubMenu);
397397

398398
contextMenu.add(openRulesItem);
399-
openRulesItem.addActionListener(
399+
setMenuItemAction(openRulesItem,
400400
e -> {
401401
OperatorWindow ow = (OperatorWindow) contextMenu.getInvoker();
402402
ow.openRules();
403403
});
404404

405405
contextMenu.add(openDataMapItem);
406-
openDataMapItem.addActionListener(
406+
setMenuItemAction(openDataMapItem,
407407
e -> {
408408
OperatorWindow ow = (OperatorWindow) contextMenu.getInvoker();
409409
ow.openDataMap();
@@ -412,14 +412,14 @@ private JPopupMenu createContextMenu() {
412412
contextMenu.addSeparator();
413413

414414
contextMenu.add(searchItem);
415-
searchItem.addActionListener(
415+
setMenuItemAction(searchItem,
416416
e -> {
417417
OperatorWindow ow = (OperatorWindow) contextMenu.getInvoker();
418418
ow.searchFiles();
419419
});
420420

421421
contextMenu.add(replaceItem);
422-
replaceItem.addActionListener(
422+
setMenuItemAction(replaceItem,
423423
e -> {
424424
OperatorWindow ow = (OperatorWindow) contextMenu.getInvoker();
425425
ow.replaceFiles();
@@ -428,36 +428,36 @@ private JPopupMenu createContextMenu() {
428428
contextMenu.addSeparator();
429429

430430
contextMenu.add(deleteItem);
431-
deleteItem.addActionListener(
431+
setMenuItemAction(deleteItem,
432432
e -> {
433433
OperatorWindow ow = (OperatorWindow) contextMenu.getInvoker();
434434
ow.delete();
435435
});
436436

437437
contextMenu.add(renameItem);
438-
renameItem.addActionListener(
438+
setMenuItemAction(renameItem,
439439
e -> {
440440
OperatorWindow ow = (OperatorWindow) contextMenu.getInvoker();
441441
ow.rename();
442442
});
443443

444444
contextMenu.add(exportItem);
445-
exportItem.addActionListener(
445+
setMenuItemAction(exportItem,
446446
e -> {
447447
OperatorWindow ow = (OperatorWindow) contextMenu.getInvoker();
448448
ow.export();
449449
});
450450

451451
contextMenu.add(importItem);
452-
importItem.addActionListener(
452+
setMenuItemAction(importItem,
453453
e -> {
454454
OperatorWindow ow = (OperatorWindow) contextMenu.getInvoker();
455455
ow.importFunc();
456456
});
457457

458458
contextMenu.add(generateDataMapItem);
459459
// actionPerformed
460-
generateDataMapItem.addActionListener(
460+
setMenuItemAction(generateDataMapItem,
461461
ae -> {
462462
Vector<FeedbackListEntry> parseErrors = new Vector<>();
463463
Vector<FeedbackListEntry> vecGenerations = new Vector<>();
@@ -471,7 +471,7 @@ private JPopupMenu createContextMenu() {
471471
});
472472

473473
contextMenu.add(checkChildrenAgainstDataMapItem);
474-
checkChildrenAgainstDataMapItem.addActionListener(
474+
setMenuItemAction(checkChildrenAgainstDataMapItem,
475475
new ActionListener() {
476476
public void actionPerformed(ActionEvent e) {
477477
OperatorWindow ow = (OperatorWindow) contextMenu.getInvoker();
@@ -481,6 +481,13 @@ public void actionPerformed(ActionEvent e) {
481481
return contextMenu;
482482
}
483483

484+
private void setMenuItemAction(JMenuItem menuItem, ActionListener newListener) {
485+
for (ActionListener listener : menuItem.getActionListeners()) {
486+
menuItem.removeActionListener(listener);
487+
}
488+
menuItem.addActionListener(newListener);
489+
}
490+
484491
/**
485492
* just returns the name of the node
486493
*

0 commit comments

Comments
 (0)