Title: [104017] trunk/Source/WebKit2
Revision
104017
Author
[email protected]
Date
2012-01-03 23:35:21 -0800 (Tue, 03 Jan 2012)

Log Message

[GTK] Scrollbars are drawn behind the window resize grip
https://bugs.webkit.org/show_bug.cgi?id=75384

Reviewed by Martin Robinson.

* UIProcess/API/gtk/WebKitWebViewBase.cpp:
(webkitWebViewBaseNotifyResizerSizeForWindow): Get the size of the
main window resize grip and send it to the page proxy if it
overlaps with the view.
(toplevelWindowResizeGripVisibilityChanged): Call
webkitWebViewBaseNotifyResizerSizeForWindow().
(webkitWebViewBaseRealize): Get the toplevel window and connect to
notify::resize-grip-visible signal.
(webkitWebViewBaseSizeAllocate): Call
webkitWebViewBaseNotifyResizerSizeForWindow().

Modified Paths

Diff

Modified: trunk/Source/WebKit2/ChangeLog (104016 => 104017)


--- trunk/Source/WebKit2/ChangeLog	2012-01-04 07:26:42 UTC (rev 104016)
+++ trunk/Source/WebKit2/ChangeLog	2012-01-04 07:35:21 UTC (rev 104017)
@@ -1,3 +1,21 @@
+2012-01-03  Carlos Garcia Campos  <[email protected]>
+
+        [GTK] Scrollbars are drawn behind the window resize grip
+        https://bugs.webkit.org/show_bug.cgi?id=75384
+
+        Reviewed by Martin Robinson.
+
+        * UIProcess/API/gtk/WebKitWebViewBase.cpp:
+        (webkitWebViewBaseNotifyResizerSizeForWindow): Get the size of the
+        main window resize grip and send it to the page proxy if it
+        overlaps with the view.
+        (toplevelWindowResizeGripVisibilityChanged): Call
+        webkitWebViewBaseNotifyResizerSizeForWindow().
+        (webkitWebViewBaseRealize): Get the toplevel window and connect to
+        notify::resize-grip-visible signal.
+        (webkitWebViewBaseSizeAllocate): Call
+        webkitWebViewBaseNotifyResizerSizeForWindow().
+
 2012-01-03  Jon Lee  <[email protected]>
 
         Leak of WebNotificationClient when page is destroyed

Modified: trunk/Source/WebKit2/UIProcess/API/gtk/WebKitWebViewBase.cpp (104016 => 104017)


--- trunk/Source/WebKit2/UIProcess/API/gtk/WebKitWebViewBase.cpp	2012-01-04 07:26:42 UTC (rev 104016)
+++ trunk/Source/WebKit2/UIProcess/API/gtk/WebKitWebViewBase.cpp	2012-01-04 07:35:21 UTC (rev 104017)
@@ -68,10 +68,37 @@
     CString tooltipText;
     GtkDragAndDropHelper dragAndDropHelper;
     DragIcon dragIcon;
+    IntSize resizerSize;
 };
 
 G_DEFINE_TYPE(WebKitWebViewBase, webkit_web_view_base, GTK_TYPE_CONTAINER)
 
+static void webkitWebViewBaseNotifyResizerSizeForWindow(WebKitWebViewBase* webViewBase, GtkWindow* window)
+{
+    gboolean resizerVisible;
+    g_object_get(G_OBJECT(window), "resize-grip-visible", &resizerVisible, NULL);
+
+    IntSize resizerSize;
+    if (resizerVisible) {
+        GdkRectangle resizerRect;
+        gtk_window_get_resize_grip_area(window, &resizerRect);
+        GdkRectangle allocation;
+        gtk_widget_get_allocation(GTK_WIDGET(webViewBase), &allocation);
+        if (gdk_rectangle_intersect(&resizerRect, &allocation, 0))
+            resizerSize = IntSize(resizerRect.width, resizerRect.height);
+    }
+
+    if (resizerSize != webViewBase->priv->resizerSize) {
+        webViewBase->priv->resizerSize = resizerSize;
+        webViewBase->priv->pageProxy->setWindowResizerSize(resizerSize);
+    }
+}
+
+static void toplevelWindowResizeGripVisibilityChanged(GObject* object, GParamSpec*, WebKitWebViewBase* webViewBase)
+{
+    webkitWebViewBaseNotifyResizerSizeForWindow(webViewBase, GTK_WINDOW(object));
+}
+
 static void webkitWebViewBaseRealize(GtkWidget* widget)
 {
     gtk_widget_set_realized(widget, TRUE);
@@ -110,6 +137,13 @@
     WebKitWebViewBase* webView = WEBKIT_WEB_VIEW_BASE(widget);
     WebKitWebViewBasePrivate* priv = webView->priv;
     gtk_im_context_set_client_window(priv->imContext.get(), window);
+
+    GtkWidget* toplevel = gtk_widget_get_toplevel(widget);
+    if (gtk_widget_is_toplevel(toplevel) && GTK_IS_WINDOW(toplevel)) {
+        webkitWebViewBaseNotifyResizerSizeForWindow(webView, GTK_WINDOW(toplevel));
+        g_signal_connect(toplevel, "notify::resize-grip-visible",
+                         G_CALLBACK(toplevelWindowResizeGripVisibilityChanged), webView);
+    }
 }
 
 static void webkitWebViewBaseContainerAdd(GtkContainer* container, GtkWidget* widget)
@@ -175,6 +209,10 @@
 
     GTK_WIDGET_CLASS(webkit_web_view_base_parent_class)->size_allocate(widget, allocation);
     priv->pageProxy->drawingArea()->setSize(IntSize(allocation->width, allocation->height), IntSize());
+
+    GtkWidget* toplevel = gtk_widget_get_toplevel(widget);
+    if (gtk_widget_is_toplevel(toplevel) && GTK_IS_WINDOW(toplevel))
+        webkitWebViewBaseNotifyResizerSizeForWindow(webViewBase, GTK_WINDOW(toplevel));
 }
 
 static gboolean webkitWebViewBaseFocusInEvent(GtkWidget* widget, GdkEventFocus* event)
_______________________________________________
webkit-changes mailing list
[email protected]
http://lists.webkit.org/mailman/listinfo.cgi/webkit-changes

Reply via email to