From: Matti Tahvonen Date: Thu, 15 Feb 2007 12:47:44 +0000 (+0000) Subject: Modifications in detecting Ajax vs. Html mode. Should fix opening unwanted debug... X-Git-Tag: 6.7.0.beta1~6572 X-Git-Url: https://source.dussan.org/?a=commitdiff_plain;h=061b7d7dbe1c6bfba04a42f71acaf3ab03a6d8fb;p=vaadin-framework.git Modifications in detecting Ajax vs. Html mode. Should fix opening unwanted debug window in ajax mode. svn changeset:725/svn branch:toolkit --- 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; + } + + }