WebKit Bugzilla
New
Browse
Search+
Log In
×
Sign in with GitHub
or
Remember my login
Create Account
·
Forgot Password
Forgotten password account recovery
[patch]
Patch
wkgtk4-popup-menu.diff (text/plain), 18.28 KB, created by
Carlos Garcia Campos
on 2020-06-02 05:24:21 PDT
(
hide
)
Description:
Patch
Filename:
MIME Type:
Creator:
Carlos Garcia Campos
Created:
2020-06-02 05:24:21 PDT
Size:
18.28 KB
patch
obsolete
>diff --git a/Source/WebCore/ChangeLog b/Source/WebCore/ChangeLog >index 332cf5826015..1df83661a4c1 100644 >--- a/Source/WebCore/ChangeLog >+++ b/Source/WebCore/ChangeLog >@@ -1,3 +1,13 @@ >+2020-06-02 Carlos Garcia Campos <cgarcia@igalia.com> >+ >+ [GTK4] Make popup menus work >+ https://bugs.webkit.org/show_bug.cgi?id=211178 >+ >+ Reviewed by NOBODY (OOPS!). >+ >+ * platform/gtk/GtkVersioning.h: >+ (gtk_tree_view_column_cell_get_size): >+ > 2020-06-01 Carlos Garcia Campos <cgarcia@igalia.com> > > [GTK4] Add printing support >diff --git a/Source/WebCore/platform/gtk/GtkVersioning.h b/Source/WebCore/platform/gtk/GtkVersioning.h >index 23b5bf5841ed..fd5d8ab15ce0 100644 >--- a/Source/WebCore/platform/gtk/GtkVersioning.h >+++ b/Source/WebCore/platform/gtk/GtkVersioning.h >@@ -226,6 +226,12 @@ gtk_dialog_run(GtkDialog* dialog) > return context.response; > } > >+static inline void >+gtk_tree_view_column_cell_get_size(GtkTreeViewColumn* column, const GdkRectangle*, gint* xOffset, gint* yOffset, gint* width, gint* height) >+{ >+ gtk_tree_view_column_cell_get_size(column, xOffset, yOffset, width, height); >+} >+ > #else // USE(GTK4) > > static inline void >diff --git a/Source/WebKit/ChangeLog b/Source/WebKit/ChangeLog >index f9a577952d3f..adca4887d6ad 100644 >--- a/Source/WebKit/ChangeLog >+++ b/Source/WebKit/ChangeLog >@@ -1,3 +1,32 @@ >+2020-06-02 Carlos Garcia Campos <cgarcia@igalia.com> >+ >+ [GTK4] Make popup menus work >+ https://bugs.webkit.org/show_bug.cgi?id=211178 >+ >+ Reviewed by NOBODY (OOPS!). >+ >+ Use a GtkPopover for GTK4 instead of a GtkMenu. >+ >+ * UIProcess/API/gtk/PageClientImpl.cpp: >+ (WebKit::PageClientImpl::createPopupMenuProxy): >+ * UIProcess/API/gtk/WebKitPopupMenu.cpp: >+ (WebKit::WebKitPopupMenu::WebKitPopupMenu): >+ (WebKit::menuCloseCallback): >+ (WebKit::WebKitPopupMenu::showPopupMenu): >+ (WebKit::WebKitPopupMenu::hidePopupMenu): >+ (WebKit::WebKitPopupMenu::cancelTracking): >+ (WebKit::WebKitPopupMenu::activateItem): >+ * UIProcess/API/gtk/WebKitPopupMenu.h: >+ * UIProcess/API/gtk/WebKitWebViewBase.cpp: >+ (webkitWebViewBaseSizeAllocate): Iterate children and call check_resize on every native one. >+ * UIProcess/gtk/WebPopupMenuProxyGtk.cpp: >+ (WebKit::WebPopupMenuProxyGtk::treeViewButtonReleaseEventCallback): >+ (WebKit::WebPopupMenuProxyGtk::createPopupMenu): >+ (WebKit::WebPopupMenuProxyGtk::showPopupMenu): >+ (WebKit::WebPopupMenuProxyGtk::hidePopupMenu): >+ (WebKit::WebPopupMenuProxyGtk::treeViewRowActivatedCallback): Deleted. >+ * UIProcess/gtk/WebPopupMenuProxyGtk.h: >+ > 2020-06-01 Carlos Garcia Campos <cgarcia@igalia.com> > > [GTK4] Add printing support >diff --git a/Source/WebKit/UIProcess/API/gtk/PageClientImpl.cpp b/Source/WebKit/UIProcess/API/gtk/PageClientImpl.cpp >index bdf555ce6cc2..2170ec6b374a 100644 >--- a/Source/WebKit/UIProcess/API/gtk/PageClientImpl.cpp >+++ b/Source/WebKit/UIProcess/API/gtk/PageClientImpl.cpp >@@ -253,13 +253,9 @@ void PageClientImpl::doneWithKeyEvent(const NativeWebKeyboardEvent& event, bool > > RefPtr<WebPopupMenuProxy> PageClientImpl::createPopupMenuProxy(WebPageProxy& page) > { >-#if USE(GTK4) >- return nullptr; >-#else > if (WEBKIT_IS_WEB_VIEW(m_viewWidget)) > return WebKitPopupMenu::create(m_viewWidget, page); > return WebPopupMenuProxyGtk::create(m_viewWidget, page); >-#endif > } > > Ref<WebContextMenuProxy> PageClientImpl::createContextMenuProxy(WebPageProxy& page, ContextMenuContextData&& context, const UserData& userData) >diff --git a/Source/WebKit/UIProcess/API/gtk/WebKitPopupMenu.cpp b/Source/WebKit/UIProcess/API/gtk/WebKitPopupMenu.cpp >index a4fb592d5616..8b11eac6dd8a 100644 >--- a/Source/WebKit/UIProcess/API/gtk/WebKitPopupMenu.cpp >+++ b/Source/WebKit/UIProcess/API/gtk/WebKitPopupMenu.cpp >@@ -28,24 +28,17 @@ namespace WebKit { > using namespace WebCore; > > WebKitPopupMenu::WebKitPopupMenu(GtkWidget* webView, WebPopupMenuProxy::Client& client) >-#if USE(GTK4) >- : WebPopupMenuProxy(client) >-#else > : WebPopupMenuProxyGtk(webView, client) >-#endif > { > } > >-#if !USE(GTK4) > static void menuCloseCallback(WebKitPopupMenu* popupMenu) > { > popupMenu->activateItem(WTF::nullopt); > } >-#endif > > void WebKitPopupMenu::showPopupMenu(const IntRect& rect, TextDirection direction, double pageScaleFactor, const Vector<WebPopupItem>& items, const PlatformPopupMenuData& platformData, int32_t selectedIndex) > { >-#if !USE(GTK4) > GRefPtr<WebKitOptionMenu> menu = adoptGRef(webkitOptionMenuCreate(*this, items, selectedIndex)); > const GdkEvent* event = m_client->currentlyProcessedMouseDownEvent() ? m_client->currentlyProcessedMouseDownEvent()->nativeEvent() : nullptr; > if (webkitWebViewShowOptionMenu(WEBKIT_WEB_VIEW(m_webView), rect, menu.get(), event)) { >@@ -53,34 +46,28 @@ void WebKitPopupMenu::showPopupMenu(const IntRect& rect, TextDirection direction > g_signal_connect_swapped(m_menu.get(), "close", G_CALLBACK(menuCloseCallback), this); > } else > WebPopupMenuProxyGtk::showPopupMenu(rect, direction, pageScaleFactor, items, platformData, selectedIndex); >-#endif > } > > void WebKitPopupMenu::hidePopupMenu() > { >-#if !USE(GTK4) > if (!m_menu) { > WebPopupMenuProxyGtk::hidePopupMenu(); > return; > } > g_signal_handlers_disconnect_matched(m_menu.get(), G_SIGNAL_MATCH_DATA, 0, 0, nullptr, nullptr, this); > webkit_option_menu_close(m_menu.get()); >-#endif > } > > void WebKitPopupMenu::cancelTracking() > { >-#if !USE(GTK4) > if (!m_menu) { > WebPopupMenuProxyGtk::cancelTracking(); > return; > } > hidePopupMenu(); > m_menu = nullptr; >-#endif > } > >-#if !USE(GTK4) > void WebKitPopupMenu::activateItem(Optional<unsigned> itemIndex) > { > WebPopupMenuProxyGtk::activateItem(itemIndex); >@@ -89,6 +76,5 @@ void WebKitPopupMenu::activateItem(Optional<unsigned> itemIndex) > m_menu = nullptr; > } > } >-#endif > > } // namespace WebKit >diff --git a/Source/WebKit/UIProcess/API/gtk/WebKitPopupMenu.h b/Source/WebKit/UIProcess/API/gtk/WebKitPopupMenu.h >index b3524a72e823..522c2c6fd3eb 100644 >--- a/Source/WebKit/UIProcess/API/gtk/WebKitPopupMenu.h >+++ b/Source/WebKit/UIProcess/API/gtk/WebKitPopupMenu.h >@@ -26,11 +26,7 @@ typedef struct _WebKitOptionMenu WebKitOptionMenu; > > namespace WebKit { > >-#if USE(GTK4) >-class WebKitPopupMenu final : public WebPopupMenuProxy { >-#else > class WebKitPopupMenu final : public WebPopupMenuProxyGtk { >-#endif > public: > static Ref<WebKitPopupMenu> create(GtkWidget* webView, WebPopupMenuProxy::Client& client) > { >@@ -38,12 +34,7 @@ public: > } > ~WebKitPopupMenu() = default; > >-#if USE(GTK4) >- void selectItem(unsigned) { }; >- void activateItem(Optional<unsigned>) { }; >-#else > void activateItem(Optional<unsigned> itemIndex) override; >-#endif > > private: > WebKitPopupMenu(GtkWidget*, WebPopupMenuProxy::Client&); >@@ -52,9 +43,7 @@ private: > void hidePopupMenu() override; > void cancelTracking() override; > >-#if !USE(GTK4) > GRefPtr<WebKitOptionMenu> m_menu; >-#endif > }; > > } // namespace WebKit >diff --git a/Source/WebKit/UIProcess/API/gtk/WebKitWebViewBase.cpp b/Source/WebKit/UIProcess/API/gtk/WebKitWebViewBase.cpp >index 700638422762..2e08bcd64d90 100644 >--- a/Source/WebKit/UIProcess/API/gtk/WebKitWebViewBase.cpp >+++ b/Source/WebKit/UIProcess/API/gtk/WebKitWebViewBase.cpp >@@ -853,8 +853,10 @@ static void webkitWebViewBaseSizeAllocate(GtkWidget* widget, GtkAllocation* allo > } > > #if USE(GTK4) >- if (priv->activeContextMenuProxy) >- gtk_native_check_resize(GTK_NATIVE(priv->activeContextMenuProxy->gtkWidget())); >+ for (auto* child = gtk_widget_get_first_child(widget); child; child = gtk_widget_get_next_sibling(child)) { >+ if (GTK_IS_NATIVE(child)) >+ gtk_native_check_resize(GTK_NATIVE(child)); >+ } > #endif > > if (auto* drawingArea = static_cast<DrawingAreaProxyCoordinatedGraphics*>(priv->pageProxy->drawingArea())) >diff --git a/Source/WebKit/UIProcess/gtk/WebPopupMenuProxyGtk.cpp b/Source/WebKit/UIProcess/gtk/WebPopupMenuProxyGtk.cpp >index 91552e8f67c8..fb25fb6a23b6 100644 >--- a/Source/WebKit/UIProcess/gtk/WebPopupMenuProxyGtk.cpp >+++ b/Source/WebKit/UIProcess/gtk/WebPopupMenuProxyGtk.cpp >@@ -26,11 +26,10 @@ > #include "config.h" > #include "WebPopupMenuProxyGtk.h" > >-#if !USE(GTK4) >- > #include "NativeWebMouseEvent.h" > #include "WebPopupItem.h" > #include <WebCore/GtkUtilities.h> >+#include <WebCore/GtkVersioning.h> > #include <WebCore/IntRect.h> > #include <gtk/gtk.h> > #include <wtf/glib/GUniquePtr.h> >@@ -111,20 +110,16 @@ void WebPopupMenuProxyGtk::activateSelectedItem() > activateItemAtPath(path.get()); > } > >-void WebPopupMenuProxyGtk::treeViewRowActivatedCallback(GtkTreeView*, GtkTreePath* path, GtkTreeViewColumn*, WebPopupMenuProxyGtk* popupMenu) >-{ >- popupMenu->activateItemAtPath(path); >-} >- >-gboolean WebPopupMenuProxyGtk::treeViewButtonReleaseEventCallback(GtkWidget* treeView, GdkEventButton* event, WebPopupMenuProxyGtk* popupMenu) >+#if !USE(GTK4) >+gboolean WebPopupMenuProxyGtk::treeViewButtonReleaseEventCallback(GtkWidget* treeView, GdkEvent* event, WebPopupMenuProxyGtk* popupMenu) > { > guint button; >- gdk_event_get_button(reinterpret_cast<GdkEvent*>(event), &button); >+ gdk_event_get_button(event, &button); > if (button != GDK_BUTTON_PRIMARY) > return FALSE; > > double x, y; >- gdk_event_get_coords(reinterpret_cast<GdkEvent*>(event), &x, &y); >+ gdk_event_get_coords(event, &x, &y); > GUniqueOutPtr<GtkTreePath> path; > if (!gtk_tree_view_get_path_at_pos(GTK_TREE_VIEW(treeView), x, y, &path.outPtr(), nullptr, nullptr, nullptr)) > return FALSE; >@@ -155,6 +150,7 @@ gboolean WebPopupMenuProxyGtk::keyPressEventCallback(GtkWidget* widget, GdkEvent > gtk_widget_event(popupMenu->m_treeView, event); > return TRUE; > } >+#endif > > void WebPopupMenuProxyGtk::createPopupMenu(const Vector<WebPopupItem>& items, int32_t selectedIndex) > { >@@ -195,8 +191,13 @@ void WebPopupMenuProxyGtk::createPopupMenu(const Vector<WebPopupItem>& items, in > > m_treeView = gtk_tree_view_new_with_model(GTK_TREE_MODEL(model.get())); > auto* treeView = GTK_TREE_VIEW(m_treeView); >- g_signal_connect(treeView, "row-activated", G_CALLBACK(treeViewRowActivatedCallback), this); >+ g_signal_connect_swapped(treeView, "row-activated", G_CALLBACK(+[](WebPopupMenuProxyGtk* popupMenu, GtkTreePath* path) { >+ popupMenu->activateItemAtPath(path); >+ }), this); >+ >+#if !USE(GTK4) > g_signal_connect_after(treeView, "button-release-event", G_CALLBACK(treeViewButtonReleaseEventCallback), this); >+#endif > gtk_tree_view_set_tooltip_column(treeView, Columns::Tooltip); > gtk_tree_view_set_show_expanders(treeView, FALSE); > gtk_tree_view_set_level_indentation(treeView, 12); >@@ -229,10 +230,33 @@ void WebPopupMenuProxyGtk::createPopupMenu(const Vector<WebPopupItem>& items, in > > auto* swindow = gtk_scrolled_window_new(nullptr, nullptr); > gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(swindow), GTK_POLICY_NEVER, GTK_POLICY_AUTOMATIC); >+#if USE(GTK4) >+ gtk_scrolled_window_set_child(GTK_SCROLLED_WINDOW(swindow), m_treeView); >+#else > gtk_scrolled_window_set_shadow_type(GTK_SCROLLED_WINDOW(swindow), GTK_SHADOW_ETCHED_IN); > gtk_container_add(GTK_CONTAINER(swindow), m_treeView); > gtk_widget_show(m_treeView); >+#endif > >+#if USE(GTK4) >+ m_popup = gtk_popover_new(); >+ g_signal_connect_swapped(m_popup, "closed", G_CALLBACK(+[](WebPopupMenuProxyGtk* popupMenu) { >+ popupMenu->hidePopupMenu(); >+ }), this); >+ gtk_popover_set_has_arrow(GTK_POPOVER(m_popup), FALSE); >+ gtk_popover_set_position(GTK_POPOVER(m_popup), GTK_POS_BOTTOM); >+ gtk_popover_set_child(GTK_POPOVER(m_popup), swindow); >+ gtk_widget_set_parent(m_popup, m_webView); >+ >+ auto* controller = gtk_event_controller_key_new(); >+ g_signal_connect_swapped(controller, "key-pressed", G_CALLBACK(+[](WebPopupMenuProxyGtk* popupMenu, unsigned keyval, unsigned, GdkModifierType, GtkEventController* controller) { >+ auto* event = gtk_event_controller_get_current_event(controller); >+ if (popupMenu->typeAheadFind(keyval, gdk_event_get_time(event))) >+ return GDK_EVENT_STOP; >+ return gtk_event_controller_key_forward(GTK_EVENT_CONTROLLER_KEY(controller), popupMenu->m_treeView); >+ }), this); >+ gtk_widget_add_controller(m_popup, controller); >+#else > m_popup = gtk_window_new(GTK_WINDOW_POPUP); > g_signal_connect(m_popup, "button-press-event", G_CALLBACK(buttonPressEventCallback), this); > g_signal_connect(m_popup, "key-press-event", G_CALLBACK(keyPressEventCallback), this); >@@ -240,6 +264,7 @@ void WebPopupMenuProxyGtk::createPopupMenu(const Vector<WebPopupItem>& items, in > gtk_window_set_resizable(GTK_WINDOW(m_popup), FALSE); > gtk_container_add(GTK_CONTAINER(m_popup), swindow); > gtk_widget_show(swindow); >+#endif > } > > void WebPopupMenuProxyGtk::show() >@@ -264,12 +289,15 @@ void WebPopupMenuProxyGtk::showPopupMenu(const IntRect& rect, TextDirection, dou > auto* column = gtk_tree_view_get_column(GTK_TREE_VIEW(m_treeView), Columns::Label); > gint itemHeight; > gtk_tree_view_column_cell_get_size(column, nullptr, nullptr, nullptr, nullptr, &itemHeight); >+#if !USE(GTK4) > gint verticalSeparator; > gtk_widget_style_get(m_treeView, "vertical-separator", &verticalSeparator, nullptr); > itemHeight += verticalSeparator; >+#endif > if (!itemHeight) > return; > >+#if !USE(GTK4) > auto* toplevel = gtk_widget_get_toplevel(m_webView); > if (GTK_IS_WINDOW(toplevel)) { > gtk_window_set_transient_for(GTK_WINDOW(m_popup), GTK_WINDOW(toplevel)); >@@ -277,15 +305,24 @@ void WebPopupMenuProxyGtk::showPopupMenu(const IntRect& rect, TextDirection, dou > } > gtk_window_set_attached_to(GTK_WINDOW(m_popup), m_webView); > gtk_window_set_screen(GTK_WINDOW(m_popup), gtk_widget_get_screen(m_webView)); >+#endif > > auto* display = gtk_widget_get_display(m_webView); >+#if USE(GTK4) >+ auto* monitor = gdk_display_get_monitor_at_surface(display, gtk_native_get_surface(gtk_widget_get_native(m_webView))); >+#else > auto* monitor = gdk_display_get_monitor_at_window(display, gtk_widget_get_window(m_webView)); >+#endif > GdkRectangle area; > gdk_monitor_get_workarea(monitor, &area); > int width = std::min(rect.width(), area.width); > size_t itemCount = std::min<size_t>(items.size(), (area.height / 3) / itemHeight); > >+#if USE(GTK4) >+ auto* swindow = GTK_SCROLLED_WINDOW(gtk_popover_get_child(GTK_POPOVER(m_popup))); >+#else > auto* swindow = GTK_SCROLLED_WINDOW(gtk_bin_get_child(GTK_BIN(m_popup))); >+#endif > // Disable scrollbars when there's only one item to ensure the scrolled window doesn't take them into account when calculating its minimum size. > gtk_scrolled_window_set_policy(swindow, GTK_POLICY_NEVER, itemCount > 1 ? GTK_POLICY_AUTOMATIC : GTK_POLICY_NEVER); > gtk_widget_realize(m_treeView); >@@ -294,6 +331,11 @@ void WebPopupMenuProxyGtk::showPopupMenu(const IntRect& rect, TextDirection, dou > gtk_widget_set_size_request(m_popup, width, -1); > gtk_scrolled_window_set_min_content_height(swindow, itemCount * itemHeight); > >+#if USE(GTK4) >+ GdkRectangle windowRect = { rect.x(), rect.y(), rect.width(), rect.height() }; >+ gtk_popover_set_pointing_to(GTK_POPOVER(m_popup), &windowRect); >+ show(); >+#else > #if GTK_CHECK_VERSION(3, 24, 0) > GdkRectangle windowRect = { rect.x(), rect.y(), rect.width(), rect.height() }; > gtk_widget_translate_coordinates(m_webView, toplevel, windowRect.x, windowRect.y, &windowRect.x, &windowRect.y); >@@ -338,6 +380,7 @@ void WebPopupMenuProxyGtk::showPopupMenu(const IntRect& rect, TextDirection, dou > m_client->failedToShowPopupMenu(); > return; > } >+#endif > } > > void WebPopupMenuProxyGtk::hidePopupMenu() >@@ -345,6 +388,7 @@ void WebPopupMenuProxyGtk::hidePopupMenu() > if (!m_popup) > return; > >+#if !USE(GTK4) > if (m_device) { > gdk_seat_ungrab(gdk_device_get_seat(m_device)); > gtk_grab_remove(m_popup); >@@ -352,6 +396,7 @@ void WebPopupMenuProxyGtk::hidePopupMenu() > gtk_window_set_attached_to(GTK_WINDOW(m_popup), nullptr); > m_device = nullptr; > } >+#endif > > activateItem(WTF::nullopt); > >@@ -360,8 +405,12 @@ void WebPopupMenuProxyGtk::hidePopupMenu() > m_currentSearchString = nullptr; > } > >+#if USE(GTK4) >+ g_clear_pointer(&m_popup, gtk_widget_unparent); >+#else > gtk_widget_destroy(m_popup); > m_popup = nullptr; >+#endif > } > > void WebPopupMenuProxyGtk::cancelTracking() >@@ -456,5 +505,3 @@ bool WebPopupMenuProxyGtk::typeAheadFind(unsigned keyval, uint32_t timestamp) > } > > } // namespace WebKit >- >-#endif >diff --git a/Source/WebKit/UIProcess/gtk/WebPopupMenuProxyGtk.h b/Source/WebKit/UIProcess/gtk/WebPopupMenuProxyGtk.h >index 6cb74becb722..96356d8c9dff 100644 >--- a/Source/WebKit/UIProcess/gtk/WebPopupMenuProxyGtk.h >+++ b/Source/WebKit/UIProcess/gtk/WebPopupMenuProxyGtk.h >@@ -20,19 +20,20 @@ > #pragma once > > #include "WebPopupMenuProxy.h" >-#if !USE(GTK4) > #include <WebCore/GUniquePtrGtk.h> > #include <wtf/Vector.h> > #include <wtf/glib/GRefPtr.h> > #include <wtf/text/WTFString.h> > >-typedef struct _GMainLoop GMainLoop; > typedef struct _GdkDevice GdkDevice; >-typedef struct _GdkEventButton GdkEventButton; > typedef struct _GtkTreePath GtkTreePath; > typedef struct _GtkTreeView GtkTreeView; > typedef struct _GtkTreeViewColumn GtkTreeViewColumn; >+#if USE(GTK4) >+typedef struct _GdkEvent GdkEvent; >+#else > typedef union _GdkEvent GdkEvent; >+#endif > > namespace WebCore { > class IntRect; >@@ -72,14 +73,17 @@ private: > Optional<unsigned> typeAheadFindIndex(unsigned keyval, uint32_t timestamp); > bool typeAheadFind(unsigned keyval, uint32_t timestamp); > >+#if !USE(GTK4) > static gboolean buttonPressEventCallback(GtkWidget*, GdkEventButton*, WebPopupMenuProxyGtk*); > static gboolean keyPressEventCallback(GtkWidget*, GdkEvent*, WebPopupMenuProxyGtk*); >- static void treeViewRowActivatedCallback(GtkTreeView*, GtkTreePath*, GtkTreeViewColumn*, WebPopupMenuProxyGtk*); >- static gboolean treeViewButtonReleaseEventCallback(GtkWidget*, GdkEventButton*, WebPopupMenuProxyGtk*); >+ static gboolean treeViewButtonReleaseEventCallback(GtkWidget*, GdkEvent*, WebPopupMenuProxyGtk*); >+#endif > > GtkWidget* m_popup { nullptr }; > GtkWidget* m_treeView { nullptr }; >+#if !USE(GTK4) > GdkDevice* m_device { nullptr }; >+#endif > > Vector<GUniquePtr<GtkTreePath>> m_paths; > Optional<unsigned> m_selectedItem; >@@ -91,5 +95,3 @@ private: > }; > > } // namespace WebKit >- >-#endif
You cannot view the attachment while viewing its details because your browser does not support IFRAMEs.
View the attachment on a separate page
.
View Attachment As Diff
View Attachment As Raw
Flags:
aperez
:
review+
Actions:
View
|
Formatted Diff
|
Diff
Attachments on
bug 211178
: 400806