X-Git-Url: http://secure.phpeclipse.com

diff --git a/net.sourceforge.phpeclipse.webbrowser/src/net/sourceforge/phpeclipse/webbrowser/views/BrowserView.java b/net.sourceforge.phpeclipse.webbrowser/src/net/sourceforge/phpeclipse/webbrowser/views/BrowserView.java
index db5d321..c60b9e4 100644
--- a/net.sourceforge.phpeclipse.webbrowser/src/net/sourceforge/phpeclipse/webbrowser/views/BrowserView.java
+++ b/net.sourceforge.phpeclipse.webbrowser/src/net/sourceforge/phpeclipse/webbrowser/views/BrowserView.java
@@ -10,13 +10,19 @@
  *******************************************************************************/
 package net.sourceforge.phpeclipse.webbrowser.views;
 
+import java.io.UnsupportedEncodingException;
+import java.net.URLDecoder;
+import java.nio.charset.Charset;
+
 import net.sourceforge.phpeclipse.webbrowser.internal.WebBrowser;
 import net.sourceforge.phpeclipse.webbrowser.internal.WebBrowserUtil;
 
-import org.eclipse.core.resources.IFile;
+import org.eclipse.swt.browser.Browser;
+import org.eclipse.swt.browser.CloseWindowListener;
 import org.eclipse.swt.browser.ProgressListener;
 import org.eclipse.swt.browser.StatusTextListener;
 import org.eclipse.swt.browser.TitleListener;
+import org.eclipse.swt.browser.WindowEvent;
 import org.eclipse.swt.widgets.Composite;
 import org.eclipse.ui.part.IShowInTarget;
 import org.eclipse.ui.part.ShowInContext;
@@ -26,7 +32,7 @@ import org.eclipse.ui.part.ViewPart;
  * <code>BrowserView</code> is a simple demonstration of the SWT Browser
  * widget. It consists of a workbench view and tab folder where each tab in the
  * folder allows the user to interact with a control.
- *
+ * 
  * @see ViewPart
  */
 public class BrowserView extends ViewPart implements IShowInTarget {
@@ -38,13 +44,22 @@ public class BrowserView extends ViewPart implements IShowInTarget {
 
 	/**
 	 * Create the example
-	 *
+	 * 
 	 * @see ViewPart#createPartControl
 	 */
 	public void createPartControl(Composite frame) {
 		try {
 			if (WebBrowserUtil.isInternalBrowserOperational()) {
 				fInstance = new WebBrowser(frame, true, true);
+				// #1365431 (toshihiro) start
+				fInstance.getBrowser().addCloseWindowListener(
+						new CloseWindowListener() {
+							public void close(WindowEvent event) {
+								getViewSite().getPage().hideView(
+										BrowserView.this);
+							}
+						});
+				// #1365431 (toshihiro) end
 			}
 		} catch (Exception e) {
 			fInstance = null;
@@ -53,7 +68,7 @@ public class BrowserView extends ViewPart implements IShowInTarget {
 
 	/**
 	 * Called when we must grab focus.
-	 *
+	 * 
 	 * @see org.eclipse.ui.part.ViewPart#setFocus
 	 */
 	public void setFocus() {
@@ -74,9 +89,14 @@ public class BrowserView extends ViewPart implements IShowInTarget {
 	}
 
 	public void setUrl(final String url) {
-		if (fInstance != null) {
-			fUrl = url;
-			fInstance.setURL(url);
+	        if (fInstance != null) {
+              if (fInstance.getURL() != null && fInstance.getURL().length() > 0) {
+                fUrl = fInstance.getURL();
+                fInstance.setURL(fUrl);
+            } else {
+                fUrl = url;
+                fInstance.setURL(url);
+            }
 			// try {
 			// ResourcesPlugin.getWorkspace().run(new IWorkspaceRunnable() {
 			// public void run(IProgressMonitor monitor) throws CoreException {
@@ -84,7 +104,7 @@ public class BrowserView extends ViewPart implements IShowInTarget {
 			// }
 			// }, null);
 			// } catch (CoreException e) {
-			// // TODO Auto-generated catch block
+			// // TO DO Auto-generated catch block
 			// e.printStackTrace();
 			// }
 		}
@@ -100,18 +120,31 @@ public class BrowserView extends ViewPart implements IShowInTarget {
 			// }
 			// }, null);
 			// } catch (CoreException e) {
-			// // TODO Auto-generated catch block
+			// // TO DO Auto-generated catch block
 			// e.printStackTrace();
 			// }
 		}
 	}
 
+	
+	
 	public void refresh(String url) {
-		if (fInstance != null) {
-			if (fUrl == null || !fUrl.equals(url)) {
+		if (fInstance != null && url != null) {
+			if (fUrl == null) {
 				setUrl(url);
 			} else {
-				refresh();
+				Browser browser = fInstance.getBrowser();
+				if (browser != null) {
+					String browserUrl = browser.getUrl();
+					try {
+						browserUrl = URLDecoder.decode(browserUrl, J5CharsetEmulator.defaultCharset().name());
+					} catch (UnsupportedEncodingException e) {
+						// e.printStackTrace();
+					}
+					if (!url.equals(browserUrl)) {
+						setUrl(url);
+					}
+				}
 			}
 		}
 	}
@@ -143,13 +176,19 @@ public class BrowserView extends ViewPart implements IShowInTarget {
 				return true;
 			}
 		}
-		if (context.getInput() instanceof IFile) {
-			IFile file = (IFile) context.getInput();
-			String localhostURL;
-			localhostURL = "file:///" + file.getLocation().toString();
-			setUrl(localhostURL);
-			return true;
-		}
+		// *WARNING*
+		// This causes unexpected behaviour such as downloading (save file).
+		// It depends on mime-types setting and native browser, it isn't under control of eclipse.
+		// (IE shows script as plain text since .php is unknown type by default.
+		//  Mozilla downloads script file since .php is defined in mimeTypes.rdf as such.)
+		//
+		//if (context.getInput() instanceof IFile) {
+		//	IFile file = (IFile) context.getInput();
+		//	String localhostURL;
+		//	localhostURL = "file:///" + file.getLocation().toString();
+		//	setUrl(localhostURL);
+		//	return true;
+		//}
 		return false;
 	}
 }
\ No newline at end of file