Source/WebKit/UIProcess/API/gtk/PageClientImpl.cpp

@@RefPtr<WebColorPicker> PageClientImpl::createColorPicker(WebPageProxy* page, con
277277#if ENABLE(DATE_AND_TIME_INPUT_TYPES)
278278RefPtr<WebDateTimePicker> PageClientImpl::createDateTimePicker(WebPageProxy& page)
279279{
280  return WebDateTimePickerGtk::create(page);
 280 return WebDateTimePickerGtk::create(page, m_viewWidget);
281281}
282282#endif
283283

Source/WebKit/UIProcess/gtk/WebDateTimePickerGtk.cpp

3434
3535namespace WebKit {
3636
37 Ref<WebDateTimePickerGtk> WebDateTimePickerGtk::create(WebPageProxy& page)
 37Ref<WebDateTimePickerGtk> WebDateTimePickerGtk::create(WebPageProxy& page, GtkWidget* webView)
3838{
39  return adoptRef(*new WebDateTimePickerGtk(page));
 39 return adoptRef(*new WebDateTimePickerGtk(page, webView));
4040}
4141
4242WebDateTimePickerGtk::~WebDateTimePickerGtk()

@@WebDateTimePickerGtk::~WebDateTimePickerGtk()
4444 endPicker();
4545}
4646
47 WebDateTimePickerGtk::WebDateTimePickerGtk(WebPageProxy& page)
 47WebDateTimePickerGtk::WebDateTimePickerGtk(WebPageProxy& page, GtkWidget* webView)
4848 : WebDateTimePicker(page)
 49 , m_webView(webView)
4950{
5051}
5152
5253void WebDateTimePickerGtk::endPicker()
5354{
 55 if (!m_calendarPopover)
 56 return;
 57
 58 // gtk_popover_popdown(GTK_POPOVER(m_calendarPopover));
 59 // gtk_widget_destroy(m_calendarPopover);
 60 // m_calendarPopover = nullptr;
 61
 62 WebDateTimePicker::endPicker();
5463}
5564
5665void WebDateTimePickerGtk::showDateTimePicker(WebCore::DateTimeChooserParameters&& params)
5766{
 67 m_calendarPopover = gtk_popover_new(m_webView);
 68
 69 GtkWidget* buttonBox = gtk_button_box_new(GTK_ORIENTATION_HORIZONTAL);
 70 gtk_container_add(GTK_CONTAINER(m_calendarPopover), buttonBox);
 71
 72 GtkWidget* calendar = gtk_calendar_new();
 73 gtk_container_add(GTK_CONTAINER(buttonBox), calendar);
 74
 75 auto& rect = params.anchorRectInRootView;
 76 GdkRectangle rectInRootView = { rect.x(), rect.y(), rect.width(), rect.height() };
 77 gtk_popover_set_pointing_to(GTK_POPOVER(m_calendarPopover), &rectInRootView);
 78
 79 gtk_popover_popup(GTK_POPOVER(m_calendarPopover));
 80 gtk_widget_show_all(m_calendarPopover);
5881}
5982
6083} // namespace WebKit
6184
62 #endif // ENABLE(DATE_AND_TIME_INPUT_TYPES)
 85#endif // ENABLE(DATE_AND_TIME_INPUT_TYPES) && USE(APPKIT)

Source/WebKit/UIProcess/gtk/WebDateTimePickerGtk.h

@@namespace WebKit {
3535
3636class WebDateTimePickerGtk final : public WebDateTimePicker {
3737public:
38  static Ref<WebDateTimePickerGtk> create(WebPageProxy&);
 38 static Ref<WebDateTimePickerGtk> create(WebPageProxy&, GtkWidget*);
3939 ~WebDateTimePickerGtk();
4040
4141private:
42  WebDateTimePickerGtk(WebPageProxy&);
 42 WebDateTimePickerGtk(WebPageProxy&, GtkWidget*);
4343
4444 void endPicker() final;
4545 void showDateTimePicker(WebCore::DateTimeChooserParameters&&) final;
 46
 47 WebCore::DateTimeChooserParameters m_params;
 48
 49 GtkWidget* m_webView;
 50 GtkWidget* m_calendarPopover = nullptr;
4651};
4752
4853} // namespace WebKit