[sweethome3d] 03/03: Update 01noMacOSX patch for new release.

Markus Koschany apo at moszumanska.debian.org
Mon Sep 25 00:11:41 UTC 2017


This is an automated email from the git hooks/post-receive script.

apo pushed a commit to branch master
in repository sweethome3d.

commit cc06d68f6a78ff04c61194dd8d96bca5a8e0d4e2
Author: Markus Koschany <apo at debian.org>
Date:   Mon Sep 25 01:57:27 2017 +0200

    Update 01noMacOSX patch for new release.
---
 debian/patches/01noMacOSX | 856 +++++++++++++++++++++++++++++++++++++++++++++-
 1 file changed, 846 insertions(+), 10 deletions(-)

diff --git a/debian/patches/01noMacOSX b/debian/patches/01noMacOSX
index b6de4f2..706be34 100644
--- a/debian/patches/01noMacOSX
+++ b/debian/patches/01noMacOSX
@@ -5,10 +5,12 @@ Subject: noMacOSX
 fails looking for missing classes. This patch fixes it.
 Author: Gabriele Giacone <1o5g4r8o at gmail.com>
 ---
- src/com/eteks/sweethome3d/HomeFramePane.java         | 2 ++
- src/com/eteks/sweethome3d/SweetHome3D.java           | 5 +++--
- src/com/eteks/sweethome3d/tools/OperatingSystem.java | 6 +++++-
- 3 files changed, 10 insertions(+), 3 deletions(-)
+ src/com/eteks/sweethome3d/HomeFramePane.java       |   2 +
+ src/com/eteks/sweethome3d/MacOSXConfiguration.java | 815 ---------------------
+ src/com/eteks/sweethome3d/SweetHome3D.java         |  11 +-
+ .../eteks/sweethome3d/tools/OperatingSystem.java   |   6 +-
+ 4 files changed, 13 insertions(+), 821 deletions(-)
+ delete mode 100644 src/com/eteks/sweethome3d/MacOSXConfiguration.java
 
 diff --git a/src/com/eteks/sweethome3d/HomeFramePane.java b/src/com/eteks/sweethome3d/HomeFramePane.java
 index 57fb352..56234d7 100644
@@ -26,11 +28,832 @@ index 57fb352..56234d7 100644
      updateFrameTitle(homeFrame, this.home, this.application);
      // Change component orientation
      applyComponentOrientation(ComponentOrientation.getOrientation(Locale.getDefault()));    
+diff --git a/src/com/eteks/sweethome3d/MacOSXConfiguration.java b/src/com/eteks/sweethome3d/MacOSXConfiguration.java
+deleted file mode 100644
+index c1428b1..0000000
+--- a/src/com/eteks/sweethome3d/MacOSXConfiguration.java
++++ /dev/null
+@@ -1,815 +0,0 @@
+-/*
+- * MacOSXConfiguraton.java 6 sept. 2006
+- *
+- * Sweet Home 3D, Copyright (c) 2006 Emmanuel PUYBARET / eTeks <info at eteks.com>
+- *
+- * This program is free software; you can redistribute it and/or modify
+- * it under the terms of the GNU General Public License as published by
+- * the Free Software Foundation; either version 2 of the License, or
+- * (at your option) any later version.
+- *
+- * This program is distributed in the hope that it will be useful,
+- * but WITHOUT ANY WARRANTY; without even the implied warranty of
+- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+- * GNU General Public License for more details.
+- *
+- * You should have received a copy of the GNU General Public License
+- * along with this program; if not, write to the Free Software
+- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+- */
+-package com.eteks.sweethome3d;
+-
+-import java.awt.Color;
+-import java.awt.Component;
+-import java.awt.Container;
+-import java.awt.EventQueue;
+-import java.awt.Frame;
+-import java.awt.GradientPaint;
+-import java.awt.Graphics;
+-import java.awt.Graphics2D;
+-import java.awt.Image;
+-import java.awt.Insets;
+-import java.awt.Point;
+-import java.awt.Window;
+-import java.awt.event.ActionEvent;
+-import java.awt.event.MouseEvent;
+-import java.awt.event.WindowAdapter;
+-import java.awt.event.WindowEvent;
+-import java.awt.event.WindowStateListener;
+-import java.io.IOException;
+-import java.lang.reflect.InvocationTargetException;
+-import java.util.List;
+-import java.util.concurrent.Executors;
+-import java.util.concurrent.atomic.AtomicBoolean;
+-
+-import javax.imageio.ImageIO;
+-import javax.media.j3d.Canvas3D;
+-import javax.swing.AbstractAction;
+-import javax.swing.JCheckBoxMenuItem;
+-import javax.swing.JComponent;
+-import javax.swing.JFrame;
+-import javax.swing.JMenu;
+-import javax.swing.JMenuBar;
+-import javax.swing.JMenuItem;
+-import javax.swing.JRootPane;
+-import javax.swing.JSplitPane;
+-import javax.swing.JToolBar;
+-import javax.swing.SwingUtilities;
+-import javax.swing.UIManager;
+-import javax.swing.border.AbstractBorder;
+-import javax.swing.border.Border;
+-import javax.swing.border.CompoundBorder;
+-import javax.swing.event.AncestorEvent;
+-import javax.swing.event.AncestorListener;
+-import javax.swing.event.MenuEvent;
+-import javax.swing.event.MenuListener;
+-import javax.swing.event.MouseInputAdapter;
+-
+-import com.apple.eawt.AppEvent.FullScreenEvent;
+-import com.apple.eawt.Application;
+-import com.apple.eawt.ApplicationAdapter;
+-import com.apple.eawt.ApplicationEvent;
+-import com.apple.eawt.FullScreenAdapter;
+-import com.apple.eawt.FullScreenListener;
+-import com.apple.eawt.FullScreenUtilities;
+-import com.eteks.sweethome3d.model.CollectionEvent;
+-import com.eteks.sweethome3d.model.CollectionListener;
+-import com.eteks.sweethome3d.model.Home;
+-import com.eteks.sweethome3d.model.UserPreferences;
+-import com.eteks.sweethome3d.swing.HomePane;
+-import com.eteks.sweethome3d.swing.ResourceAction;
+-import com.eteks.sweethome3d.swing.SwingTools;
+-import com.eteks.sweethome3d.tools.OperatingSystem;
+-import com.eteks.sweethome3d.viewcontroller.HomeController;
+-import com.sun.j3d.exp.swing.JCanvas3D;
+-
+-/**
+- * Configuration class that accesses to Mac OS X specifics.
+- * Do not invoke methods of this class without checking first if 
+- * <code>os.name</code> System property is <code>Mac OS X</code>.
+- * This class requires some classes of <code>com.apple.eawt</code> package  
+- * to compile.
+- * @author Emmanuel Puybaret
+- */
+-class MacOSXConfiguration {
+-  private static boolean fullScreen;
+-
+-  private MacOSXConfiguration() {    
+-  }
+-  
+-  /**
+-   * Returns <code>true</code> if the screen menu bar is supported.
+-   */
+-  public static boolean isScreenMenuBarSupported() {
+-    if (OperatingSystem.isJavaVersionGreaterOrEqual("1.9")) {
+-      try {
+-        // Call Desktop.isSupported(Desktop.Action.APP_ABOUT)
+-        Class<?> desktopClass = Class.forName("java.awt.Desktop");
+-        Object desktopInstance = desktopClass.getMethod("getDesktop").invoke(null);
+-        Class<?> desktopActionEnum = Class.forName("java.awt.Desktop$Action");
+-        return (Boolean)desktopClass.getMethod("isSupported", desktopActionEnum).invoke(
+-            desktopInstance, desktopActionEnum.getField("APP_ABOUT").get(null));
+-      } catch (Throwable ex) {
+-        return false;
+-      }
+-    } else {
+-      // By default, About menu item is available 
+-      return Application.getApplication().isAboutMenuItemPresent();
+-    }
+-  }
+-  
+-  /**
+-   * Binds <code>homeApplication</code> to Mac OS X application menu.
+-   */
+-  public static void bindToApplicationMenu(final SweetHome3D homeApplication) {
+-    final Application macosxApplication = Application.getApplication();
+-    // Create a default controller for an empty home and disable unrelated actions
+-    final HomeController defaultController = 
+-        homeApplication.createHomeFrameController(homeApplication.createHome()).getHomeController();
+-    final HomePane defaultHomeView = (HomePane)defaultController.getView();
+-    setDefaultActionsEnabled(defaultHomeView, false);
+-    final JMenuBar defaultMenuBar = defaultHomeView.getJMenuBar();
+-    
+-    JFrame frame = null;
+-    if (Boolean.getBoolean("apple.laf.useScreenMenuBar")) { 
+-      if (OperatingSystem.isJavaVersionBetween("1.7", "1.7.0_60")) {
+-        // Application#setDefaultMenuBar does nothing under Java 7 < 1.7.0_60
+-        frame = createDummyFrameWithDefaultMenuBar(homeApplication, defaultHomeView, defaultMenuBar);
+-      } else if (UIManager.getLookAndFeel().getClass().getName().equals(UIManager.getSystemLookAndFeelClassName())) {
+-        try {
+-          if (OperatingSystem.isJavaVersionGreaterOrEqual("1.9")) {
+-            // Call Desktop.setDefaultMenuBar(defaultMenuBar)
+-            Class desktopClass = Class.forName("java.awt.Desktop");
+-            Object desktopInstance = desktopClass.getMethod("getDesktop").invoke(null);
+-            desktopClass.getMethod("setDefaultMenuBar", JMenuBar.class).invoke(desktopInstance, defaultMenuBar);
+-          } else {
+-            macosxApplication.setDefaultMenuBar(defaultMenuBar);
+-          }
+-          addWindowMenu(null, defaultMenuBar, homeApplication, defaultHomeView, true);
+-        } catch (Throwable ex) {
+-          // Create default frame if setDefaultMenuBar isn't available
+-          frame = createDummyFrameWithDefaultMenuBar(homeApplication, defaultHomeView, defaultMenuBar);
+-        }
+-      }
+-    } 
+-
+-    final JFrame defaultFrame = frame;
+-    try {
+-      // Add a listener to Mac OS X application that will call
+-      // controller methods of the active frame
+-      macosxApplication.addApplicationListener(new ApplicationAdapter() {      
+-          @Override
+-          public void handleQuit(ApplicationEvent ev) { 
+-            MacOSXConfiguration.handleQuit(homeApplication, defaultController, defaultFrame);
+-          }
+-          
+-          @Override
+-          public void handleAbout(ApplicationEvent ev) {
+-            MacOSXConfiguration.handleAbout(homeApplication, defaultController, defaultFrame);
+-            ev.setHandled(true);
+-          }
+-    
+-          @Override
+-          public void handlePreferences(ApplicationEvent ev) {
+-            MacOSXConfiguration.handlePreferences(homeApplication, defaultController, defaultFrame);
+-          }
+-          
+-          @Override
+-          public void handleOpenFile(ApplicationEvent ev) {
+-            // handleOpenFile is called when user opens a document
+-            // associated with a Java Web Start application
+-            // Just call main with -open file arguments as JNLP specifies 
+-            MacOSXConfiguration.handleOpenFile(homeApplication, ev.getFilename());
+-          }
+-          
+-          @Override
+-          public void handleReOpenApplication(ApplicationEvent ev) {
+-            // handleReOpenApplication is called when user launches 
+-            // the application when it's already open
+-            MacOSXConfiguration.handleReOpenApplication(homeApplication);
+-          }
+-        });
+-      macosxApplication.setEnabledAboutMenu(true);
+-      macosxApplication.setEnabledPreferencesMenu(true);
+-    } catch (NoSuchMethodError er) {
+-      // Probably running under Java 9 where previous methods were removed
+-      if (OperatingSystem.isJavaVersionGreaterOrEqual("1.9")) {
+-        // Use the new handlers of Java 9 once compiling with Java 9 library is enabled
+-        /*
+-        java.awt.Desktop.getDesktop().setQuitHandler(new java.awt.desktop.QuitHandler() {
+-            public void handleQuitRequestWith(java.awt.desktop.QuitEvent ev, java.awt.desktop.QuitResponse answer) {
+-              MacOSXConfiguration.handleQuit(homeApplication, defaultController, defaultFrame);
+-            }
+-          });
+-        java.awt.Desktop.getDesktop().setAboutHandler(new java.awt.desktop.AboutHandler() {
+-            public void handleAbout(java.awt.desktop.AboutEvent ev) {
+-              MacOSXConfiguration.handleAbout(homeApplication, defaultController, defaultFrame);
+-            }
+-          });
+-        java.awt.Desktop.getDesktop().setPreferencesHandler(new java.awt.desktop.PreferencesHandler() {
+-            public void handlePreferences(java.awt.desktop.PreferencesEvent ev) {
+-              MacOSXConfiguration.handlePreferences(homeApplication, defaultController, defaultFrame);
+-            }
+-          });
+-        java.awt.Desktop.getDesktop().setOpenFileHandler(new java.awt.desktop.OpenFilesHandler() {
+-            public void openFiles(java.awt.desktop.OpenFilesEvent ev) {
+-              for (java.io.File file : ev.getFiles()) {
+-                MacOSXConfiguration.handleOpenFile(homeApplication, file.getAbsolutePath());
+-              }
+-            }
+-          });
+-        */
+-        try {
+-          // Call Desktop.getDesktop().setQuitStrategy(QuitStrategy.CLOSE_ALL_WINDOWS)
+-          // to prevent default call to System#exit 
+-          Class<?> desktopClass = Class.forName("java.awt.Desktop");
+-          Object desktopInstance = desktopClass.getMethod("getDesktop").invoke(null);
+-          Class<?> quitStrategyEnum = Class.forName("java.awt.desktop.QuitStrategy");
+-          desktopClass.getMethod("setQuitStrategy", quitStrategyEnum).invoke(
+-              desktopInstance, quitStrategyEnum.getField("CLOSE_ALL_WINDOWS").get(null));
+-        } catch (Exception ex) {
+-          ex.printStackTrace();
+-        }
+-      }
+-    }
+-    
+-    homeApplication.addHomesListener(new CollectionListener<Home>() {
+-      public void collectionChanged(CollectionEvent<Home> ev) {
+-        if (ev.getType() == CollectionEvent.Type.ADD) {
+-          final JFrame homeFrame = homeApplication.getHomeFrame(ev.getItem());
+-          if (!Boolean.getBoolean("com.eteks.sweethome3d.no3D")
+-              && !OperatingSystem.isJavaVersionGreaterOrEqual("1.7")) {
+-            // To avoid a possible freeze of the program when the user requests a window enlargement 
+-            // while the frame canvas 3D is instantiated, forbid window to be resized
+-            homeFrame.setResizable(false);
+-            Executors.newSingleThreadExecutor().submit(new Runnable() {                
+-                public void run() {
+-                  try {
+-                    final AtomicBoolean canvas3D = new AtomicBoolean();
+-                    do {
+-                      Thread.sleep(50);
+-                      EventQueue.invokeAndWait(new Runnable() {
+-                          public void run() {
+-                            canvas3D.set(homeFrame.isShowing()
+-                                && isParentOfCanvas3D(homeFrame, Canvas3D.class, JCanvas3D.class));
+-                          }
+-                        });
+-                    } while (!canvas3D.get());                  
+-                  } catch (InterruptedException ex) {
+-                  } catch (InvocationTargetException ex) {
+-                    ex.printStackTrace();
+-                  } finally {
+-                    EventQueue.invokeLater(new Runnable() {
+-                        public void run() {
+-                          homeFrame.setResizable(true);
+-                        }
+-                      });
+-                  }
+-                }
+-                
+-                private boolean isParentOfCanvas3D(Container parent, Class<?> ... canvas3DClasses) {
+-                  // Search 3D canvas among children and child windows in case the 3D view was detached
+-                  for (int i = 0; i < parent.getComponentCount(); i++) {
+-                    Component child = parent.getComponent(i);
+-                    for (Class<?> canvas3DClass : canvas3DClasses) {
+-                      if (canvas3DClass.isInstance(child)
+-                          || child instanceof Container
+-                            && isParentOfCanvas3D((Container)child, canvas3DClasses)) {
+-                        return true;
+-                      }
+-                    }
+-                  }
+-                  if (parent instanceof Window) {
+-                    for (Window window : ((Window)parent).getOwnedWindows()) {
+-                      if (isParentOfCanvas3D(window, canvas3DClasses)) {
+-                        return true;
+-                      }
+-                    }
+-                  } 
+-                  return false;
+-                }
+-              });
+-          }
+-          // Add Mac OS X Window menu on new homes
+-          MacOSXConfiguration.addWindowMenu(
+-              homeFrame, homeFrame.getJMenuBar(), homeApplication, defaultHomeView, false);
+-          
+-          if (OperatingSystem.isJavaVersionBetween("1.7", "1.7.0_60")) {
+-            // Help system to understand it should display the main menu of one of the remaining windows when a window is closed
+-            homeFrame.addWindowListener(new WindowAdapter() {
+-                @Override
+-                public void windowClosed(WindowEvent ev) {
+-                  if (defaultFrame != null) {
+-                    List<Home> homes = homeApplication.getHomes();
+-                    defaultFrame.setVisible(false);
+-                    defaultFrame.setVisible(true);
+-                    if (homes.size() > 0) {
+-                      homeApplication.getHomeFrame(homes.get(0)).toFront();
+-                      defaultFrame.setVisible(false);
+-                    }
+-                  }
+-                }
+-              });
+-          }
+-          homeFrame.addWindowStateListener(new WindowStateListener() {
+-              public void windowStateChanged(WindowEvent ev) {
+-                // Enable default actions if needed
+-                enableDefaultActions(homeApplication, defaultHomeView);
+-              }
+-            });
+-          // Don't enable actions in default menu bar (the menu bar might be displayed when file dialogs are displayed)
+-          setDefaultActionsEnabled(defaultHomeView, false);
+-        } else if (ev.getType() == CollectionEvent.Type.DELETE) {
+-          // Enable default actions if needed
+-          enableDefaultActions(homeApplication, defaultHomeView);
+-        }
+-      };
+-    });
+-    
+-    // Set application icon if program wasn't launch from bundle
+-    if (!Boolean.getBoolean("sweethome3d.bundle")) {
+-      try {
+-        String iconPath = homeApplication.getUserPreferences().getLocalizedString(HomePane.class, "about.icon");
+-        Image icon = ImageIO.read(HomePane.class.getResource(iconPath));
+-        macosxApplication.setDockIconImage(icon);
+-      } catch (NoSuchMethodError ex) {
+-        // Ignore icon change if setDockIconImage isn't available
+-      } catch (IOException ex) {
+-      }
+-    }
+-  }
+-
+-  /**
+-   * Handles quit action.
+-   */
+-  private static void handleQuit(final SweetHome3D homeApplication,
+-                                 final HomeController defaultController,
+-                                 final JFrame defaultFrame) {
+-    Home modifiedHome = null;
+-    int modifiedHomesCount = 0;
+-    for (Home home : homeApplication.getHomes()) {
+-      if (home.isModified()) {
+-        modifiedHome = home;
+-        modifiedHomesCount++;
+-      }
+-    }
+-    
+-    if (modifiedHomesCount == 1) {
+-      // If only one home is modified, close it and exit if it was successfully closed
+-      homeApplication.getHomeFrame(modifiedHome).toFront();
+-      homeApplication.getHomeFrameController(modifiedHome).getHomeController().close(
+-          new Runnable() {
+-            public void run() {
+-              for (Home home : homeApplication.getHomes()) {
+-                if (home.isModified()) {
+-                  return;
+-                }
+-              }
+-              System.exit(0);
+-            }
+-          });
+-    } else {
+-      handleApplicationMenuAction(new Runnable() {
+-          public void run() {
+-            getActiveHomeController(homeApplication, defaultController, defaultFrame).exit();
+-          }
+-        }, defaultFrame);
+-      if (homeApplication.getHomes().isEmpty()) {
+-        System.exit(0);
+-      }
+-    }
+-  }
+-  
+-  /**
+-   * Handles how about pane is displayed.
+-   */
+-  protected static void handleAbout(final SweetHome3D homeApplication,
+-                                    final HomeController defaultController,
+-                                    final JFrame defaultFrame) {
+-      handleApplicationMenuAction(new Runnable() {
+-          public void run() {
+-            getActiveHomeController(homeApplication, defaultController, defaultFrame).about();
+-          }
+-        }, defaultFrame); 
+-  }
+-
+-  /**
+-   * Handles how preferences pane is displayed.
+-   */
+-  private static void handlePreferences(final SweetHome3D homeApplication, 
+-                                        final HomeController defaultController, 
+-                                        final JFrame defaultFrame) {
+-    handleApplicationMenuAction(new Runnable() {
+-        public void run() {
+-          getActiveHomeController(homeApplication, defaultController, defaultFrame).editPreferences();
+-        }
+-      }, defaultFrame);
+-  }
+-
+-  /**
+-   * Handles the opening of a document.
+-   */
+-  private static void handleOpenFile(final SweetHome3D homeApplication, String fileName) {
+-    homeApplication.start(new String [] {"-open", fileName});
+-  }
+-  
+-  /**
+-   * Handles application when it's reopened.
+-   */
+-  private static void handleReOpenApplication(SweetHome3D homeApplication) {
+-    homeApplication.start(new String [0]);
+-  }
+-
+-  /**
+-   * Handles actions launched from the application menu.
+-   */
+-  private static void handleApplicationMenuAction(Runnable runnable, JFrame defaultFrame) {
+-    final Application macosxApplication = Application.getApplication();
+-    Frame activeFrame = getActiveFrame(defaultFrame);        
+-    if (defaultFrame != null && activeFrame == null) {
+-      // Move default frame to center to display dialogs at center
+-      defaultFrame.setLocationRelativeTo(null);
+-      defaultFrame.toFront();
+-      defaultFrame.setAlwaysOnTop(true);
+-    }
+-    
+-    try {
+-      // Disable About and Preferences menu items if possible 
+-      macosxApplication.setEnabledAboutMenu(false);
+-      macosxApplication.setEnabledPreferencesMenu(false);
+-    } catch (NoSuchMethodError ex) {
+-    }
+-    
+-    runnable.run();
+-
+-    try {
+-      // Enable About and Preferences menu items again
+-      macosxApplication.setEnabledAboutMenu(true);
+-      macosxApplication.setEnabledPreferencesMenu(true);
+-    } catch (NoSuchMethodError ex) {
+-    }
+-
+-    // Activate previous frame again
+-    if (activeFrame != null) {
+-      activeFrame.toFront();
+-    }
+-    if (defaultFrame != null && activeFrame == null) {
+-      defaultFrame.setAlwaysOnTop(false);
+-      // Move default frame out of user view
+-      defaultFrame.toBack();
+-      defaultFrame.setLocation(-10, 0);
+-    }
+-  }
+-
+-  /**
+-   * Returns the home controller that manages the active frame.
+-   */
+-  private static HomeController getActiveHomeController(SweetHome3D homeApplication,
+-                                                        HomeController defaultController,
+-                                                        JFrame defaultFrame) {
+-    if (defaultFrame != null) {
+-      Frame activeFrame = getActiveFrame(defaultFrame);
+-      if (activeFrame != null) {
+-        for (Home home : homeApplication.getHomes()) {
+-          if (homeApplication.getHomeFrame(home) == activeFrame) {
+-            return homeApplication.getHomeFrameController(home).getHomeController();
+-          }
+-        }
+-      }
+-    }
+-    return defaultController;
+-  }
+-  
+-  /**
+-   * Returns the active frame.
+-   */
+-  private static Frame getActiveFrame(JFrame defaultFrame) {
+-    Frame activeFrame = null;
+-    for (Frame frame : Frame.getFrames()) {
+-      if (frame != defaultFrame && frame.isActive()) {
+-        activeFrame = frame;
+-        break;
+-      }
+-    }
+-    return activeFrame;
+-  }
+-
+-  /**
+-   * Enables default menu bar actions if no window is at screen.
+-   */
+-  private static void enableDefaultActions(SweetHome3D homeApplication, HomePane defaultHomeView) {
+-    for (Home home : homeApplication.getHomes()) {
+-      if ((homeApplication.getHomeFrame(home).getState() & JFrame.ICONIFIED) == 0) {
+-        setDefaultActionsEnabled(defaultHomeView, false);
+-        return;
+-      }
+-    }
+-    // If all homes are iconified, enable actions in default menu bar
+-    setDefaultActionsEnabled(defaultHomeView, true);
+-  }
+-  
+-  /**
+-   * Enables / disables default actions in the given view.
+-   */
+-  private static void setDefaultActionsEnabled(HomePane homeView, boolean enabled) {
+-    for (HomePane.ActionType action : HomePane.ActionType.values()) {
+-      switch (action) {
+-        case ABOUT :
+-        case NEW_HOME :
+-        case NEW_HOME_FROM_EXAMPLE :
+-        case OPEN :
+-        case DELETE_RECENT_HOMES :
+-        case HELP :
+-          homeView.setEnabled(action, enabled);
+-          break;
+-        default :
+-          homeView.setEnabled(action, false);
+-      }
+-    }
+-  }
+-
+-  /**
+-   * Returns a dummy frame used to display the default menu bar.
+-   */
+-  private static JFrame createDummyFrameWithDefaultMenuBar(final SweetHome3D homeApplication,
+-                                                           final HomePane defaultHomeView, 
+-                                                           final JMenuBar defaultMenuBar) {
+-    final JFrame frame = new JFrame();
+-    EventQueue.invokeLater(new Runnable() {
+-        public void run() {
+-          // Create a default undecorated frame out of sight 
+-          // and attach the application menu bar of empty view to it
+-          frame.setLocation(-10, 0);
+-          frame.setUndecorated(true);
+-          frame.setBackground(new Color(0, 0, 0, 0));
+-          frame.setVisible(true);
+-          frame.setJMenuBar(defaultMenuBar);
+-          frame.setContentPane(defaultHomeView);
+-          addWindowMenu(frame, defaultMenuBar, homeApplication, defaultHomeView, true);
+-        }
+-      });
+-    homeApplication.addHomesListener(new CollectionListener<Home>() {
+-        public void collectionChanged(CollectionEvent<Home> ev) {
+-          if (ev.getType() == CollectionEvent.Type.DELETE) {
+-            EventQueue.invokeLater(new Runnable() {
+-                public void run() {
+-                  if (frame.isActive()) {
+-                    List<Home> homes = homeApplication.getHomes();
+-                    if (homes.size() >= 1) {
+-                      // Request focus in a remaining home if the dummy frame is active 
+-                      homeApplication.getHomeFrame(homes.get(homes.size() - 1)).requestFocus();
+-                    }
+-                  }
+-                }
+-              });
+-          }
+-        }
+-      });
+-    return frame;
+-  }
+-  
+-  /**
+-   * Adds Mac OS X standard Window menu to frame. 
+-   */
+-  private static void addWindowMenu(final JFrame frame, 
+-                                    final JMenuBar menuBar, 
+-                                    final SweetHome3D homeApplication,
+-                                    final HomePane defaultHomeView, 
+-                                    boolean defaultFrame) {
+-    UserPreferences preferences = homeApplication.getUserPreferences();
+-    final JMenu windowMenu = new JMenu(
+-        new ResourceAction(preferences, MacOSXConfiguration.class, "WINDOW_MENU", true));
+-    // Add Window menu before Help menu
+-    menuBar.add(windowMenu, menuBar.getComponentCount() - 1);
+-    windowMenu.add(new JMenuItem(
+-        new ResourceAction(preferences, MacOSXConfiguration.class, "MINIMIZE", !defaultFrame) {
+-            @Override
+-            public void actionPerformed(ActionEvent ev) {
+-              frame.setState(JFrame.ICONIFIED);
+-            }
+-          }));
+-    windowMenu.add(new JMenuItem(
+-        new ResourceAction(preferences, MacOSXConfiguration.class, "ZOOM", !defaultFrame) {
+-            @Override
+-            public void actionPerformed(ActionEvent ev) {
+-              if ((frame.getExtendedState() & JFrame.MAXIMIZED_BOTH) != 0) {
+-                frame.setExtendedState(frame.getExtendedState() & ~JFrame.MAXIMIZED_BOTH);
+-              } else {
+-                frame.setExtendedState(frame.getExtendedState() | JFrame.MAXIMIZED_BOTH);
+-              }
+-            }
+-          }));
+-    windowMenu.addSeparator();
+-    windowMenu.add(new JMenuItem(
+-        new ResourceAction(preferences, MacOSXConfiguration.class, "BRING_ALL_TO_FRONT", !defaultFrame) {
+-            @Override
+-            public void actionPerformed(ActionEvent ev) {
+-              // Avoid blinking while bringing other windows to front
+-              frame.setAlwaysOnTop(true);
+-              for (Home home : homeApplication.getHomes()) {
+-                JFrame applicationFrame = homeApplication.getHomeFrame(home);
+-                if (applicationFrame != frame
+-                    && applicationFrame.getState() != JFrame.ICONIFIED) {
+-                  applicationFrame.setFocusableWindowState(false);
+-                  applicationFrame.toFront();
+-                  applicationFrame.setFocusableWindowState(true);
+-                }
+-              }
+-              frame.setAlwaysOnTop(false);
+-            }
+-          }));
+-    
+-    windowMenu.addMenuListener(new MenuListener() {
+-        public void menuSelected(MenuEvent ev) {
+-          boolean firstMenuItem = true;
+-          // Fill menu dynamically with a menu item for the frame of each application home
+-          for (Home home : homeApplication.getHomes()) {
+-            final JFrame applicationFrame = homeApplication.getHomeFrame(home);
+-            JCheckBoxMenuItem windowMenuItem = new JCheckBoxMenuItem(
+-                new AbstractAction(applicationFrame.getTitle()) {
+-                    public void actionPerformed(ActionEvent ev) {
+-                      applicationFrame.toFront();
+-                    }
+-                  });
+-              
+-            if (frame == applicationFrame) {
+-              windowMenuItem.setSelected(true);
+-            }
+-            if (firstMenuItem) {
+-              windowMenu.addSeparator();
+-              firstMenuItem = false;
+-            }
+-            windowMenu.add(windowMenuItem);
+-          }
+-        }
+-
+-        public void menuDeselected(MenuEvent ev) {
+-          // Remove dynamically filled part of menu
+-          for (int i = windowMenu.getMenuComponentCount() - 1; i >= 4; i--) {
+-            windowMenu.remove(i);
+-          }
+-        }
+-
+-        public void menuCanceled(MenuEvent ev) {
+-          menuDeselected(ev);
+-        }
+-      });
+-  }
+-  
+-  /**
+-   * Updates pane tool bar to integrate it with frame title under Mac OS X.
+-   */
+-  public static void installToolBar(final JRootPane rootPane) {
+-    List<JToolBar> toolBars = SwingTools.findChildren(rootPane, JToolBar.class);
+-    if (OperatingSystem.isJavaVersionGreaterOrEqual("1.7.0_12")
+-        && toolBars.size() == 1) {
+-      rootPane.putClientProperty("apple.awt.brushMetalLook", true);
+-      final JToolBar toolBar = toolBars.get(0);
+-      toolBar.setFloatable(false);
+-      toolBar.setBorder(new AbstractBorder() {
+-          private final Color TOP_GRADIENT_COLOR_ACTIVATED_FRAME = OperatingSystem.isMacOSXYosemiteOrSuperior() 
+-              ? new Color(212, 212, 212)
+-              : new Color(222, 222, 222);
+-          private final Color BOTTOM_GRADIENT_COLOR_ACTIVATED_FRAME = OperatingSystem.isMacOSXYosemiteOrSuperior() 
+-              ? new Color(209, 209, 209)
+-              : new Color(178, 178, 178);
+-          private final Color TOP_GRADIENT_COLOR_DEACTIVATED_FRAME  = new Color(244, 244, 244);
+-          private final Color BOTTOM_GRADIENT_COLOR_DEACTIVATED_FRAME = TOP_GRADIENT_COLOR_ACTIVATED_FRAME;
+-
+-          @Override
+-          public boolean isBorderOpaque() {
+-            return true;
+-          }
+-          
+-          @Override
+-          public Insets getBorderInsets(Component c) {
+-            return new Insets(-4, 4, 0, 4);
+-          }
+-          
+-          @Override
+-          public void paintBorder(Component c, Graphics g, int x, int y, int width, int height) {
+-            // Paint the tool bar with a gradient different if the frame is activated or not
+-            Component root = SwingUtilities.getRoot(rootPane);
+-            boolean active = ((JFrame)root).isActive();
+-            ((Graphics2D)g).setPaint(new GradientPaint(0, y, 
+-                active ? TOP_GRADIENT_COLOR_ACTIVATED_FRAME : TOP_GRADIENT_COLOR_DEACTIVATED_FRAME, 
+-                0, y + height - 1, 
+-                active ? BOTTOM_GRADIENT_COLOR_ACTIVATED_FRAME : BOTTOM_GRADIENT_COLOR_DEACTIVATED_FRAME));
+-            g.fillRect(x, y, x + width, y + height);
+-          }
+-        });
+-      
+-      // Manage frame moves when the user clicks in the tool bar background
+-      final MouseInputAdapter mouseListener = new MouseInputAdapter() {
+-          private Point lastLocation;
+-          
+-          @Override
+-          public void mousePressed(MouseEvent ev) {
+-            this.lastLocation = ev.getPoint();
+-            SwingUtilities.convertPointToScreen(this.lastLocation, ev.getComponent());
+-          }
+-    
+-          @Override
+-          public void mouseDragged(MouseEvent ev) {
+-            Point newLocation = ev.getPoint();
+-            SwingUtilities.convertPointToScreen(newLocation, ev.getComponent());
+-            Component root = SwingUtilities.getRoot(rootPane);
+-            root.setLocation(root.getX() + newLocation.x - this.lastLocation.x, 
+-                root.getY() + newLocation.y - this.lastLocation.y);
+-            this.lastLocation = newLocation;
+-          }
+-        };
+-      toolBar.addMouseListener(mouseListener);
+-      toolBar.addMouseMotionListener(mouseListener);
+-      
+-      toolBar.addAncestorListener(new AncestorListener() {
+-          private Object fullScreenListener;
+-
+-          public void ancestorAdded(AncestorEvent ev) {
+-            ((Window)SwingUtilities.getRoot(toolBar)).addWindowListener(new WindowAdapter() {
+-                @Override
+-                public void windowActivated(WindowEvent ev) {
+-                  toolBar.repaint();
+-                }
+-                
+-                @Override
+-                public void windowDeactivated(WindowEvent ev) {
+-                  toolBar.repaint();
+-                }
+-              });
+-            toolBar.repaint();
+-
+-            try {
+-              Class fullScreenUtilitiesClass = Class.forName("com.apple.eawt.FullScreenUtilities");
+-              this.fullScreenListener = new FullScreenAdapter() {
+-                  public void windowEnteredFullScreen(FullScreenEvent ev) {
+-                    fullScreen = true;
+-                    toolBar.removeMouseListener(mouseListener);
+-                    toolBar.removeMouseMotionListener(mouseListener);
+-                  }
+-                  
+-                  public void windowExitedFullScreen(FullScreenEvent ev) {
+-                    fullScreen = false;
+-                    toolBar.addMouseListener(mouseListener);
+-                    toolBar.addMouseMotionListener(mouseListener);
+-                  }
+-                };
+-              FullScreenUtilities.addFullScreenListenerTo((Window)SwingUtilities.getRoot(rootPane), 
+-                  (FullScreenListener)this.fullScreenListener);
+-            } catch (ClassNotFoundException ex) {
+-              // If FullScreenUtilities isn't supported, ignore mouse listener switch
+-            }
+-          }
+-  
+-          public void ancestorMoved(AncestorEvent ev) {
+-          }
+-  
+-          public void ancestorRemoved(AncestorEvent ev) {
+-            toolBar.removeAncestorListener(this);
+-            try {
+-              Class fullScreenUtilitiesClass = Class.forName("com.apple.eawt.FullScreenUtilities");
+-              FullScreenUtilities.removeFullScreenListenerFrom((Window)SwingUtilities.getRoot(rootPane), 
+-                  (FullScreenListener)this.fullScreenListener);
+-            } catch (ClassNotFoundException ex) {
+-              // If FullScreenUtilities isn't supported, ignore mouse listener switch
+-            }
+-          }
+-        });
+-      
+-      // Empty left, bottom and right borders of sibling split pane
+-      List<JSplitPane> siblings = SwingTools.findChildren((JComponent)toolBar.getParent(), JSplitPane.class);
+-      if (siblings.size() >= 1) {
+-        JComponent siblingComponent = siblings.get(0);
+-        if (siblingComponent.getParent() == toolBar.getParent()) {
+-          Border border = siblingComponent.getBorder();
+-          final Insets borderInsets = border.getBorderInsets(siblingComponent);
+-          final Insets filledBorderInsets = new Insets(1, 0, 0, 0);
+-          siblingComponent.setBorder(new CompoundBorder(border, 
+-              new AbstractBorder() {
+-                @Override
+-                public Insets getBorderInsets(Component c) {
+-                  return filledBorderInsets;
+-                }
+-                
+-                @Override
+-                public void paintBorder(Component c, Graphics g, int x, int y, int width, int height) {
+-                  Color background = c.getBackground();
+-                  g.setColor(background);
+-                  g.fillRect(x, y, width, 1);
+-                  g.fillRect(x - borderInsets.left, y, borderInsets.left, height + borderInsets.bottom);
+-                  g.fillRect(x + width, y, borderInsets.right, height + borderInsets.bottom);
+-                  g.fillRect(x, y + height, width, borderInsets.bottom);
+-                }              
+-              }));
+-        }
+-      }
+-    }
+-  }
+-
+-  /**
+-   * Returns <code>true</code> if the given window is displayed in full screen mode.
+-   */
+-  public static boolean isWindowFullScreen(final JFrame frame) {
+-    return fullScreen;
+-  }
+-}
 diff --git a/src/com/eteks/sweethome3d/SweetHome3D.java b/src/com/eteks/sweethome3d/SweetHome3D.java
-index f9886aa..b4035aa 100644
+index 1e40064..0569f09 100644
 --- a/src/com/eteks/sweethome3d/SweetHome3D.java
 +++ b/src/com/eteks/sweethome3d/SweetHome3D.java
-@@ -483,10 +483,12 @@ public class SweetHome3D extends HomeApplication {
+@@ -484,10 +484,12 @@ public class SweetHome3D extends HomeApplication {
        // Too bad we can't retrieve homes to recover
        ex.printStackTrace();
      }
@@ -43,7 +866,20 @@ index f9886aa..b4035aa 100644
  
      // Run everything else in Event Dispatch Thread
      EventQueue.invokeLater(new Runnable() {
-@@ -594,8 +596,7 @@ public class SweetHome3D extends HomeApplication {
+@@ -520,9 +522,9 @@ public class SweetHome3D extends HomeApplication {
+       if (System.getProperty("apple.laf.useScreenMenuBar") == null) {
+         // Use Mac OS X screen menu bar for frames menu bar
+         // except for bundles under macOS 10.13
+-        System.setProperty("apple.laf.useScreenMenuBar", 
+-            String.valueOf(OperatingSystem.compareVersions(System.getProperty("os.version"), "10.13") < 0
+-                || MacOSXConfiguration.isScreenMenuBarSupported()));
++        //System.setProperty("apple.laf.useScreenMenuBar", 
++        //    String.valueOf(OperatingSystem.compareVersions(System.getProperty("os.version"), "10.13") < 0
++        //        || MacOSXConfiguration.isScreenMenuBarSupported()));
+       }
+       // Force the use of Quartz under Mac OS X for better Java 2D rendering performance
+       System.setProperty("apple.awt.graphics.UseQuartz", "true");
+@@ -598,8 +600,7 @@ public class SweetHome3D extends HomeApplication {
                  && home.getName() == null
                  && !home.isRecovered()) {
                if (OperatingSystem.isMacOSXLionOrSuperior()
@@ -54,7 +890,7 @@ index f9886aa..b4035aa 100644
                  new Timer(3000, new ActionListener() {
                      public void actionPerformed(ActionEvent ev) {
 diff --git a/src/com/eteks/sweethome3d/tools/OperatingSystem.java b/src/com/eteks/sweethome3d/tools/OperatingSystem.java
-index 9996ec2..0709c4d 100644
+index 1b5522a..3fff322 100644
 --- a/src/com/eteks/sweethome3d/tools/OperatingSystem.java
 +++ b/src/com/eteks/sweethome3d/tools/OperatingSystem.java
 @@ -33,7 +33,6 @@ import java.util.Timer;
@@ -65,7 +901,7 @@ index 9996ec2..0709c4d 100644
  import com.eteks.sweethome3d.model.Home;
  
  /**
-@@ -432,9 +431,12 @@ public class OperatingSystem {
+@@ -434,9 +433,12 @@ public class OperatingSystem {
     */
    public static File getDefaultApplicationFolder() throws IOException {
      File userApplicationFolder; 
@@ -78,7 +914,7 @@ index 9996ec2..0709c4d 100644
        userApplicationFolder = new File(System.getProperty("user.home"), "Application Data");
        // If user Application Data directory doesn't exist, use user home
        if (!userApplicationFolder.exists()) {
-@@ -455,10 +457,12 @@ public class OperatingSystem {
+@@ -457,10 +459,12 @@ public class OperatingSystem {
     * This class requires some classes of <code>com.apple.eio</code> package  
     * to compile.
     */

-- 
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-java/sweethome3d.git



More information about the pkg-java-commits mailing list