[webkit-qt] QtWebKit creates new Window to show Popup Menu

Rajkumar, Arunprasad ArunprasadR at nds.com
Wed Mar 27 04:28:17 PDT 2013


Hello All,

I have seen that QtFallbackWebPopup.cpp's show() method sets the popup menu's parent as QWebView as like below. Whether by design QComboBox needs a different window to show it? (Sorry for not analyzing the code properly)

void QtFallbackWebPopup::show(const QWebSelectData& data)
{
    ...
    m_combo = new QtWebComboBox(); //derived from QComboBox
    ...
    if (QGraphicsWebView *webView = qobject_cast<QGraphicsWebView*>(pageClient()->pluginParent())) {
        QGraphicsProxyWidget* proxy = new QGraphicsProxyWidget(webView);
        proxy->setWidget(m_combo);
        proxy->setGeometry(rect);
    } else {
        m_combo->setParent(pageClient()->ownerWidget());
        m_combo->setGeometry(QRect(rect.left(), rect.top(),
                               rect.width(), m_combo->sizeHint().height()));
    }
   ...
}

Regards,
Arun
From: Rajkumar, Arunprasad
Sent: Wednesday, March 27, 2013 3:57 PM
To: 'webkit-qt at lists.webkit.org'
Subject: QtWebKit creates new Window to show Popup Menu

Hello All,

I'm facing an issue while invoking Popup Menu in QtWebKit. While clicking on the Popup Menu Qt tries to create one more window to show it.

AFAIK  while creating any QWidget if parent is not specified Qt will create a new window to show the widget. The same scenario is happening while trying to populate the dropdown. WebKit is requesting the port(Qt) to create a popup menu via ChromeClientQt::createSelectPopup, there the call delegated to QtPlatformPlugin without passing any parent widget.

Is this is the expected behavior or it is a bug ?.

Qt5 WebKit Popup Menu Creation Code flow

#0  0x00007fb2038fc1f0 in QPlatformWindow::QPlatformWindow(QWindow*) ()
   from /opt/lib/qt5/lib/libQt5Gui.so.5
#1  0x00007fb1fba1f469 in ?? () from /opt/lib/qt5/plugins/platforms/libqxcb.so
#2  0x00007fb1fba14eb9 in ?? () from /opt/lib/qt5/plugins/platforms/libqxcb.so
#3  0x00007fb20390bb53 in QWindow::create() ()
   from /opt/lib/qt5/lib/libQt5Gui.so.5
#4  0x00007fb2042a71c7 in QWidgetPrivate::create_sys(unsigned long long, bool, bool) () from /opt/lib/qt5/lib/libQt5Widgets.so.5
#5  0x00007fb20428b225 in QWidget::create(unsigned long long, bool, bool) ()
   from /opt/lib/qt5/lib/libQt5Widgets.so.5
#6  0x00007fb20428dc0a in QWidget::setVisible(bool) ()
   from /opt/lib/qt5/lib/libQt5Widgets.so.5
#7  0x00007fb20436b1d6 in QComboBox::showPopup() ()
   from /opt/lib/qt5/lib/libQt5Widgets.so.5
#8  0x00007fb2043680e6 in QComboBox::mousePressEvent(QMouseEvent*) ()
   from /opt/lib/qt5/lib/libQt5Widgets.so.5
#9  0x00007fb204289dff in QWidget::event(QEvent*) ()
   from /opt/lib/qt5/lib/libQt5Widgets.so.5
#10 0x00007fb2043669a9 in QComboBox::event(QEvent*) ()
   from /opt/lib/qt5/lib/libQt5Widgets.so.5
#11 0x00007fb204253204 in QApplicationPrivate::notify_helper(QObject*, QEvent*)
    () from /opt/lib/qt5/lib/libQt5Widgets.so.5
#12 0x00007fb2042561f8 in QApplication::notify(QObject*, QEvent*) ()
   from /opt/lib/qt5/lib/libQt5Widgets.so.5
#13 0x00007fb203440014 in QCoreApplication::notifyInternal(QObject*, QEvent*)
    () from /opt/lib/qt5/lib/libQt5Core.so.5
#14 0x00007fb206c06c64 in WebCore::QtWebComboBox::showPopupAtCursorPosition()
    ()
   from /opt/works/webkit-dev/webkit/WebKitBuild/Release/lib/libQt5WebKitWidgets.so.5
#15 0x00007fb206c06b11 in WebCore::QtFallbackWebPopup::show(QWebSelectData const&) ()
   from /opt/works/webkit-dev/webkit/WebKitBuild/Release/lib/libQt5WebKitWidgets.so.5
#16 0x00007fb206ba1c4f in WebCore::PopupMenuQt::show(WebCore::IntRect const&, WebCore::FrameView*, int) ()
   from /opt/works/webkit-dev/webkit/WebKitBuild/Release/lib/libWebKit1.so.1
#17 0x00007fb205e6c79b in WebCore::RenderMenuList::showPopup() ()
   from /opt/works/webkit-dev/webkit/WebKitBuild/Release/lib/libWebCore.so.1
#18 0x00007fb205a001d0 in WebCore::HTMLSelectElement::menuListDefaultEventHandler(WebCore::Event*) ()
   from /opt/works/webkit-dev/webkit/WebKitBuild/Release/lib/libWebCore.so.1
#19 0x00007fb205a012df in WebCore::HTMLSelectElement::defaultEventHandler(WebCore::Event*) ()


Kind Regards,
Arun


________________________________

This message is confidential and intended only for the addressee. If you have received this message in error, please immediately notify the postmaster at nds.com and delete it from your system as well as any copies. The content of e-mails as well as traffic data may be monitored by NDS for employment and security purposes.
To protect the environment please do not print this e-mail unless necessary.

An NDS Group Limited company. www.nds.com
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.webkit.org/pipermail/webkit-qt/attachments/20130327/8b54177f/attachment-0001.html>


More information about the webkit-qt mailing list