2424
2525import cc .arduino .packages .MonitorFactory ;
2626
27+ import cc .arduino .view .StubMenuListener ;
2728import com .jcraft .jsch .JSchException ;
2829import jssc .SerialPortException ;
2930import processing .app .debug .*;
@@ -92,7 +93,6 @@ public class Editor extends JFrame implements RunnerListener {
9293
9394 // file, sketch, and tools menus for re-inserting items
9495 JMenu fileMenu ;
95- JMenu sketchMenu ;
9696 JMenu toolsMenu ;
9797
9898 int numTools = 0 ;
@@ -186,7 +186,6 @@ public void windowActivated(WindowEvent e) {
186186 // re-add the sub-menus that are shared by all windows
187187 fileMenu .insert (sketchbookMenu , 2 );
188188 fileMenu .insert (examplesMenu , 3 );
189- buildSketchMenu ();
190189 int offset = 0 ;
191190 for (JMenu menu : base .getBoardsCustomMenus ()) {
192191 toolsMenu .insert (menu , numTools + offset );
@@ -200,7 +199,6 @@ public void windowActivated(WindowEvent e) {
200199 public void windowDeactivated (WindowEvent e ) {
201200 fileMenu .remove (sketchbookMenu );
202201 fileMenu .remove (examplesMenu );
203- buildSketchMenu ();
204202 List <Component > toolsMenuItemsToRemove = new LinkedList <Component >();
205203 for (Component menuItem : toolsMenu .getMenuComponents ()) {
206204 if (menuItem instanceof JComponent ) {
@@ -492,7 +490,20 @@ protected void buildMenuBar() throws Exception {
492490 JMenuBar menubar = new JMenuBar ();
493491 menubar .add (buildFileMenu ());
494492 menubar .add (buildEditMenu ());
495- menubar .add (buildSketchMenu ());
493+
494+ final JMenu sketchMenu = new JMenu (_ ("Sketch" ));
495+ sketchMenu .addMenuListener (new StubMenuListener () {
496+
497+ @ Override
498+ public void menuSelected (MenuEvent e ) {
499+ buildSketchMenu (sketchMenu );
500+ sketchMenu .revalidate ();
501+ validate ();
502+ }
503+ });
504+ buildSketchMenu (sketchMenu );
505+ menubar .add (sketchMenu );
506+
496507 menubar .add (buildToolsMenu ());
497508 menubar .add (buildHelpMenu ());
498509 setJMenuBar (menubar );
@@ -609,12 +620,8 @@ public void actionPerformed(ActionEvent e) {
609620 }
610621
611622
612- protected JMenu buildSketchMenu () {
613- if (sketchMenu == null ) {
614- sketchMenu = new JMenu (_ ("Sketch" ));
615- } else {
616- sketchMenu .removeAll ();
617- }
623+ protected void buildSketchMenu (JMenu sketchMenu ) {
624+ sketchMenu .removeAll ();
618625
619626 JMenuItem item = newJMenuItem (_ ("Verify / Compile" ), 'R' );
620627 item .addActionListener (new ActionListener () {
@@ -623,7 +630,7 @@ public void actionPerformed(ActionEvent e) {
623630 }
624631 });
625632 sketchMenu .add (item );
626-
633+
627634 item = newJMenuItem (_ ("Upload" ), 'U' );
628635 item .addActionListener (new ActionListener () {
629636 public void actionPerformed (ActionEvent e ) {
@@ -682,8 +689,6 @@ public void actionPerformed(ActionEvent e) {
682689 }
683690 });
684691 sketchMenu .add (item );
685-
686- return sketchMenu ;
687692 }
688693
689694
@@ -733,9 +738,7 @@ public void actionPerformed(ActionEvent e) {
733738 });
734739 toolsMenu .add (item );
735740
736- toolsMenu .addMenuListener (new MenuListener () {
737- public void menuCanceled (MenuEvent e ) {}
738- public void menuDeselected (MenuEvent e ) {}
741+ toolsMenu .addMenuListener (new StubMenuListener () {
739742 public void menuSelected (MenuEvent e ) {
740743 //System.out.println("Tools menu selected.");
741744 populatePortMenu ();
@@ -2025,7 +2028,7 @@ public void handleRun(final boolean verbose, Runnable verboseHandler, Runnable n
20252028 // placed on the event thread and causes a hang--bad idea all around.
20262029 new Thread (verbose ? verboseHandler : nonVerboseHandler ).start ();
20272030 }
2028-
2031+
20292032 class BuildHandler implements Runnable {
20302033
20312034 private final boolean verbose ;
0 commit comments