]> source.dussan.org Git - vaadin-framework.git/commitdiff
Modifications in detecting Ajax vs. Html mode. Should fix opening unwanted debug...
authorMatti Tahvonen <matti.tahvonen@itmill.com>
Thu, 15 Feb 2007 12:47:44 +0000 (12:47 +0000)
committerMatti Tahvonen <matti.tahvonen@itmill.com>
Thu, 15 Feb 2007 12:47:44 +0000 (12:47 +0000)
svn changeset:725/svn branch:toolkit

src/com/itmill/toolkit/terminal/web/ApplicationServlet.java
src/com/itmill/toolkit/terminal/web/WebBrowser.java

index df663d12031733227ffdfaace223b2d5aed955ee..7f2df6c45d6465b3b269c1a4593efd065dabc99f 100644 (file)
@@ -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();
index 924049da407ca6d32046a2b7156b64fdfb314e1d..5f1d5c330cd4887702cd05917392e0c0a0cb908c 100644 (file)
@@ -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;
+       }
+       
+
 }