[SCM] WebKit Debian packaging branch, webkit-1.2, updated. upstream/1.1.90-6072-g9a69373

eric at webkit.org eric at webkit.org
Thu Apr 8 01:05:32 UTC 2010


The following commit has been merged in the webkit-1.2 branch:
commit bf11e6eee6915ab5aa459f5bed4bc2a2768cad65
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