summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMary Wu <mawu@blackberry.com>2013-10-28 10:38:44 +0800
committerThe Qt Project <gerrit-noreply@qt-project.org>2013-10-29 16:26:57 +0100
commiteabac4c9ca887b86bcebbfd2d2afd77ed8cc1a6a (patch)
tree5afd1a97d17a39d12bfd5767ff357c6fb981b371
parentc3015f1f9502e3aa18385d09d426d74a6a39d906 (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.h9
-rw-r--r--lib/render_widget_host_view_qt.cpp4
-rw-r--r--lib/render_widget_host_view_qt_delegate.h1
-rw-r--r--lib/web_contents_view_qt.cpp13
-rw-r--r--lib/web_contents_view_qt.h2
-rw-r--r--lib/widgets/render_widget_host_view_qt_delegate_widget.cpp8
-rw-r--r--lib/widgets/render_widget_host_view_qt_delegate_widget.h1
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();