Changeset 262286 in webkit


Ignore:
Timestamp:
May 29, 2020 2:40:52 AM (4 years ago)
Author:
Carlos Garcia Campos
Message:

[GTK4] Implement script dialogs
https://bugs.webkit.org/show_bug.cgi?id=212318

Reviewed by Adrian Perez de Castro.

Source/WebCore:

Add more definitions to avoid ifdefs.

  • platform/gtk/GtkVersioning.h:

(gtk_entry_set_text):
(gtk_entry_get_text):
(gtk_label_set_line_wrap):
(gtk_window_set_default):
(gtk_widget_add_css_class):

Source/WebKit:

Adapt to the GTK4 API and theme changes.

  • UIProcess/API/gtk/WebKitScriptDialogImpl.cpp:

(webkitScriptDialogImplClose):
(webkitScriptDialogImplKeyPressed):
(webkitScriptDialogImplMap):
(webkitScriptDialogImplConstructed):
(webkitScriptDialogImplDispose):
(webkit_script_dialog_impl_class_init):
(webkitScriptDialogImplAddButton):
(webkitScriptDialogImplNew):
(webkitScriptDialogImplSetEntryText):

  • UIProcess/API/gtk/WebKitScriptDialogImpl.h:
  • UIProcess/API/gtk/WebKitWebViewBase.cpp:

(webkitWebViewBaseAddDialog):
(webkitWebViewBaseRemoveChild):
(webkitWebViewBaseSnapshot):

  • UIProcess/API/gtk/WebKitWebViewDialog.cpp:

(webkitWebViewDialogSnapshot):
(webkitWebViewDialogSizeAllocate):
(webkitWebViewDialogConstructed):
(webkit_web_view_dialog_class_init):
(webkitWebViewDialogSetChild):
(webkitWebViewDialogGetChild):

  • UIProcess/API/gtk/WebKitWebViewDialog.h:
  • UIProcess/API/gtk/WebKitWebViewGtk.cpp:

(webkitWebViewScriptDialog):

Location:
trunk/Source
Files:
10 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/WebCore/ChangeLog

    r262279 r262286  
     12020-05-29  Carlos Garcia Campos  <cgarcia@igalia.com>
     2
     3        [GTK4] Implement script dialogs
     4        https://bugs.webkit.org/show_bug.cgi?id=212318
     5
     6        Reviewed by Adrian Perez de Castro.
     7
     8        Add more definitions to avoid ifdefs.
     9
     10        * platform/gtk/GtkVersioning.h:
     11        (gtk_entry_set_text):
     12        (gtk_entry_get_text):
     13        (gtk_label_set_line_wrap):
     14        (gtk_window_set_default):
     15        (gtk_widget_add_css_class):
     16
    1172020-05-28  Andy Estes  <aestes@apple.com>
    218
  • trunk/Source/WebCore/platform/gtk/GtkVersioning.h

    r261912 r262286  
    8888}
    8989
     90static inline void
     91gtk_entry_set_text(GtkEntry* entry, const char* text)
     92{
     93    gtk_editable_set_text(GTK_EDITABLE(entry), text);
     94}
     95
     96static inline const char*
     97gtk_entry_get_text(GtkEntry* entry)
     98{
     99    return gtk_editable_get_text(GTK_EDITABLE(entry));
     100}
     101
     102static inline void
     103gtk_label_set_line_wrap(GtkLabel* label, gboolean enable)
     104{
     105    gtk_label_set_wrap(label, enable);
     106}
     107
     108static inline void
     109gtk_window_set_default(GtkWindow* window, GtkWidget* widget)
     110{
     111    gtk_window_set_default_widget(window, widget);
     112}
     113
    90114static inline gboolean
    91115gdk_event_get_state(const GdkEvent *event, GdkModifierType *state)
     
    160184}
    161185
     186#else // USE(GTK4)
     187
     188static inline void
     189gtk_widget_add_css_class(GtkWidget* widget, const char* name)
     190{
     191    gtk_style_context_add_class(gtk_widget_get_style_context(widget), name);
     192}
     193
    162194#endif // USE(GTK4)
  • trunk/Source/WebKit/ChangeLog

    r262283 r262286  
     12020-05-29  Carlos Garcia Campos  <cgarcia@igalia.com>
     2
     3        [GTK4] Implement script dialogs
     4        https://bugs.webkit.org/show_bug.cgi?id=212318
     5
     6        Reviewed by Adrian Perez de Castro.
     7
     8        Adapt to the GTK4 API and theme changes.
     9
     10        * UIProcess/API/gtk/WebKitScriptDialogImpl.cpp:
     11        (webkitScriptDialogImplClose):
     12        (webkitScriptDialogImplKeyPressed):
     13        (webkitScriptDialogImplMap):
     14        (webkitScriptDialogImplConstructed):
     15        (webkitScriptDialogImplDispose):
     16        (webkit_script_dialog_impl_class_init):
     17        (webkitScriptDialogImplAddButton):
     18        (webkitScriptDialogImplNew):
     19        (webkitScriptDialogImplSetEntryText):
     20        * UIProcess/API/gtk/WebKitScriptDialogImpl.h:
     21        * UIProcess/API/gtk/WebKitWebViewBase.cpp:
     22        (webkitWebViewBaseAddDialog):
     23        (webkitWebViewBaseRemoveChild):
     24        (webkitWebViewBaseSnapshot):
     25        * UIProcess/API/gtk/WebKitWebViewDialog.cpp:
     26        (webkitWebViewDialogSnapshot):
     27        (webkitWebViewDialogSizeAllocate):
     28        (webkitWebViewDialogConstructed):
     29        (webkit_web_view_dialog_class_init):
     30        (webkitWebViewDialogSetChild):
     31        (webkitWebViewDialogGetChild):
     32        * UIProcess/API/gtk/WebKitWebViewDialog.h:
     33        * UIProcess/API/gtk/WebKitWebViewGtk.cpp:
     34        (webkitWebViewScriptDialog):
     35
    1362020-05-29  Wenson Hsieh  <wenson_hsieh@apple.com>
    237
  • trunk/Source/WebKit/UIProcess/API/gtk/WebKitScriptDialogGtk.cpp

    r261371 r262286  
    2626void webkitScriptDialogAccept(WebKitScriptDialog* scriptDialog)
    2727{
    28 #if !USE(GTK4)
    2928    if (!WEBKIT_IS_SCRIPT_DIALOG_IMPL(scriptDialog->nativeDialog))
    3029        return;
    3130    webkitScriptDialogImplConfirm(WEBKIT_SCRIPT_DIALOG_IMPL(scriptDialog->nativeDialog));
    32 #endif
    3331}
    3432
    3533void webkitScriptDialogDismiss(WebKitScriptDialog* scriptDialog)
    3634{
    37 #if !USE(GTK4)
    3835    if (!WEBKIT_IS_SCRIPT_DIALOG_IMPL(scriptDialog->nativeDialog))
    3936        return;
    4037    webkitScriptDialogImplCancel(WEBKIT_SCRIPT_DIALOG_IMPL(scriptDialog->nativeDialog));
    41 #endif
    4238}
    4339
    4440void webkitScriptDialogSetUserInput(WebKitScriptDialog* scriptDialog, const String& userInput)
    4541{
    46 #if !USE(GTK4)
    4742    if (!WEBKIT_IS_SCRIPT_DIALOG_IMPL(scriptDialog->nativeDialog))
    4843        return;
    4944
    5045    webkitScriptDialogImplSetEntryText(WEBKIT_SCRIPT_DIALOG_IMPL(scriptDialog->nativeDialog), userInput);
    51 #endif
    5246}
    5347
    5448bool webkitScriptDialogIsUserHandled(WebKitScriptDialog* scriptDialog)
    5549{
    56 #if !USE(GTK4)
    5750    return !WEBKIT_IS_SCRIPT_DIALOG_IMPL(scriptDialog->nativeDialog);
    58 #else
    59     return true;
    60 #endif
    6151}
  • trunk/Source/WebKit/UIProcess/API/gtk/WebKitScriptDialogImpl.cpp

    r260752 r262286  
    2121#include "WebKitScriptDialogImpl.h"
    2222
    23 #if !USE(GTK4)
    24 
    2523#include "WebKitScriptDialogPrivate.h"
     24#include <WebCore/GtkUtilities.h>
     25#include <WebCore/GtkVersioning.h>
    2626#include <glib/gi18n-lib.h>
    2727#include <wtf/glib/WTFGType.h>
     
    4444{
    4545    webkit_script_dialog_close(dialog->priv->dialog);
     46#if USE(GTK4)
     47    gtk_widget_unparent(GTK_WIDGET(dialog));
     48#else
    4649    gtk_widget_destroy(GTK_WIDGET(dialog));
    47 }
    48 
     50#endif
     51}
     52
     53#if USE(GTK4)
     54static gboolean webkitScriptDialogImplKeyPressed(WebKitScriptDialogImpl* dialog, unsigned keyval, unsigned, GdkModifierType, GtkEventController*)
     55{
     56    if (keyval == GDK_KEY_Escape) {
     57        webkitScriptDialogImplClose(dialog);
     58        return GDK_EVENT_STOP;
     59    }
     60
     61    return GDK_EVENT_PROPAGATE;
     62}
     63#else
    4964static gboolean webkitScriptDialogImplKeyPressEvent(GtkWidget* widget, GdkEventKey* keyEvent)
    5065{
     
    5873    return GDK_EVENT_PROPAGATE;
    5974}
     75#endif
    6076
    6177static void webkitScriptDialogImplMap(GtkWidget* widget)
    6278{
    6379    WebKitScriptDialogImplPrivate* priv = WEBKIT_SCRIPT_DIALOG_IMPL(widget)->priv;
    64     gtk_widget_grab_default(priv->defaultButton);
     80    auto* toplevel = gtk_widget_get_toplevel(widget);
     81    if (WebCore::widgetIsOnscreenToplevelWindow(toplevel))
     82        gtk_window_set_default(GTK_WINDOW(toplevel), priv->defaultButton);
    6583
    6684    switch (priv->dialog->type) {
     
    86104
    87105    priv->vbox = gtk_box_new(GTK_ORIENTATION_VERTICAL, 20);
     106#if USE(GTK4)
     107    webkitWebViewDialogSetChild(WEBKIT_WEB_VIEW_DIALOG(object), priv->vbox);
     108    gtk_widget_add_css_class(priv->vbox, "dialog-vbox");
     109#else
    88110    gtk_container_set_border_width(GTK_CONTAINER(priv->vbox), 0);
    89111    gtk_container_add(GTK_CONTAINER(dialog), priv->vbox);
    90112    gtk_widget_show(priv->vbox);
     113#endif
    91114
    92115    GtkWidget* box = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 0);
    93     gtk_style_context_add_class(gtk_widget_get_style_context(box), GTK_STYLE_CLASS_TITLEBAR);
     116    gtk_widget_add_css_class(box, GTK_STYLE_CLASS_TITLEBAR);
    94117    gtk_widget_set_size_request(box, -1, 16);
    95118    priv->title = gtk_label_new(nullptr);
     
    97120    gtk_widget_set_margin_top(priv->title, 6);
    98121    gtk_widget_set_margin_bottom(priv->title, 6);
    99     gtk_style_context_add_class(gtk_widget_get_style_context(priv->title), GTK_STYLE_CLASS_TITLE);
     122    gtk_widget_add_css_class(priv->title, GTK_STYLE_CLASS_TITLE);
     123#if USE(GTK4)
     124    gtk_widget_set_hexpand(priv->title, TRUE);
     125    gtk_widget_set_halign(priv->title, GTK_ALIGN_CENTER);
     126    gtk_box_append(GTK_BOX(box), priv->title);
     127#else
    100128    gtk_box_set_center_widget(GTK_BOX(box), priv->title);
    101129    gtk_widget_show(priv->title);
     130#endif
     131#if USE(GTK4)
     132    gtk_box_append(GTK_BOX(priv->vbox), box);
     133#else
    102134    gtk_box_pack_start(GTK_BOX(priv->vbox), box, TRUE, FALSE, 0);
    103135    gtk_widget_show(box);
     136#endif
    104137
    105138    box = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 30);
    106139    gtk_widget_set_margin_start(box, 30);
    107140    gtk_widget_set_margin_end(box, 30);
     141#if USE(GTK4)
     142    gtk_box_append(GTK_BOX(priv->vbox), box);
     143#else
    108144    gtk_box_pack_start(GTK_BOX(priv->vbox), box, TRUE, FALSE, 0);
    109145    gtk_widget_show(box);
     146#endif
    110147
    111148    GtkWidget* messageArea = gtk_box_new(GTK_ORIENTATION_VERTICAL, 10);
     149#if USE(GTK4)
     150    gtk_box_append(GTK_BOX(box), messageArea);
     151#else
    112152    gtk_box_pack_start(GTK_BOX(box), messageArea, TRUE, TRUE, 0);
    113153    gtk_widget_show(messageArea);
     154#endif
    114155
    115156    priv->swindow = gtk_scrolled_window_new(nullptr, nullptr);
    116157    gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(priv->swindow), GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);
     158#if USE(GTK4)
     159    gtk_box_append(GTK_BOX(messageArea), priv->swindow);
     160#else
    117161    gtk_box_pack_start(GTK_BOX(messageArea), priv->swindow, TRUE, TRUE, 0);
    118162    gtk_widget_show(priv->swindow);
     163#endif
    119164
    120165    priv->label = gtk_label_new(nullptr);
     
    123168    gtk_label_set_line_wrap(GTK_LABEL(priv->label), TRUE);
    124169    gtk_label_set_max_width_chars(GTK_LABEL(priv->label), 60);
     170#if USE(GTK4)
     171    gtk_widget_set_hexpand(priv->label, TRUE);
     172    gtk_scrolled_window_set_child(GTK_SCROLLED_WINDOW(priv->swindow), priv->label);
     173#else
    125174    gtk_container_add(GTK_CONTAINER(priv->swindow), priv->label);
    126175    gtk_widget_show(priv->label);
     176#endif
    127177
    128178    GtkWidget* actionBox = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 0);
    129     gtk_style_context_add_class(gtk_widget_get_style_context(actionBox), "dialog-action-box");
     179    gtk_widget_add_css_class(actionBox, "dialog-action-box");
     180#if USE(GTK4)
     181    gtk_box_append(GTK_BOX(priv->vbox), actionBox);
     182#else
    130183    gtk_box_pack_end(GTK_BOX(priv->vbox), actionBox, FALSE, TRUE, 0);
    131184    gtk_widget_show(actionBox);
    132 
     185#endif
     186
     187#if USE(GTK4)
     188    priv->actionArea = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 0);
     189    gtk_box_set_homogeneous(GTK_BOX(priv->actionArea), TRUE);
     190    gtk_widget_set_halign(priv->actionArea, GTK_ALIGN_FILL);
     191#else
    133192    priv->actionArea = gtk_button_box_new(GTK_ORIENTATION_HORIZONTAL);
    134193    gtk_button_box_set_layout(GTK_BUTTON_BOX(priv->actionArea), GTK_BUTTONBOX_EXPAND);
     194#endif
    135195    gtk_widget_set_hexpand(priv->actionArea, TRUE);
    136     gtk_style_context_add_class(gtk_widget_get_style_context(priv->actionArea), "dialog-action-area");
     196    gtk_widget_add_css_class(priv->actionArea, "dialog-action-area");
     197#if USE(GTK4)
     198    gtk_box_append(GTK_BOX(actionBox), priv->actionArea);
     199#else
    137200    gtk_box_pack_end(GTK_BOX(actionBox), priv->actionArea, FALSE, TRUE, 0);
    138201    gtk_widget_show(priv->actionArea);
     202#endif
     203
     204#if USE(GTK4)
     205    auto* controller = gtk_event_controller_key_new();
     206    g_signal_connect_object(controller, "key-pressed", G_CALLBACK(webkitScriptDialogImplKeyPressed), dialog, G_CONNECT_SWAPPED);
     207    gtk_widget_add_controller(GTK_WIDGET(dialog), controller);
     208#endif
    139209}
    140210
     
    148218    }
    149219
     220#if USE(GTK4)
     221    webkitWebViewDialogSetChild(WEBKIT_WEB_VIEW_DIALOG(object), nullptr);
     222#endif
     223
    150224    G_OBJECT_CLASS(webkit_script_dialog_impl_parent_class)->dispose(object);
    151225}
     
    158232
    159233    GtkWidgetClass* widgetClass = GTK_WIDGET_CLASS(klass);
     234#if !USE(GTK4)
    160235    widgetClass->key_press_event = webkitScriptDialogImplKeyPressEvent;
     236#endif
    161237    widgetClass->map = webkitScriptDialogImplMap;
    162238    gtk_widget_class_set_accessible_role(widgetClass, ATK_ROLE_ALERT);
     
    177253    GtkWidget* button = gtk_button_new_with_label(text);
    178254    gtk_button_set_use_underline(GTK_BUTTON(button), TRUE);
    179     gtk_style_context_add_class(gtk_widget_get_style_context(button), "text-button");
     255    gtk_widget_add_css_class(button, "text-button");
     256#if !USE(GTK4)
    180257    gtk_widget_set_can_default(button, TRUE);
     258#endif
    181259
    182260    gtk_widget_set_valign(button, GTK_ALIGN_BASELINE);
     261#if USE(GTK4)
     262    gtk_box_append(GTK_BOX(priv->actionArea), button);
     263#else
    183264    gtk_container_add(GTK_CONTAINER(priv->actionArea), button);
    184265    gtk_widget_show(button);
     266#endif
    185267
    186268    return button;
     
    206288        dialog->priv->entry = gtk_entry_new();
    207289        gtk_entry_set_text(GTK_ENTRY(dialog->priv->entry), scriptDialog->defaultText.data());
     290#if USE(GTK4)
     291        gtk_box_insert_child_after(GTK_BOX(dialog->priv->vbox), dialog->priv->entry,
     292            gtk_widget_get_parent(gtk_widget_get_parent(dialog->priv->swindow)));
     293#else
    208294        gtk_container_add(GTK_CONTAINER(dialog->priv->vbox), dialog->priv->entry);
     295#endif
    209296        gtk_entry_set_activates_default(GTK_ENTRY(dialog->priv->entry), TRUE);
    210297        gtk_widget_show(dialog->priv->entry);
     
    275362    gtk_entry_set_text(GTK_ENTRY(dialog->priv->entry), text.utf8().data());
    276363}
    277 
    278 #endif
  • trunk/Source/WebKit/UIProcess/API/gtk/WebKitScriptDialogImpl.h

    r260752 r262286  
    1919
    2020#pragma once
    21 
    22 #if !USE(GTK4)
    2321
    2422#include "WebKitScriptDialog.h"
     
    5654
    5755G_END_DECLS
    58 
    59 #endif
  • trunk/Source/WebKit/UIProcess/API/gtk/WebKitWebViewBase.cpp

    r262193 r262286  
    573573    WebKitWebViewBasePrivate* priv = webViewBase->priv;
    574574    priv->dialog = dialog;
     575#if USE(GTK4)
     576    g_object_add_weak_pointer(G_OBJECT(dialog), reinterpret_cast<void**>(&priv->dialog));
     577#endif
    575578    gtk_widget_set_parent(dialog, GTK_WIDGET(webViewBase));
    576579    gtk_widget_show(dialog);
     
    591594        priv->inspectorViewSize = 0;
    592595    } else if (priv->dialog == widget) {
     596        g_object_remove_weak_pointer(G_OBJECT(widget), reinterpret_cast<void**>(&priv->dialog));
    593597        priv->dialog = nullptr;
    594         if (gtk_widget_get_visible(GTK_WIDGET(webViewBase)))
    595             gtk_widget_grab_focus(GTK_WIDGET(webViewBase));
    596598    } else if (priv->keyBindingTranslator.widget() == widget)
    597599        priv->keyBindingTranslator.invalidate();
     
    599601        RELEASE_ASSERT_NOT_REACHED();
    600602
    601     gboolean wasVisible = gtk_widget_get_visible(widget);
    602603    gtk_widget_unparent(widget);
    603 
    604     if (wasVisible && gtk_widget_get_visible(GTK_WIDGET(webViewBase)))
    605         gtk_widget_queue_resize(GTK_WIDGET(webViewBase));
    606604}
    607605#else
     
    743741    ASSERT(drawingArea->isInAcceleratedCompositingMode());
    744742    webViewBase->priv->acceleratedBackingStore->snapshot(snapshot);
     743
     744    if (webViewBase->priv->dialog)
     745        gtk_widget_snapshot_child(widget, webViewBase->priv->dialog, snapshot);
    745746}
    746747#else
  • trunk/Source/WebKit/UIProcess/API/gtk/WebKitWebViewDialog.cpp

    r260752 r262286  
    11/*
    2  * Copyright (C) 2018 Igalia S.L.
     2 * Copyright (C) 2018, 2020 Igalia S.L.
    33 *
    44 * This library is free software; you can redistribute it and/or
     
    2121#include "WebKitWebViewDialog.h"
    2222
    23 #if !USE(GTK4)
    24 
     23#include <WebCore/FloatSize.h>
     24#include <WebCore/GtkVersioning.h>
     25#include <WebCore/RefPtrCairo.h>
    2526#include <wtf/glib/GRefPtr.h>
    2627#include <wtf/glib/WTFGType.h>
    2728
    2829struct _WebKitWebViewDialogPrivate {
     30    GtkWidget* child;
     31#if USE(GTK4)
     32    GRefPtr<GtkCssProvider> cssProvider;
     33#endif
    2934};
    3035
     36#if USE(GTK4)
     37WEBKIT_DEFINE_ABSTRACT_TYPE(WebKitWebViewDialog, webkit_web_view_dialog, GTK_TYPE_WIDGET)
     38#else
    3139WEBKIT_DEFINE_ABSTRACT_TYPE(WebKitWebViewDialog, webkit_web_view_dialog, GTK_TYPE_EVENT_BOX)
     40#endif
    3241
     42#if USE(GTK4)
     43static void webkitWebViewDialogSnapshot(GtkWidget* widget, GtkSnapshot* snapshot)
     44{
     45    WebCore::FloatSize widgetSize(gtk_widget_get_width(widget), gtk_widget_get_height(widget));
     46    graphene_rect_t rect = GRAPHENE_RECT_INIT(0, 0, widgetSize.width(), widgetSize.height());
     47    RefPtr<cairo_t> cr = adoptRef(gtk_snapshot_append_cairo(snapshot, &rect));
     48    cairo_set_operator(cr.get(), CAIRO_OPERATOR_OVER);
     49    cairo_set_source_rgba(cr.get(), 0, 0, 0, 0.5);
     50    cairo_paint(cr.get());
     51
     52    WebKitWebViewDialogPrivate* priv = WEBKIT_WEB_VIEW_DIALOG(widget)->priv;
     53    if (priv->child)
     54        gtk_widget_snapshot_child(widget, priv->child, snapshot);
     55}
     56#else
    3357static gboolean webkitWebViewDialogDraw(GtkWidget* widget, cairo_t* cr)
    3458{
     
    4973    return FALSE;
    5074}
     75#endif
    5176
     77#if USE(GTK4)
     78static void webkitWebViewDialogSizeAllocate(GtkWidget* widget, int width, int height, int baseline)
     79#else
    5280static void webkitWebViewDialogSizeAllocate(GtkWidget* widget, GtkAllocation* allocation)
     81#endif
    5382{
     83#if USE(GTK4)
     84    GTK_WIDGET_CLASS(webkit_web_view_dialog_parent_class)->size_allocate(widget, width, height, baseline);
     85    GtkAllocation allocationStack = { 0, 0, width, height };
     86    GtkAllocation* allocation = &allocationStack;
     87    GtkWidget* child = WEBKIT_WEB_VIEW_DIALOG(widget)->priv->child;
     88#else
    5489    GTK_WIDGET_CLASS(webkit_web_view_dialog_parent_class)->size_allocate(widget, allocation);
     90    GtkWidget* child = gtk_bin_get_child(GTK_BIN(widget));
     91#endif
    5592
    56     GtkWidget* child = gtk_bin_get_child(GTK_BIN(widget));
    5793    if (!child)
    5894        return;
     
    75111    G_OBJECT_CLASS(webkit_web_view_dialog_parent_class)->constructed(object);
    76112
     113#if USE(GTK4)
     114    gtk_widget_add_css_class(GTK_WIDGET(object), "dialog");
     115    gtk_widget_add_css_class(GTK_WIDGET(object), "message");
     116    gtk_widget_add_css_class(GTK_WIDGET(object), GTK_STYLE_CLASS_CSD);
     117    gtk_widget_remove_css_class(GTK_WIDGET(object), GTK_STYLE_CLASS_BACKGROUND);
     118
     119    WebKitWebViewDialogPrivate* priv = WEBKIT_WEB_VIEW_DIALOG(object)->priv;
     120    priv->cssProvider = adoptGRef(gtk_css_provider_new());
     121    gtk_css_provider_load_from_data(priv->cssProvider.get(), ".dialog-vbox { border-radius: 7px; }", -1);
     122#else
    77123    gtk_widget_set_app_paintable(GTK_WIDGET(object), TRUE);
    78124
    79125    gtk_style_context_add_class(gtk_widget_get_style_context(GTK_WIDGET(object)), GTK_STYLE_CLASS_CSD);
    80126    gtk_style_context_add_class(gtk_widget_get_style_context(GTK_WIDGET(object)), GTK_STYLE_CLASS_BACKGROUND);
     127#endif
    81128}
    82129
     
    87134
    88135    GtkWidgetClass* widgetClass = GTK_WIDGET_CLASS(klass);
     136#if USE(GTK4)
     137    widgetClass->snapshot = webkitWebViewDialogSnapshot;
     138#else
    89139    widgetClass->draw = webkitWebViewDialogDraw;
     140#endif
    90141    widgetClass->size_allocate = webkitWebViewDialogSizeAllocate;
    91142
     143#if USE(GTK4)
     144    gtk_widget_class_set_css_name(widgetClass, "window");
     145#else
    92146    gtk_widget_class_set_css_name(widgetClass, "messagedialog");
     147#endif
    93148}
    94149
     150#if USE(GTK4)
     151void webkitWebViewDialogSetChild(WebKitWebViewDialog* dialog, GtkWidget* child)
     152{
     153    WebKitWebViewDialogPrivate* priv = dialog->priv;
     154    g_clear_pointer(&priv->child, gtk_widget_unparent);
     155    if (child) {
     156        gtk_widget_set_parent(child, GTK_WIDGET(dialog));
     157        gtk_widget_add_css_class(child, GTK_STYLE_CLASS_BACKGROUND);
     158        gtk_style_context_add_provider(gtk_widget_get_style_context(child), GTK_STYLE_PROVIDER(priv->cssProvider.get()), GTK_STYLE_PROVIDER_PRIORITY_APPLICATION);
     159        priv->child = child;
     160    }
     161}
     162
     163GtkWidget* webkitWebViewDialogGetChild(WebKitWebViewDialog* dialog)
     164{
     165    return dialog->priv->child;
     166}
    95167#endif
  • trunk/Source/WebKit/UIProcess/API/gtk/WebKitWebViewDialog.h

    r260752 r262286  
    2020#pragma once
    2121
    22 #if !USE(GTK4)
    23 
    2422#include <gtk/gtk.h>
    2523
     
    3836
    3937struct _WebKitWebViewDialog {
     38#if USE(GTK4)
     39    GtkWidget parent;
     40#else
    4041    GtkEventBox parent;
     42#endif
    4143
    4244    WebKitWebViewDialogPrivate* priv;
     
    4446
    4547struct _WebKitWebViewDialogClass {
     48#if USE(GTK4)
     49    GtkWidgetClass parentClass;
     50#else
    4651    GtkEventBoxClass parentClass;
     52#endif
    4753};
    4854
    4955GType webkit_web_view_dialog_get_type();
     56#if USE(GTK4)
     57void webkitWebViewDialogSetChild(WebKitWebViewDialog*, GtkWidget*);
     58GtkWidget* webkitWebViewDialogGetChild(WebKitWebViewDialog*);
     59#endif
    5060
    5161G_END_DECLS
    52 
    53 #endif
  • trunk/Source/WebKit/UIProcess/API/gtk/WebKitWebViewGtk.cpp

    r260889 r262286  
    4444gboolean webkitWebViewScriptDialog(WebKitWebView* webView, WebKitScriptDialog* scriptDialog)
    4545{
    46 #if !USE(GTK4)
    4746    GUniquePtr<char> title(g_strdup_printf("JavaScript - %s", webkitWebViewGetPage(webView).pageLoadState().url().utf8().data()));
    4847    // Limit script dialog size to 80% of the web view size.
    4948    GtkRequisition maxSize = { static_cast<int>(gtk_widget_get_allocated_width(GTK_WIDGET(webView)) * 0.80), static_cast<int>(gtk_widget_get_allocated_height(GTK_WIDGET(webView)) * 0.80) };
    5049    webkitWebViewBaseAddDialog(WEBKIT_WEB_VIEW_BASE(webView), webkitScriptDialogImplNew(scriptDialog, title.get(), &maxSize));
    51 #endif
    5250
    5351    return TRUE;
Note: See TracChangeset for help on using the changeset viewer.