Changeset 262415 in webkit
- Timestamp:
- Jun 2, 2020, 6:06:35 AM (5 years ago)
- Location:
- trunk/Source/WebKit
- Files:
-
- 4 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/WebKit/ChangeLog
r262414 r262415 1 2020-06-02 Carlos Garcia Campos <cgarcia@igalia.com> 2 3 [GTK4] Implement data list drop down menu 4 https://bugs.webkit.org/show_bug.cgi?id=212333 5 6 Reviewed by Adrian Perez de Castro. 7 8 Use a GtkPopover for GTK4 instead of a GtkMenu. 9 10 * UIProcess/API/gtk/PageClientImpl.cpp: 11 (WebKit::PageClientImpl::createDataListSuggestionsDropdown): 12 * UIProcess/gtk/WebDataListSuggestionsDropdownGtk.cpp: 13 (WebKit::WebDataListSuggestionsDropdownGtk::WebDataListSuggestionsDropdownGtk): 14 (WebKit::WebDataListSuggestionsDropdownGtk::~WebDataListSuggestionsDropdownGtk): 15 (WebKit::WebDataListSuggestionsDropdownGtk::show): 16 * UIProcess/gtk/WebDataListSuggestionsDropdownGtk.h: 17 1 18 2020-06-02 Carlos Garcia Campos <cgarcia@igalia.com> 2 19 -
trunk/Source/WebKit/UIProcess/API/gtk/PageClientImpl.cpp
r262414 r262415 274 274 RefPtr<WebDataListSuggestionsDropdown> PageClientImpl::createDataListSuggestionsDropdown(WebPageProxy& page) 275 275 { 276 #if USE(GTK4)277 return nullptr;278 #else279 276 return WebDataListSuggestionsDropdownGtk::create(m_viewWidget, page); 280 #endif281 277 } 282 278 #endif -
trunk/Source/WebKit/UIProcess/gtk/WebDataListSuggestionsDropdownGtk.cpp
r260752 r262415 27 27 #include "WebDataListSuggestionsDropdownGtk.h" 28 28 29 #if ENABLE(DATALIST_ELEMENT) && !USE(GTK4)29 #if ENABLE(DATALIST_ELEMENT) 30 30 31 31 #include "WebPageProxy.h" … … 66 66 auto* swindow = gtk_scrolled_window_new(nullptr, nullptr); 67 67 gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(swindow), GTK_POLICY_NEVER, GTK_POLICY_AUTOMATIC); 68 #if USE(GTK4) 69 gtk_scrolled_window_set_child(GTK_SCROLLED_WINDOW(swindow), m_treeView); 70 #else 68 71 gtk_scrolled_window_set_shadow_type(GTK_SCROLLED_WINDOW(swindow), GTK_SHADOW_ETCHED_IN); 69 72 gtk_container_add(GTK_CONTAINER(swindow), m_treeView); 70 73 gtk_widget_show(m_treeView); 71 74 #endif 75 76 #if USE(GTK4) 77 m_popup = gtk_popover_new(); 78 gtk_popover_set_has_arrow(GTK_POPOVER(m_popup), FALSE); 79 gtk_popover_set_autohide(GTK_POPOVER(m_popup), FALSE); 80 gtk_popover_set_position(GTK_POPOVER(m_popup), GTK_POS_BOTTOM); 81 gtk_popover_set_child(GTK_POPOVER(m_popup), swindow); 82 gtk_widget_set_parent(m_popup, m_webView); 83 #else 72 84 m_popup = gtk_window_new(GTK_WINDOW_POPUP); 73 85 gtk_window_set_type_hint(GTK_WINDOW(m_popup), GDK_WINDOW_TYPE_HINT_COMBO); … … 78 90 g_signal_connect_object(m_webView, "focus-out-event", G_CALLBACK(gtk_widget_hide), m_popup, G_CONNECT_SWAPPED); 79 91 g_signal_connect_object(m_webView, "unmap-event", G_CALLBACK(gtk_widget_hide), m_popup, G_CONNECT_SWAPPED); 92 #endif 80 93 81 94 #if ENABLE(DEVELOPER_MODE) … … 86 99 WebDataListSuggestionsDropdownGtk::~WebDataListSuggestionsDropdownGtk() 87 100 { 101 #if !USE(GTK4) 88 102 gtk_window_set_transient_for(GTK_WINDOW(m_popup), nullptr); 89 103 gtk_window_set_attached_to(GTK_WINDOW(m_popup), nullptr); 104 #endif 105 90 106 #if ENABLE(DEVELOPER_MODE) 91 107 g_object_set_data(G_OBJECT(m_webView), "wk-datalist-popup", nullptr); 92 108 #endif 109 110 #if USE(GTK4) 111 g_clear_pointer(&m_popup, gtk_widget_unparent); 112 #else 93 113 gtk_widget_destroy(m_popup); 114 #endif 94 115 } 95 116 … … 129 150 gint itemHeight; 130 151 gtk_tree_view_column_cell_get_size(column, nullptr, nullptr, nullptr, nullptr, &itemHeight); 152 #if !USE(GTK4) 131 153 gint verticalSeparator; 132 154 gtk_widget_style_get(m_treeView, "vertical-separator", &verticalSeparator, nullptr); 133 155 itemHeight += verticalSeparator; 156 #endif 134 157 if (!itemHeight) 135 158 return; 136 159 137 160 auto* display = gtk_widget_get_display(m_webView); 161 #if USE(GTK4) 162 auto* monitor = gdk_display_get_monitor_at_surface(display, gtk_native_get_surface(gtk_widget_get_native(m_webView))); 163 #else 138 164 auto* monitor = gdk_display_get_monitor_at_window(display, gtk_widget_get_window(m_webView)); 165 #endif 139 166 GdkRectangle area; 140 167 gdk_monitor_get_workarea(monitor, &area); … … 142 169 size_t itemCount = std::min<size_t>(information.suggestions.size(), (area.height / 3) / itemHeight); 143 170 171 #if USE(GTK4) 172 auto* swindow = GTK_SCROLLED_WINDOW(gtk_popover_get_child(GTK_POPOVER(m_popup))); 173 #else 144 174 auto* swindow = GTK_SCROLLED_WINDOW(gtk_bin_get_child(GTK_BIN(m_popup))); 175 #endif 145 176 // Disable scrollbars when there's only one item to ensure the scrolled window doesn't take them into account when calculating its minimum size. 146 177 gtk_scrolled_window_set_policy(swindow, GTK_POLICY_NEVER, itemCount > 1 ? GTK_POLICY_AUTOMATIC : GTK_POLICY_NEVER); … … 151 182 gtk_scrolled_window_set_min_content_height(swindow, itemCount * itemHeight); 152 183 184 #if USE(GTK4) 185 GdkRectangle windowRect(information.elementRect); 186 gtk_popover_set_pointing_to(GTK_POPOVER(m_popup), &windowRect); 187 #else 153 188 GtkRequisition menuRequisition; 154 189 gtk_widget_get_preferred_size(m_popup, &menuRequisition, nullptr); … … 174 209 gtk_window_set_attached_to(GTK_WINDOW(m_popup), m_webView); 175 210 gtk_window_set_screen(GTK_WINDOW(m_popup), gtk_widget_get_screen(m_webView)); 211 #endif 176 212 177 213 gtk_widget_show(m_popup); -
trunk/Source/WebKit/UIProcess/gtk/WebDataListSuggestionsDropdownGtk.h
r260752 r262415 26 26 #pragma once 27 27 28 #if ENABLE(DATALIST_ELEMENT) && !USE(GTK4)28 #if ENABLE(DATALIST_ELEMENT) 29 29 30 30 #include "WebDataListSuggestionsDropdown.h"
Note:
See TracChangeset
for help on using the changeset viewer.