RESOLVED FIXED 33887
[Qt] QGraphicsWebView shows combo box popups in the wrong position
https://bugs.webkit.org/show_bug.cgi?id=33887
Summary [Qt] QGraphicsWebView shows combo box popups in the wrong position
Girish Ramakrishnan
Reported 2010-01-20 01:39:19 PST
The popup position is incorrect and works only when the QGraphicsWebView's coordinates matches exactly with the QGraphicsView coordinates. In addition, more complex cases like transformation of the QGraphicsWebView does not work. Tested with Qt 4.6.1.
Attachments
Patch against 4.6.1 (3.65 KB, patch)
2010-01-20 03:51 PST, Girish Ramakrishnan
no flags
Patch against 4.6.1 (clean up PopupMenu::~PopupMenu) (3.62 KB, patch)
2010-01-20 03:57 PST, Girish Ramakrishnan
no flags
Make the proxy widget a child of the QGraphicsWebView (1.32 KB, patch)
2010-01-22 04:21 PST, Girish Ramakrishnan
no flags
Patch against webkit-trubk (4.44 KB, patch)
2010-01-23 06:31 PST, Girish Ramakrishnan
no flags
Girish Ramakrishnan
Comment 1 2010-01-20 01:41:15 PST
Test case: #include <QtGui> #include <QtWebKit> int main(int argc, char **argv) { QApplication app(argc, argv); QGraphicsScene *scene = new QGraphicsScene; QGraphicsWebView *webView = new QGraphicsWebView; webView->load(QUrl("http://www.tizag.com/htmlT/htmlselect.php")); scene->addItem(webView); QGraphicsView *view = new QGraphicsView; view->setScene(scene); view->show(); return app.exec(); }
Girish Ramakrishnan
Comment 2 2010-01-20 03:51:17 PST
Created attachment 47006 [details] Patch against 4.6.1
Girish Ramakrishnan
Comment 3 2010-01-20 03:57:20 PST
Created attachment 47007 [details] Patch against 4.6.1 (clean up PopupMenu::~PopupMenu) Clean up as suggested by Simon.
Girish Ramakrishnan
Comment 4 2010-01-20 04:56:06 PST
Luiz Agostini is working on the same part of the code and my commit will probably break his ongoing work. So, I am waiting for him to finish his patch series, before I commit this one. The patch attached will not apply against webkit-trunk, it's 4.6.x only.
Simon Hausmann
Comment 5 2010-01-21 05:46:24 PST
(In reply to comment #3) > Created an attachment (id=47007) [details] > Patch against 4.6.1 (clean up PopupMenu::~PopupMenu) > > Clean up as suggested by Simon. Cherry-picked into qtwebkit-4.6 as commit 8f5ca3ba5da63a47d4f90bbd867d3e8453443dd3
Girish Ramakrishnan
Comment 6 2010-01-22 04:21:09 PST
Created attachment 47188 [details] Make the proxy widget a child of the QGraphicsWebView
Girish Ramakrishnan
Comment 7 2010-01-23 06:31:52 PST
Created attachment 47271 [details] Patch against webkit-trubk Note on the destructor part: In the case of QGraphicsWebView, the proxy is gets already deleted by the time it hits the QtFallbackPopup destructor. I am unable to create a debug build of Qt (it say out of memory!). But with qDebug() I have verified that there is no leak and m_proxy indeed gets deleted (I made it a QPointer and it printed out as 0 in the QtFallbackPopup destructor). We probably need the above check for the patches against 4.6.1 too. (But from what I saw QtFallbackPopup destructor was _never_ called in the 4.6.x WebKit).
Kenneth Rohde Christiansen
Comment 8 2010-01-23 08:11:34 PST
Comment on attachment 47271 [details] Patch against webkit-trubk LGTM
WebKit Commit Bot
Comment 9 2010-01-23 08:37:49 PST
Comment on attachment 47271 [details] Patch against webkit-trubk Clearing flags on attachment: 47271 Committed r53769: <http://trac.webkit.org/changeset/53769>
WebKit Commit Bot
Comment 10 2010-01-23 08:37:55 PST
All reviewed patches have been landed. Closing bug.
Simon Hausmann
Comment 11 2010-01-25 05:51:54 PST
(In reply to comment #6) > Created an attachment (id=47188) [details] > Make the proxy widget a child of the QGraphicsWebView Cherry-picked into qtwebkit-4.6 with commit f2e94404e9b723442aa2d4eae5399014d763fb6d
Stefano D'Angelo
Comment 12 2011-10-21 09:04:16 PDT
This still happens to me from time to time with Qt 4.7.4 on ArchLinux 64 bit. Offending page: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>FreeADSP</title> <link rel="icon" href="icon.png" type="image/png" /> <link rel="stylesheet" type="text/css" href="main.css" /> <script type="text/javascript"> function adjustPluginHeight() { var plugin = document.getElementById('plugin'); var statusbar = document.getElementById('statusbar'); plugin.style.marginBottom = (statusbar.offsetHeight + 2) + 'px'; } </script> </head> <body onload="adjustPluginHeight();"> <div id="toolbar"> <table> <tr> <td><button><div class="nowrap">Load plugin</div></button></td> <td><button>Mute</button></td> <td><button>Bypass</button></td> <td><div class="nowrap">Bank: <select><option>1</option><option>2</option><option>3</option><option>4</option><option>5</option></select></div></td> <td><div class="nowrap">Program: <select><option>1</option><option>2</option><option>3</option></select></div></td> </tr> </table> </div> <div id="plugin"> No plugin loaded </div> <div id="statusbar"> status </div> </body> </html> (It happens also with no style sheet, just click several times on one of the two selects and from time to time the misplacement happens).
Note You need to log in before you can comment on or make changes to this bug.