diff options
author | Mary Wu <mawu@blackberry.com> | 2013-10-28 10:38:44 +0800 |
---|---|---|
committer | The Qt Project <gerrit-noreply@qt-project.org> | 2013-10-29 16:26:57 +0100 |
commit | eabac4c9ca887b86bcebbfd2d2afd77ed8cc1a6a (patch) | |
tree | 5afd1a97d17a39d12bfd5767ff357c6fb981b371 | |
parent | c3015f1f9502e3aa18385d09d426d74a6a39d906 (diff) |
Implement popup dialog
This is used to show like date time picker whose document
content was generated in webkit engine.
Change-Id: I900a6ae5f61646d2ef8497dccc114f7cb5882349
Reviewed-by: Michael Bruning <michael.bruning@digia.com>
Reviewed-by: Pierre Rossi <pierre.rossi@gmail.com>
-rw-r--r-- | lib/quick/render_widget_host_view_qt_delegate_quick.h | 9 | ||||
-rw-r--r-- | lib/render_widget_host_view_qt.cpp | 4 | ||||
-rw-r--r-- | lib/render_widget_host_view_qt_delegate.h | 1 | ||||
-rw-r--r-- | lib/web_contents_view_qt.cpp | 13 | ||||
-rw-r--r-- | lib/web_contents_view_qt.h | 2 | ||||
-rw-r--r-- | lib/widgets/render_widget_host_view_qt_delegate_widget.cpp | 8 | ||||
-rw-r--r-- | lib/widgets/render_widget_host_view_qt_delegate_widget.h | 1 |
7 files changed, 33 insertions, 5 deletions
diff --git a/lib/quick/render_widget_host_view_qt_delegate_quick.h b/lib/quick/render_widget_host_view_qt_delegate_quick.h index f60395802..c9f688958 100644 --- a/lib/quick/render_widget_host_view_qt_delegate_quick.h +++ b/lib/quick/render_widget_host_view_qt_delegate_quick.h @@ -69,6 +69,15 @@ public: this->setParentItem(viewPrivate->q_func()); } + virtual void initAsPopup(const QRect& rect) + { + this->setX(rect.x()); + this->setY(rect.y()); + this->setWidth(rect.width()); + this->setHeight(rect.height()); + this->setVisible(true); + } + virtual QRectF screenRect() const { QPointF pos = this->mapToScene(QPointF(0,0)); diff --git a/lib/render_widget_host_view_qt.cpp b/lib/render_widget_host_view_qt.cpp index 5cf7ed232..8c5ba0502 100644 --- a/lib/render_widget_host_view_qt.cpp +++ b/lib/render_widget_host_view_qt.cpp @@ -43,6 +43,7 @@ #include "backing_store_qt.h" #include "render_widget_host_view_qt_delegate.h" +#include "type_conversion.h" #include "web_event_factory.h" #include "shared/shared_globals.h" @@ -238,8 +239,9 @@ void RenderWidgetHostViewQt::InitAsChild(gfx::NativeView) m_delegate->initAsChild(m_adapterClient); } -void RenderWidgetHostViewQt::InitAsPopup(content::RenderWidgetHostView*, const gfx::Rect&) +void RenderWidgetHostViewQt::InitAsPopup(content::RenderWidgetHostView*, const gfx::Rect& rect) { + m_delegate->initAsPopup(toQt(rect)); } void RenderWidgetHostViewQt::InitAsFullscreen(content::RenderWidgetHostView*) diff --git a/lib/render_widget_host_view_qt_delegate.h b/lib/render_widget_host_view_qt_delegate.h index e80d6fbb5..36a6ceb9d 100644 --- a/lib/render_widget_host_view_qt_delegate.h +++ b/lib/render_widget_host_view_qt_delegate.h @@ -77,6 +77,7 @@ class QWEBENGINE_EXPORT RenderWidgetHostViewQtDelegate { public: virtual ~RenderWidgetHostViewQtDelegate(); virtual void initAsChild(WebContentsAdapterClient*) = 0; + virtual void initAsPopup(const QRect&) = 0; virtual QRectF screenRect() const = 0; virtual void setKeyboardFocus() = 0; virtual bool hasKeyboardFocus() = 0; diff --git a/lib/web_contents_view_qt.cpp b/lib/web_contents_view_qt.cpp index 35445ccff..abf311a83 100644 --- a/lib/web_contents_view_qt.cpp +++ b/lib/web_contents_view_qt.cpp @@ -61,6 +61,16 @@ void WebContentsViewQt::initialize(WebContentsAdapterClient* client) content::RenderWidgetHostView* WebContentsViewQt::CreateViewForWidget(content::RenderWidgetHost* render_widget_host) { + content::RenderWidgetHostView* view = CreateViewForPopupWidget(render_widget_host); + + // Tell the RWHV delegate to attach itself to the native view container. + view->InitAsChild(0); + + return view; +} + +content::RenderWidgetHostView* WebContentsViewQt::CreateViewForPopupWidget(content::RenderWidgetHost* render_widget_host) +{ RenderWidgetHostViewQt *view = new RenderWidgetHostViewQt(render_widget_host); WebContentsAdapterClient::CompositingMode compositingMode = WebContentsAdapterClient::NoCompositing; @@ -75,9 +85,6 @@ content::RenderWidgetHostView* WebContentsViewQt::CreateViewForWidget(content::R if (m_client) view->setAdapterClient(m_client); - // Tell the RWHV delegate to attach itself to the native view container. - view->InitAsChild(0); - return view; } diff --git a/lib/web_contents_view_qt.h b/lib/web_contents_view_qt.h index bd4f00a7e..8a5cc07cf 100644 --- a/lib/web_contents_view_qt.h +++ b/lib/web_contents_view_qt.h @@ -73,7 +73,7 @@ public: virtual void CreateView(const gfx::Size& initial_size, gfx::NativeView context); - virtual content::RenderWidgetHostView* CreateViewForPopupWidget(content::RenderWidgetHost* render_widget_host) { return 0; } + virtual content::RenderWidgetHostView* CreateViewForPopupWidget(content::RenderWidgetHost* render_widget_host); virtual void SetPageTitle(const string16& title); diff --git a/lib/widgets/render_widget_host_view_qt_delegate_widget.cpp b/lib/widgets/render_widget_host_view_qt_delegate_widget.cpp index d8abd18ff..1eb52378c 100644 --- a/lib/widgets/render_widget_host_view_qt_delegate_widget.cpp +++ b/lib/widgets/render_widget_host_view_qt_delegate_widget.cpp @@ -83,6 +83,14 @@ void RenderWidgetHostViewQtDelegateWidget::initAsChild(WebContentsAdapterClient* pagePrivate->view->layout()->addWidget(this); } +void RenderWidgetHostViewQtDelegateWidget::initAsPopup(const QRect& rect) +{ + QPoint pos = QWidget::mapToGlobal(rect.topLeft()); + QRect qrect = QRect(pos, rect.size()); + setGeometry(qrect); + show(); +} + QRectF RenderWidgetHostViewQtDelegateWidget::screenRect() const { return QRectF(x(), y(), width(), height()); diff --git a/lib/widgets/render_widget_host_view_qt_delegate_widget.h b/lib/widgets/render_widget_host_view_qt_delegate_widget.h index 29e697d1b..b8a1ba115 100644 --- a/lib/widgets/render_widget_host_view_qt_delegate_widget.h +++ b/lib/widgets/render_widget_host_view_qt_delegate_widget.h @@ -59,6 +59,7 @@ public: RenderWidgetHostViewQtDelegateWidget(WebContentsAdapterClient::CompositingMode mode, QWidget *parent = 0); virtual void initAsChild(WebContentsAdapterClient* container); + virtual void initAsPopup(const QRect&); virtual QRectF screenRect() const; virtual void setKeyboardFocus(); virtual bool hasKeyboardFocus(); |