diff --git a/app/src/processing/app/Base.java b/app/src/processing/app/Base.java index 2312c880f27..0bad925fdbb 100644 --- a/app/src/processing/app/Base.java +++ b/app/src/processing/app/Base.java @@ -950,15 +950,19 @@ protected void rebuildSketchbookMenu(JMenu menu) { } - public void rebuildImportMenu(JMenu importMenu, final Editor editor) { + // NOTE(remoun): This method is called whenever the Sketch > Import Library + // menu is expanded, so make sure not to break that completely. + // Showing an error dialog and skipping invalid entries is fine. + public void rebuildImportMenu(final Editor editor) { + JMenu importMenu = Editor.importMenu; importMenu.removeAll(); - + JMenuItem addLibraryMenuItem = new JMenuItem(_("Add Library...")); addLibraryMenuItem.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { Base.this.handleAddLibrary(editor); Base.this.onBoardOrPortChange(); - Base.this.rebuildImportMenu(Editor.importMenu, editor); + Base.this.rebuildImportMenu(editor); Base.this.rebuildExamplesMenu(Editor.examplesMenu); } }); @@ -1015,8 +1019,7 @@ public void onBoardOrPortChange() { } } - - public void rebuildBoardsMenu(JMenu menu, final Editor editor) { + public void rebuildBoardsMenu(JMenu menu) { //System.out.println("rebuilding boards menu"); menu.removeAll(); ButtonGroup group = new ButtonGroup(); diff --git a/app/src/processing/app/Editor.java b/app/src/processing/app/Editor.java index 61051f93c97..8badd416c67 100644 --- a/app/src/processing/app/Editor.java +++ b/app/src/processing/app/Editor.java @@ -629,7 +629,15 @@ public void actionPerformed(ActionEvent e) { if (importMenu == null) { importMenu = new JMenu(_("Import Library...")); - base.rebuildImportMenu(importMenu, this); + importMenu.addItemListener(new ItemListener() { + public void itemStateChanged(ItemEvent e) { + if (e.getStateChange() == ItemEvent.SELECTED) { + base.rebuildImportMenu(Editor.this); + } + } + }); + // Rebuild the import menu here, so it's faster the first time it expands. + base.rebuildImportMenu(this); } sketchMenu.add(importMenu); @@ -682,7 +690,7 @@ public void actionPerformed(ActionEvent e) { if (boardsMenu == null) { boardsMenu = new JMenu(_("Board")); - base.rebuildBoardsMenu(boardsMenu, this); + base.rebuildBoardsMenu(boardsMenu); } menu.add(boardsMenu);