[SCM] WebKit Debian packaging branch, debian/unstable, updated. debian/1.1.18-1-697-g2f78b87
eric at webkit.org
eric at webkit.org
Wed Jan 20 22:24:06 UTC 2010
The following commit has been merged in the debian/unstable branch:
commit 241006d65652e223107930f902b0e737ad1428be
Author: eric at webkit.org <eric at webkit.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Date: Thu Jan 14 11:56:58 2010 +0000
2010-01-14 Alejandro G. Castro <alex at igalia.com>
Reviewed by Xan Lopez.
Review the tooltip implementation
https://bugs.webkit.org/show_bug.cgi?id=32819
Change the GTK tooltip implementation to avoid the workaround that
we are currently using. Now we use a new private API to set the
text and all the tooltip handling is done in the webview widget.
* WebCoreSupport/ChromeClientGtk.cpp:
* webkit/webkitprivate.h:
* webkit/webkitwebview.cpp:
(webkit_web_view_set_tooltip_text): Added, new private API.
(webkit_web_view_query_tooltip): Added
git-svn-id: http://svn.webkit.org/repository/webkit/trunk@53256 268f45cc-cd09-0410-ab3c-d52691b4dbfc
diff --git a/WebKit/gtk/ChangeLog b/WebKit/gtk/ChangeLog
index 5394fb0..c6ec929 100644
--- a/WebKit/gtk/ChangeLog
+++ b/WebKit/gtk/ChangeLog
@@ -1,3 +1,20 @@
+2010-01-14 Alejandro G. Castro <alex at igalia.com>
+
+ Reviewed by Xan Lopez.
+
+ Review the tooltip implementation
+ https://bugs.webkit.org/show_bug.cgi?id=32819
+
+ Change the GTK tooltip implementation to avoid the workaround that
+ we are currently using. Now we use a new private API to set the
+ text and all the tooltip handling is done in the webview widget.
+
+ * WebCoreSupport/ChromeClientGtk.cpp:
+ * webkit/webkitprivate.h:
+ * webkit/webkitwebview.cpp:
+ (webkit_web_view_set_tooltip_text): Added, new private API.
+ (webkit_web_view_query_tooltip): Added
+
2010-01-12 Gustavo Noronha Silva <gns at gnome.org>
Reviewed by Xan Lopez.
diff --git a/WebKit/gtk/WebCoreSupport/ChromeClientGtk.cpp b/WebKit/gtk/WebCoreSupport/ChromeClientGtk.cpp
index 0f46b92..f67fc64 100644
--- a/WebKit/gtk/WebCoreSupport/ChromeClientGtk.cpp
+++ b/WebKit/gtk/WebCoreSupport/ChromeClientGtk.cpp
@@ -442,22 +442,6 @@ void ChromeClient::scrollbarsModeDidChange() const
void ChromeClient::mouseDidMoveOverElement(const HitTestResult& hit, unsigned modifierFlags)
{
-#if GTK_CHECK_VERSION(2,12,0)
- // If a tooltip must be displayed it will be, afterwards, when
- // setToolTip is called; this is just a work-around to make sure
- // it updates its location correctly; see
- // https://bugs.webkit.org/show_bug.cgi?id=15793.
- g_object_set(m_webView, "has-tooltip", FALSE, NULL);
-
- GdkDisplay* gdkDisplay;
- GtkWidget* window = gtk_widget_get_toplevel(GTK_WIDGET(m_webView));
- if (GTK_WIDGET_TOPLEVEL(window))
- gdkDisplay = gtk_widget_get_display(window);
- else
- gdkDisplay = gdk_display_get_default();
- gtk_tooltip_trigger_tooltip_query(gdkDisplay);
-#endif
-
// check if the element is a link...
bool isLink = hit.isLiveLink();
if (isLink) {
@@ -477,16 +461,7 @@ void ChromeClient::mouseDidMoveOverElement(const HitTestResult& hit, unsigned mo
void ChromeClient::setToolTip(const String& toolTip, TextDirection)
{
-#if GTK_CHECK_VERSION(2,12,0)
- if (toolTip.isEmpty())
- g_object_set(m_webView, "has-tooltip", FALSE, NULL);
- else
- gtk_widget_set_tooltip_text(GTK_WIDGET(m_webView), toolTip.utf8().data());
-#else
- // TODO: Support older GTK+ versions
- // See http://bugs.webkit.org/show_bug.cgi?id=15793
- notImplemented();
-#endif
+ webkit_web_view_set_tooltip_text(m_webView, toolTip.utf8().data());
}
void ChromeClient::print(Frame* frame)
diff --git a/WebKit/gtk/webkit/webkitprivate.h b/WebKit/gtk/webkit/webkitprivate.h
index e17e79e..e9d61a6 100644
--- a/WebKit/gtk/webkit/webkitprivate.h
+++ b/WebKit/gtk/webkit/webkitprivate.h
@@ -152,6 +152,7 @@ extern "C" {
WebKitWebResource* mainResource;
char* mainResourceIdentifier;
GHashTable* subResources;
+ char* tooltipText;
};
#define WEBKIT_WEB_FRAME_GET_PRIVATE(obj) (G_TYPE_INSTANCE_GET_PRIVATE((obj), WEBKIT_TYPE_WEB_FRAME, WebKitWebFramePrivate))
@@ -254,6 +255,9 @@ extern "C" {
GList*
webkit_web_view_get_subresources(WebKitWebView*);
+ void
+ webkit_web_view_set_tooltip_text(WebKitWebView*, const char*);
+
WebKitDownload*
webkit_download_new_with_handle(WebKitNetworkRequest* request, WebCore::ResourceHandle* handle, const WebCore::ResourceResponse& response);
diff --git a/WebKit/gtk/webkit/webkitwebview.cpp b/WebKit/gtk/webkit/webkitwebview.cpp
index 2d2e6e7..bd8dbb9 100644
--- a/WebKit/gtk/webkit/webkitwebview.cpp
+++ b/WebKit/gtk/webkit/webkitwebview.cpp
@@ -1053,6 +1053,7 @@ static void webkit_web_view_finalize(GObject* object)
WebKitWebView* webView = WEBKIT_WEB_VIEW(object);
WebKitWebViewPrivate* priv = webView->priv;
+ g_free(priv->tooltipText);
g_free(priv->mainResourceIdentifier);
g_free(priv->encoding);
g_free(priv->customEncoding);
@@ -1276,6 +1277,20 @@ static void webkit_web_view_drag_data_get(GtkWidget* widget, GdkDragContext* con
clipboard_contents_received, contents_request);
}
+#if GTK_CHECK_VERSION(2, 12, 0)
+static gboolean webkit_web_view_query_tooltip(GtkWidget *widget, gint x, gint y, gboolean keyboard_mode, GtkTooltip *tooltip)
+{
+ WebKitWebViewPrivate* priv = WEBKIT_WEB_VIEW_GET_PRIVATE(widget);
+
+ if (priv->tooltipText) {
+ gtk_tooltip_set_text(tooltip, priv->tooltipText);
+ return TRUE;
+ }
+
+ return FALSE;
+}
+#endif
+
static void webkit_web_view_class_init(WebKitWebViewClass* webViewClass)
{
GtkBindingSet* binding_set;
@@ -2145,6 +2160,9 @@ static void webkit_web_view_class_init(WebKitWebViewClass* webViewClass)
widgetClass->screen_changed = webkit_web_view_screen_changed;
widgetClass->drag_end = webkit_web_view_drag_end;
widgetClass->drag_data_get = webkit_web_view_drag_data_get;
+#if GTK_CHECK_VERSION(2, 12, 0)
+ widgetClass->query_tooltip = webkit_web_view_query_tooltip;
+#endif
GtkContainerClass* containerClass = GTK_CONTAINER_CLASS(webViewClass);
containerClass->add = webkit_web_view_container_add;
@@ -2667,6 +2685,8 @@ static void webkit_web_view_init(WebKitWebView* webView)
priv->webWindowFeatures = webkit_web_window_features_new();
priv->subResources = g_hash_table_new_full(g_str_hash, g_str_equal, g_free, g_object_unref);
+
+ priv->tooltipText = 0;
}
GtkWidget* webkit_web_view_new(void)
@@ -4021,6 +4041,27 @@ static IntPoint documentPointForWindowPoint(Frame* frame, const IntPoint& window
return view ? view->windowToContents(windowPoint) : windowPoint;
}
+void webkit_web_view_set_tooltip_text(WebKitWebView* webView, const char* tooltip)
+{
+#if GTK_CHECK_VERSION(2, 12, 0)
+ WebKitWebViewPrivate* priv = webView->priv;
+ g_free(priv->tooltipText);
+ if (tooltip && *tooltip != '\0') {
+ priv->tooltipText = g_strdup(tooltip);
+ gtk_widget_set_has_tooltip(GTK_WIDGET(webView), TRUE);
+ } else {
+ priv->tooltipText = 0;
+ gtk_widget_set_has_tooltip(GTK_WIDGET(webView), FALSE);
+ }
+
+ gtk_widget_trigger_tooltip_query(GTK_WIDGET(webView));
+#else
+ // TODO: Support older GTK+ versions
+ // See http://bugs.webkit.org/show_bug.cgi?id=15793
+ notImplemented();
+#endif
+}
+
/**
* webkit_web_view_get_hit_test_result:
* @webView: a #WebKitWebView
--
WebKit Debian packaging
More information about the Pkg-webkit-commits
mailing list