The patch on Android is against a different webkit revision so who
knows what will happen when patching against the latest webkit.
My first thought is to try view->resize(width(), height()) instead of
using m_width and m_height but I don't know what that will change.
Have you looked at the stack trace when GtkLauncher hangs to find out
why those 2 lines are the culprit?
On Jun 30, 2009, at 10:34 AM, Seo K wrote:
Hi,
I want to flatten frames within a frameset so that no individual
scrollbars of frames would appear. This is the behavior of most
mobile browsers including iPhone and Android.
I found the patch from the Android WebKit source code with
FLATTEN_FRAMESET. I applied the patch to the latest version of
WebKit and adjusted it the latest changes, but it does not seem to
work.
WebCore/rendering/RenderFrame.cpp
+#if USE(FLATTEN_FRAMESET)
+void RenderFrame::layout()
+{
+ if (widget() && widget()->isFrameView()) {
+ FrameView* view = static_cast<FrameView*>(widget());
+ RenderView* root = NULL;
+ if (view->frame() && view->frame()->document() &&
+ view->frame()->document()->renderer() && view->frame()-
>document()->renderer()->isRenderView())
+ root = static_cast<RenderView*>(view->frame()-
>document()->renderer());
+ if (root) {
+ // Resize the widget so that the RenderView will layout
according to those dimensions.
+ view->resize(m_width, m_height);
+ view->layout();
+ // We can only grow in width and height because if
positionFrames gives us a width and we become smaller,
+ // then the fixup process of forcing the frame to fill
extra space will fail.
+ if (m_width > root->docWidth()) {
+ view->resize(root->docWidth(), 0);
+ view->layout();
+ }
+ // Honor the height set by
RenderFrameSet::positionFrames unless our document height is larger.
+ setHeight(max(root->docHeight(), height()));
+ setWidth(max(root->docWidth(), width()));
+ }
+ }
+ setNeedsLayout(false);
+}
+#endif
+
I tested it with http://java.sun.com/j2se/1.5.0/docs/api/ which has
three frames within a frameset.
GtkLauncher hangs when it loads the Java API page. However, after I
remove the following two lines from the patch, it seems to work and
frames are correctly flattened.
if (root) {
// Resize the widget so that the RenderView will layout
according to those dimensions.
- view->resize(m_width, m_height);
- view->layout();
// We can only grow in width and height because if
positionFrames gives us a width and we become smaller,
// then the fixup process of forcing the frame to fill
extra space will fail.
What's the problem here? I attached the whole patch.
Thanks,
K Seo
<FlattenFrameSet.diff>_______________________________________________
webkit-dev mailing list
webkit-dev@lists.webkit.org
http://lists.webkit.org/mailman/listinfo.cgi/webkit-dev
_______________________________________________
webkit-dev mailing list
webkit-dev@lists.webkit.org
http://lists.webkit.org/mailman/listinfo.cgi/webkit-dev