Finally I understood what is happening behind this.
QComboBoxPrivateContainer  is derived from QFrame with 
Qt::Popup<http://qt-project.org/doc/qt-4.8/qt.html#WindowType-enum> as a window 
flag. So it will be shown as a separate window.

(Refer QComboBox.cpp for more info)

QComboBoxPrivateContainer::QComboBoxPrivateContainer(QAbstractItemView 
*itemView, QComboBox *parent)
    : QFrame(parent, Qt::Popup), combo(parent), view(0), top(0), bottom(0)
{
...

(QtWebComboBox derived from QComboxBox, QComboBox contains 
QComboBoxPrivateContainer  )


From: Rajkumar, Arunprasad
Sent: Wednesday, March 27, 2013 4:58 PM
To: 'webkit-qt@lists.webkit.org'
Subject: RE: QtWebKit creates new Window to show Popup Menu

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@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 
postmas...@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
_______________________________________________
webkit-qt mailing list
webkit-qt@lists.webkit.org
https://lists.webkit.org/mailman/listinfo/webkit-qt

Reply via email to