diff options
Diffstat (limited to 'Source/WebKit2/UIProcess/API/gtk/WebKitWebViewBase.cpp')
-rw-r--r-- | Source/WebKit2/UIProcess/API/gtk/WebKitWebViewBase.cpp | 39 |
1 files changed, 32 insertions, 7 deletions
diff --git a/Source/WebKit2/UIProcess/API/gtk/WebKitWebViewBase.cpp b/Source/WebKit2/UIProcess/API/gtk/WebKitWebViewBase.cpp index d9ccaa32a..adcc34ae3 100644 --- a/Source/WebKit2/UIProcess/API/gtk/WebKitWebViewBase.cpp +++ b/Source/WebKit2/UIProcess/API/gtk/WebKitWebViewBase.cpp @@ -71,6 +71,7 @@ struct _WebKitWebViewBasePrivate { DragIcon dragIcon; IntSize resizerSize; GRefPtr<AtkObject> accessible; + bool needsResizeOnMap; }; G_DEFINE_TYPE(WebKitWebViewBase, webkit_web_view_base, GTK_TYPE_CONTAINER) @@ -202,20 +203,43 @@ static gboolean webkitWebViewBaseDraw(GtkWidget* widget, cairo_t* cr) return FALSE; } +static void resizeWebKitWebViewBaseFromAllocation(WebKitWebViewBase* webViewBase, GtkAllocation* allocation) +{ + WebKitWebViewBasePrivate* priv = webViewBase->priv; + + if (priv->pageProxy->drawingArea()) + priv->pageProxy->drawingArea()->setSize(IntSize(allocation->width, allocation->height), IntSize()); + + GtkWidget* toplevel = gtk_widget_get_toplevel(GTK_WIDGET(webViewBase)); + if (widgetIsOnscreenToplevelWindow(toplevel)) + webkitWebViewBaseNotifyResizerSizeForWindow(webViewBase, GTK_WINDOW(toplevel)); +} + static void webkitWebViewBaseSizeAllocate(GtkWidget* widget, GtkAllocation* allocation) { + GTK_WIDGET_CLASS(webkit_web_view_base_parent_class)->size_allocate(widget, allocation); + WebKitWebViewBase* webViewBase = WEBKIT_WEB_VIEW_BASE(widget); - WebKitWebViewBasePrivate* priv = webViewBase->priv; + if (!gtk_widget_get_mapped(GTK_WIDGET(webViewBase)) && !webViewBase->priv->pageProxy->drawingArea()->size().isEmpty()) { + webViewBase->priv->needsResizeOnMap = true; + return; + } + resizeWebKitWebViewBaseFromAllocation(webViewBase, allocation); +} + +static void webkitWebViewBaseMap(GtkWidget* widget) +{ + GTK_WIDGET_CLASS(webkit_web_view_base_parent_class)->map(widget); - if (!priv->pageProxy->drawingArea()) + WebKitWebViewBase* webViewBase = WEBKIT_WEB_VIEW_BASE(widget); + if (!webViewBase->priv->needsResizeOnMap) return; - GTK_WIDGET_CLASS(webkit_web_view_base_parent_class)->size_allocate(widget, allocation); - priv->pageProxy->drawingArea()->setSize(IntSize(allocation->width, allocation->height), IntSize()); + GtkAllocation allocation; + gtk_widget_get_allocation(widget, &allocation); + resizeWebKitWebViewBaseFromAllocation(webViewBase, &allocation); + webViewBase->priv->needsResizeOnMap = false; - GtkWidget* toplevel = gtk_widget_get_toplevel(widget); - if (widgetIsOnscreenToplevelWindow(toplevel)) - webkitWebViewBaseNotifyResizerSizeForWindow(webViewBase, GTK_WINDOW(toplevel)); } static gboolean webkitWebViewBaseFocusInEvent(GtkWidget* widget, GdkEventFocus* event) @@ -454,6 +478,7 @@ static void webkit_web_view_base_class_init(WebKitWebViewBaseClass* webkitWebVie widgetClass->realize = webkitWebViewBaseRealize; widgetClass->draw = webkitWebViewBaseDraw; widgetClass->size_allocate = webkitWebViewBaseSizeAllocate; + widgetClass->map = webkitWebViewBaseMap; widgetClass->focus_in_event = webkitWebViewBaseFocusInEvent; widgetClass->focus_out_event = webkitWebViewBaseFocusOutEvent; widgetClass->key_press_event = webkitWebViewBaseKeyPressEvent; |