| /* |
| * Copyright 2008 Google Inc. |
| * |
| * Licensed under the Apache License, Version 2.0 (the "License"); you may not |
| * use this file except in compliance with the License. You may obtain a copy of |
| * the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, software |
| * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT |
| * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the |
| * License for the specific language governing permissions and limitations under |
| * the License. |
| */ |
| package com.google.gwt.user.client.impl; |
| |
| |
| /** |
| * Native implementation associated with |
| * {@link com.google.gwt.user.client.Window}. |
| */ |
| public class WindowImpl { |
| |
| public native String getHash() /*-{ |
| return $wnd.location.hash; |
| }-*/; |
| |
| public native String getQueryString() /*-{ |
| return $wnd.location.search; |
| }-*/; |
| |
| public native void initWindowCloseHandler() /*-{ |
| var oldOnBeforeUnload = $wnd.onbeforeunload; |
| var oldOnUnload = $wnd.onunload; |
| |
| // Old mozilla doesn't like $entry's explicit return statement and |
| // will always pop up a confirmation dialog. This is worked around by |
| // just wrapping the call to onClosing(), which still has the semantics |
| // that we want. |
| $wnd.onbeforeunload = function(evt) { |
| var ret, oldRet; |
| try { |
| ret = $entry(@com.google.gwt.user.client.Window::onClosing())(); |
| } finally { |
| oldRet = oldOnBeforeUnload && oldOnBeforeUnload(evt); |
| } |
| // Avoid returning null as IE6 will coerce it into a string. |
| // Ensure that "" gets returned properly. |
| if (ret != null) { |
| return ret; |
| } |
| if (oldRet != null) { |
| return oldRet; |
| } |
| // returns undefined. |
| }; |
| |
| $wnd.onunload = $entry(function(evt) { |
| try { |
| @com.google.gwt.user.client.Window::onClosed()(); |
| } finally { |
| oldOnUnload && oldOnUnload(evt); |
| $wnd.onresize = null; |
| $wnd.onscroll = null; |
| $wnd.onbeforeunload = null; |
| $wnd.onunload = null; |
| } |
| }); |
| }-*/; |
| |
| public native void initWindowResizeHandler() /*-{ |
| var oldOnResize = $wnd.onresize; |
| $wnd.onresize = $entry(function(evt) { |
| try { |
| @com.google.gwt.user.client.Window::onResize()(); |
| } finally { |
| oldOnResize && oldOnResize(evt); |
| } |
| }); |
| }-*/; |
| |
| public native void initWindowScrollHandler() /*-{ |
| var oldOnScroll = $wnd.onscroll; |
| $wnd.onscroll = $entry(function(evt) { |
| try { |
| @com.google.gwt.user.client.Window::onScroll()(); |
| } finally { |
| oldOnScroll && oldOnScroll(evt); |
| } |
| }); |
| }-*/; |
| } |