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)