From: <sh...@us...> - 2009-04-02 17:03:24
|
Revision: 14889 http://jedit.svn.sourceforge.net/jedit/?rev=14889&view=rev Author: shlomy Date: 2009-04-02 17:03:22 +0000 (Thu, 02 Apr 2009) Log Message: ----------- Fixed bug #2609091: Windows appear out of view When loading the view location and size from perspective.xml, check that the view bounds are inside the screen, and if not, fix them. Such cases can happen, for example, if a user worked in a dual monitor environment, where the view was in the 2nd monitor, and then restarted jEdit in a single monitor environment. The coordinates of the view in this case will be outside the single monitor boundaries, and the view will be hidden if not corrected. Modified Paths: -------------- jEdit/trunk/org/gjt/sp/jedit/View.java jEdit/trunk/org/gjt/sp/jedit/jedit.props Modified: jEdit/trunk/org/gjt/sp/jedit/View.java =================================================================== --- jEdit/trunk/org/gjt/sp/jedit/View.java 2009-04-02 15:33:57 UTC (rev 14888) +++ jEdit/trunk/org/gjt/sp/jedit/View.java 2009-04-02 17:03:22 UTC (rev 14889) @@ -31,6 +31,7 @@ import java.awt.Dimension; import java.awt.Frame; import java.awt.GraphicsDevice; +import java.awt.GraphicsEnvironment; import java.awt.Rectangle; import java.awt.event.FocusAdapter; import java.awt.event.FocusEvent; @@ -2171,20 +2172,40 @@ } } //}}} + // Checks if the specified rectangle is within screen boundaries + private boolean isInsideScreen(View parent, Rectangle r) + { + Rectangle bounds; + if (parent == null) + bounds = GraphicsEnvironment.getLocalGraphicsEnvironment(). + getMaximumWindowBounds(); + else + bounds = parent.getGraphicsConfiguration().getBounds(); + int minWidth = jEdit.getIntegerProperty("view.minStartupWidth"); + int minHeight = jEdit.getIntegerProperty("view.minStartupHeight"); + return (r.x < bounds.width - minWidth && + r.x + r.width > minWidth && + r.y < bounds.height - minHeight && + r.y + r.height > minHeight); + } + public void adjust(View parent, ViewConfig config) { if(config.width != 0 && config.height != 0) { Rectangle desired = new Rectangle( config.x, config.y, config.width, config.height); - if(OperatingSystem.isX11() && Debug.GEOMETRY_WORKAROUND) - { - new GUIUtilities.UnixWorkaround(this,"view",desired,config.extState); - } + if (! isInsideScreen(parent, desired)) + setLocationRelativeTo(parent); else { - setBounds(desired); - setExtendedState(config.extState); + if(OperatingSystem.isX11() && Debug.GEOMETRY_WORKAROUND) + new GUIUtilities.UnixWorkaround(this,"view",desired,config.extState); + else + { + setBounds(desired); + setExtendedState(config.extState); + } } } else Modified: jEdit/trunk/org/gjt/sp/jedit/jedit.props =================================================================== --- jEdit/trunk/org/gjt/sp/jedit/jedit.props 2009-04-02 15:33:57 UTC (rev 14888) +++ jEdit/trunk/org/gjt/sp/jedit/jedit.props 2009-04-02 17:03:22 UTC (rev 14889) @@ -246,6 +246,10 @@ # as if selection mode were rectangular mode view.ctrlForRectangularSelection=true +# Minimal view size that is considered "valid" when loading perspective +view.minStartupWidth=200 +view.minStartupHeight=200 + # The default bufferSet scope editpane.bufferset.default=global This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |