(JAL-368) ensure window never gets a negative Y coordinate when dragged or resised.
[jalview.git] / src / jalview / gui / Desktop.java
index 3205cab..b6cbea3 100644 (file)
@@ -1,6 +1,6 @@
 /*
- * Jalview - A Sequence Alignment Editor and Viewer (Version 2.6)
- * Copyright (C) 2010 J Procter, AM Waterhouse, G Barton, M Clamp, S Searle
+ * Jalview - A Sequence Alignment Editor and Viewer (Version 2.7)
+ * Copyright (C) 2011 J Procter, AM Waterhouse, G Barton, M Clamp, S Searle
  * 
  * This file is part of Jalview.
  * 
@@ -204,6 +204,10 @@ public class Desktop extends jalview.jbgui.GDesktop implements
 
     public void dragFrame(JComponent f, int newX, int newY)
     {
+      if (newY<0)
+      {
+        newY=0;
+      }
       delegate.dragFrame(f, newX, newY);
     }
 
@@ -240,6 +244,11 @@ public class Desktop extends jalview.jbgui.GDesktop implements
     public void resizeFrame(JComponent f, int newX, int newY, int newWidth,
             int newHeight)
     {
+      Rectangle b=desktop.getBounds();
+      if (newY<0)
+      {
+        newY=0;
+      }
       delegate.resizeFrame(f, newX, newY, newWidth, newHeight);
     }
 
@@ -282,12 +291,14 @@ public class Desktop extends jalview.jbgui.GDesktop implements
     //sp.getViewport().setView(desktop);
     //getContentPane().add(sp, BorderLayout.CENTER);
     getContentPane().add(desktop, BorderLayout.CENTER);
-      desktop.setDragMode(JDesktopPane.OUTLINE_DRAG_MODE);
+    desktop.setDragMode(JDesktopPane.OUTLINE_DRAG_MODE);
+    
       
     // This line prevents Windows Look&Feel resizing all new windows to maximum
     // if previous window was maximised
     desktop.setDesktopManager(new MyDesktopManager(
             new DefaultDesktopManager()));
+    
     Rectangle dims = getLastKnownDimensions("");
     if (dims != null)
     {
@@ -319,8 +330,11 @@ public class Desktop extends jalview.jbgui.GDesktop implements
       @Override
       public void run()
       {
+        Cache.log.debug("Starting news thread.");
+
         jvnews = new BlogReader(me);
         showNews.setVisible(true);
+        Cache.log.debug("Completed news thread.");
       }
     }).start();
     
@@ -332,7 +346,8 @@ public class Desktop extends jalview.jbgui.GDesktop implements
       }
     });
 
-    this.addMouseListener(new MouseAdapter()
+    MouseAdapter ma;
+    this.addMouseListener(ma=new MouseAdapter()
     {
       public void mousePressed(MouseEvent evt)
       {
@@ -342,6 +357,8 @@ public class Desktop extends jalview.jbgui.GDesktop implements
         }
       }
     });
+    desktop.addMouseListener(ma);
+   
     this.addFocusListener(new FocusListener()
     {
       
@@ -409,22 +426,19 @@ public class Desktop extends jalview.jbgui.GDesktop implements
   void showNews(boolean visible)
   {
     {
-      jvnews.setVisible(visible);
+      Cache.log.debug((visible?"Showing":"Hiding")+" news.");
       showNews.setSelected(visible);
-      if (visible)
+      if (visible && !jvnews.isVisible())
       {
-        jvnews.refreshNews();
-        jvnews.toFront();
-        // try real hard to get focus when the news is first opened
         new Thread(new Runnable() {
           @Override
           public void run()
           {
-            while (jvnews.isVisible() && !jvnews.requestFocusInWindow())
-            {
-              try { Thread.sleep(50); } catch (InterruptedException x) {}; 
-            }
-            
+            long instance=System.currentTimeMillis();
+            Desktop.instance.setProgressBar("Refreshing news", instance);
+            jvnews.refreshNews();
+            Desktop.instance.setProgressBar(null, instance);
+            jvnews.showNews();
           }
         }).start();
       }
@@ -2052,7 +2066,6 @@ public class Desktop extends jalview.jbgui.GDesktop implements
         }
       }
     }
-
   }
 
   /**
@@ -2060,10 +2073,7 @@ public class Desktop extends jalview.jbgui.GDesktop implements
    */
   public void relayerWindows()
   {
-    if (jvnews!=null && jvnews.isVisible())
-    {
-      jvnews.toFront();
-    }
+    
   }
 
   protected JMenuItem groovyShell;