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

Reply via email to