WebKit Bugzilla
New
Browse
Log In
×
Sign in with GitHub
or
Remember my login
Create Account
·
Forgot Password
Forgotten password account recovery
RESOLVED FIXED
108327
[Qt] visibility of embedded widget
https://bugs.webkit.org/show_bug.cgi?id=108327
Summary
[Qt] visibility of embedded widget
123powerd231
Reported
2013-01-30 04:46:02 PST
My app uses qtwebkit and embedded in webpage widget through my derived QWebPluginFactory. My web page uses some layers one of which is my widget. The problem: Widget is visible, but his parent layer isn’t visible(css property visibility:hidden) My toolset: Qt 5.0.0, mvs c++ compiler(visual studio 2008sp1+sdk), windows 7
Attachments
Add attachment
proposed patch, testcase, etc.
123powerd231
Comment 1
2013-01-30 23:30:24 PST
1) I noticed that the first calls Qt5WebKitWidgetsd.dll! QWidgetPluginImpl :: setVisible (bool visible = false) Line 52 Qt5WebKitd.dll! WebCore :: QtPluginWidget :: hide () Line 1439 Qt5WebKitd.dll! WebCore :: RenderWidget :: styleDidChange (WebCore :: StyleDifference diff = StyleDifferenceRepaint, const WebCore :: RenderStyle * oldStyle = 0x1881ea50) Line 226 Qt5WebKitd.dll! WebCore :: RenderObject :: setStyle (WTF :: PassRefPtr <WebCore::RenderStyle> style = {...}) Line 1801 Qt5WebKitd.dll! WebCore :: RenderObject :: setAnimatableStyle (WTF :: PassRefPtr <WebCore::RenderStyle> style = {...}) Line 1697 Qt5WebKitd.dll! WebCore :: Element :: recalcStyle (WebCore :: Node :: StyleChange change = Inherit) Line 1293 + 0x19 bytes C + + ... Qt5WebKitd.dll! WebCore :: Element :: recalcStyle (WebCore :: Node :: StyleChange change = NoChange) Line 1346 C + + ... Qt5WebKitd.dll! WebCore :: Document :: updateStyleIfNeeded () Line 1892 Qt5WebKitd.dll! WebCore :: Document :: styleRecalcTimerFired (WebCore :: Timer <WebCore::Document> * __ formal = 0x06b5f108) Line 1781 Qt5WebKitd.dll! WebCore :: Timer <WebCore::CSSFontSelector> :: fired () Line 106 + 0x1f bytes Qt5WebKitd.dll! WebCore :: ThreadTimers :: sharedTimerFiredInternal () Line 119 Qt5WebKitd.dll! WebCore :: ThreadTimers :: sharedTimerFired () Line 94 Qt5WebKitd.dll! WebCore :: SharedTimerQt :: timerEvent (QTimerEvent * ev = 0x0522c83c) Line 114 Qt5Cored.dll! QObject :: event (QEvent * e = 0x0522c83c) Line 1052 2) followed Qt5WebKitWidgetsd.dll! QWidgetPluginImpl :: setVisible (bool visible = true) Line 52 Qt5WebKitWidgetsd.dll! QWidgetPluginImpl :: setGeometryAndClip (const QRect & geometry = {...}, const QRect & clipRect = {...}, bool isVisible = true) Line 45 Qt5WebKitd.dll! WebCore :: QtPluginWidget :: frameRectsChanged () Line 1428 Qt5WebKitd.dll! WebCore :: Widget :: setFrameRect (const WebCore :: IntRect & rect = {...}) Line 71 Qt5WebKitd.dll! WebCore :: RenderWidget :: setWidgetGeometry (const WebCore :: LayoutRect & frame = {...}) Line 159 Qt5WebKitd.dll! WebCore :: RenderWidget :: updateWidgetGeometry () Line 179 Qt5WebKitd.dll! WebCore :: RenderWidget :: updateWidgetPosition () Line 334 + 0x8 bytes Qt5WebKitd.dll! WebCore :: RenderView :: updateWidgetPositions () Line 764 + 0x13 bytes Qt5WebKitd.dll! WebCore :: FrameView :: performPostLayoutTasks () Line 2499 Qt5WebKitd.dll! WebCore :: FrameView :: layout (bool allowSubtree = true) Line 1255 Qt5WebKitd.dll! WebCore :: FrameView :: layoutTimerFired (WebCore :: Timer <WebCore::FrameView> * __ formal = 0x0ad8cf58) Line 2137 Qt5WebKitd.dll! WebCore :: Timer <WebCore::CSSFontSelector> :: fired () Line 106 + 0x1f bytes Qt5WebKitd.dll! WebCore :: ThreadTimers :: sharedTimerFiredInternal () Line 119 Qt5WebKitd.dll! WebCore :: ThreadTimers :: sharedTimerFired () Line 94 Qt5WebKitd.dll! WebCore :: SharedTimerQt :: timerEvent (QTimerEvent * ev = 0x052169ec) Line 114 Qt5Cored.dll! QObject :: event (QEvent * e = 0x052169ec) Line 1052
123powerd231
Comment 2
2013-01-31 03:36:14 PST
The problem is that QtPluginWidget::hide not call Widget::hide() fix code: virtual void show() { Widget::show(); handleVisibility(); } virtual void hide() { Widget::hide(); handleVisibility(); } void handleVisibility() { if (platformWidget()) widgetAdapter()->setVisible(isVisible()); }
Simon Hausmann
Comment 3
2013-02-01 00:26:27 PST
You're right. However
http://trac.webkit.org/changeset/135515
added an implementation of hide() that will call setVisible(false) on the widget now :)
Pierre Rossi
Comment 4
2013-02-01 02:43:29 PST
Nice catch ! Should be fixed in
r141569
<
http://trac.webkit.org/changeset/141569
>
Note
You need to
log in
before you can comment on or make changes to this bug.
Top of Page
Format For Printing
XML
Clone This Bug