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 8edbbc5..bb4c837 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,14 +10,18 @@
  *******************************************************************************/
 package net.sourceforge.phpeclipse.webbrowser.views;
 
+import java.io.UnsupportedEncodingException;
+import java.net.URLDecoder;
+
 import net.sourceforge.phpeclipse.webbrowser.internal.WebBrowser;
 import net.sourceforge.phpeclipse.webbrowser.internal.WebBrowserUtil;
 
-import org.eclipse.core.resources.IFile;
-import org.eclipse.jface.viewers.IStructuredSelection;
+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;
@@ -27,7 +31,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 {
@@ -39,13 +43,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;
@@ -54,7 +67,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,10 +87,18 @@ public class BrowserView extends ViewPart implements IShowInTarget {
 		super.dispose();
 	}
 
+	public String getUrl() {
+		if (fInstance != null) {
+			return fInstance.getURL();
+		} else {
+			return null;
+		}
+	}
+
 	public void setUrl(final String url) {
 		if (fInstance != null) {
-			fUrl = url;
-			fInstance.setURL(url);
+				fUrl = url;
+				fInstance.setURL(url);
 			// try {
 			// ResourcesPlugin.getWorkspace().run(new IWorkspaceRunnable() {
 			// public void run(IProgressMonitor monitor) throws CoreException {
@@ -85,7 +106,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();
 			// }
 		}
@@ -101,18 +122,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);
+					}
+				}
 			}
 		}
 	}
@@ -136,17 +170,27 @@ public class BrowserView extends ViewPart implements IShowInTarget {
 	}
 
 	public boolean show(ShowInContext context) {
-		if (context.getSelection() instanceof IStructuredSelection) {
-			IStructuredSelection ss = (IStructuredSelection) context.getSelection();
-			if (ss.getFirstElement() instanceof IFile) {
-				IFile file = (IFile) ss.getFirstElement();
-				String localhostURL;
-				localhostURL = file.getLocation().toString();
+		if (context instanceof ShowInContextBrowser) {
+			ShowInContextBrowser contextBrowser = (ShowInContextBrowser) context;
+			String localhostURL = contextBrowser.getLocalhostUrl();
+			if (localhostURL != null) {
 				setUrl(localhostURL);
-//				bringToTop(this);
 				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