aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMatti Tahvonen <matti.tahvonen@itmill.com>2007-02-15 12:47:44 +0000
committerMatti Tahvonen <matti.tahvonen@itmill.com>2007-02-15 12:47:44 +0000
commit061b7d7dbe1c6bfba04a42f71acaf3ab03a6d8fb (patch)
tree65d3a078acd12f28e4dbfc19c3ed405b327f6bb7
parentc4e53cfbaa56365eb3b78b4adc6f1ca71e2ed398 (diff)
downloadvaadin-framework-061b7d7dbe1c6bfba04a42f71acaf3ab03a6d8fb.tar.gz
vaadin-framework-061b7d7dbe1c6bfba04a42f71acaf3ab03a6d8fb.zip
Modifications in detecting Ajax vs. Html mode. Should fix opening unwanted debug window in ajax mode.
svn changeset:725/svn branch:toolkit
-rw-r--r--src/com/itmill/toolkit/terminal/web/ApplicationServlet.java47
-rw-r--r--src/com/itmill/toolkit/terminal/web/WebBrowser.java35
2 files changed, 69 insertions, 13 deletions
diff --git a/src/com/itmill/toolkit/terminal/web/ApplicationServlet.java b/src/com/itmill/toolkit/terminal/web/ApplicationServlet.java
index df663d1203..7f2df6c45d 100644
--- a/src/com/itmill/toolkit/terminal/web/ApplicationServlet.java
+++ b/src/com/itmill/toolkit/terminal/web/ApplicationServlet.java
@@ -84,6 +84,8 @@ import com.itmill.toolkit.terminal.ThemeResource;
import com.itmill.toolkit.terminal.URIHandler;
import com.itmill.toolkit.terminal.Paintable.RepaintRequestEvent;
import com.itmill.toolkit.terminal.web.ThemeSource.ThemeException;
+import com.itmill.toolkit.terminal.Terminal;
+import com.itmill.toolkit.terminal.web.WebBrowser;
import com.itmill.toolkit.ui.Window;
/**
@@ -562,6 +564,28 @@ public class ApplicationServlet extends HttpServlet implements
// Check/handle client side feature checks
WebBrowserProbe
.handleProbeRequest(request, unhandledParameters);
+
+ // If rendering mode is not defined try to detect it
+ WebBrowser wb = WebBrowserProbe.getTerminalType(request.getSession());
+ if(wb.getRenderingMode() == WebBrowser.RENDERING_MODE_UNDEFINED) {
+ String themeName = application.getTheme();
+ if (unhandledParameters.get("theme") != null) {
+ themeName = (String) ((Object[]) unhandledParameters
+ .get("theme"))[0];
+ }
+ Theme theme = themeSource.getThemeByName(themeName);
+
+ String renderingMode = theme.getPreferredMode(wb,
+ themeSource);
+ if (unhandledParameters.get("renderingMode") != null)
+ renderingMode = (String) ((Object[]) unhandledParameters
+ .get("renderingMode"))[0];
+ if (Theme.MODE_AJAX.equals(renderingMode)) {
+ wb.setRenderingMode(WebBrowser.RENDERING_MODE_AJAX);
+ } else {
+ wb.setRenderingMode(WebBrowser.RENDERING_MODE_HTML);
+ }
+ }
// Handle the URI if the application is still running
if (application.isRunning())
@@ -629,9 +653,7 @@ public class ApplicationServlet extends HttpServlet implements
// Set terminal type for the window, if not already set
if (terminalType == null) {
- terminalType = WebBrowserProbe.getTerminalType(request
- .getSession());
- window.setTerminal(terminalType);
+ window.setTerminal(terminalType = wb);
}
// Find theme
@@ -647,18 +669,14 @@ public class ApplicationServlet extends HttpServlet implements
throw new ServletException("Theme (named '"
+ themeName + "') can not be found");
- // If ajax rendering mode is preferred, a page for it is
- // rendered
- String renderingMode = theme.getPreferredMode(terminalType,
- themeSource);
- if (unhandledParameters.get("renderingMode") != null)
- renderingMode = (String) ((Object[]) unhandledParameters
- .get("renderingMode"))[0];
- if (Theme.MODE_AJAX.equals(renderingMode)
- && !(window instanceof DebugWindow)) {
+ // If in ajax rendering mode, print an html page for it
+ if(terminalType.getRenderingMode() == WebBrowser.RENDERING_MODE_AJAX) {
writeAjaxPage(request, response, out, unhandledParameters, window, terminalType, theme);
return;
}
+
+ String renderingMode = theme.getPreferredMode(terminalType,
+ themeSource);
// If other than html or ajax mode is requested
if (!Theme.MODE_HTML.equals(renderingMode)
@@ -1494,7 +1512,9 @@ public class ApplicationServlet extends HttpServlet implements
// Create and open new debug window for application if requested
Window debugWindow = application.getWindow(DebugWindow.WINDOW_NAME);
if (debugWindow == null) {
- if (isDebugMode(params) && !request.getPathInfo().startsWith(AJAX_UIDL_URI))
+ if (isDebugMode(params) &&
+ WebBrowserProbe.getTerminalType(request.getSession()).getRenderingMode()
+ != WebBrowser.RENDERING_MODE_AJAX ) {
try {
debugWindow = new DebugWindow(application, request
.getSession(false), this);
@@ -1505,6 +1525,7 @@ public class ApplicationServlet extends HttpServlet implements
throw new ServletException(
"Failed to create debug window for application", e);
}
+ }
} else if (window != debugWindow) {
if (isDebugMode(params))
debugWindow.requestRepaint();
diff --git a/src/com/itmill/toolkit/terminal/web/WebBrowser.java b/src/com/itmill/toolkit/terminal/web/WebBrowser.java
index 924049da40..5f1d5c330c 100644
--- a/src/com/itmill/toolkit/terminal/web/WebBrowser.java
+++ b/src/com/itmill/toolkit/terminal/web/WebBrowser.java
@@ -80,6 +80,8 @@ public class WebBrowser implements Terminal {
/** Pixel height of the terminal screen */
private int screenHeight = -1;
+
+ private RenderingMode renderingMode = RENDERING_MODE_UNDEFINED;
/** Constuctor with some autorecognition capabilities
* Retrieves all capability information reported in http request headers:
@@ -575,4 +577,37 @@ public class WebBrowser implements Terminal {
JSCRIPT_5_6,
JSCRIPT_5_7,
ECMA_262 };
+
+ /*
+ * Consts defining the rendering mode
+ * @author IT Mill Ltd.
+ * @version @VERSION@
+ * @since 4.0
+ */
+ public class RenderingMode {
+ RenderingMode() {
+
+ }
+ }
+ public static final RenderingMode RENDERING_MODE_UNDEFINED = DEFAULT.new RenderingMode();
+ public static final RenderingMode RENDERING_MODE_HTML = DEFAULT.new RenderingMode();
+ public static final RenderingMode RENDERING_MODE_AJAX = DEFAULT.new RenderingMode();
+
+ /**
+ * Gets current rendering mode
+ * @return current rendering mode
+ */
+ public RenderingMode getRenderingMode() {
+ return renderingMode;
+ }
+
+ /**
+ * Sets current rendering mode
+ * @param renderingMode
+ */
+ public void setRenderingMode(RenderingMode renderingMode) {
+ this.renderingMode = renderingMode;
+ }
+
+
}