Browse Source

Modifications in detecting Ajax vs. Html mode. Should fix opening unwanted debug window in ajax mode.

svn changeset:725/svn branch:toolkit
tags/6.7.0.beta1
Matti Tahvonen 17 years ago
parent
commit
061b7d7dbe

+ 34
- 13
src/com/itmill/toolkit/terminal/web/ApplicationServlet.java View 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();

+ 35
- 0
src/com/itmill/toolkit/terminal/web/WebBrowser.java View 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;
}

}

Loading…
Cancel
Save