Changeset 241515 in webkit


Ignore:
Timestamp:
Feb 14, 2019 2:11:11 AM (5 years ago)
Author:
Carlos Garcia Campos
Message:

[GTK] Use a scrolled window for script alerts text
https://bugs.webkit.org/show_bug.cgi?id=184875

Reviewed by Michael Catanzaro.

To ensure long text doesn't make the dialog bigger.

  • UIProcess/API/gtk/WebKitScriptDialogImpl.cpp:

(webkitScriptDialogImplConstructed): Use PANGO_ELLIPSIZE_END for the title and add a scrolled window for the body.
(webkitScriptDialogImplSetText): Helper function to set the dialog body, ensuring the scrolled window fills the
dialog available size.
(webkitScriptDialogImplNew): It now receives the maximum size and uses webkitScriptDialogImplSetText().

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

(webkitWebViewScriptDialog): Pass the 80% of the web view size as the maximum size of script dialogs.

Location:
trunk/Source/WebKit
Files:
4 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/WebKit/ChangeLog

    r241500 r241515  
     12019-02-13  Carlos Garcia Campos  <cgarcia@igalia.com>
     2
     3        [GTK] Use a scrolled window for script alerts text
     4        https://bugs.webkit.org/show_bug.cgi?id=184875
     5
     6        Reviewed by Michael Catanzaro.
     7
     8        To ensure long text doesn't make the dialog bigger.
     9
     10        * UIProcess/API/gtk/WebKitScriptDialogImpl.cpp:
     11        (webkitScriptDialogImplConstructed): Use PANGO_ELLIPSIZE_END for the title and add a scrolled window for the body.
     12        (webkitScriptDialogImplSetText): Helper function to set the dialog body, ensuring the scrolled window fills the
     13        dialog available size.
     14        (webkitScriptDialogImplNew): It now receives the maximum size and uses webkitScriptDialogImplSetText().
     15        * UIProcess/API/gtk/WebKitScriptDialogImpl.h:
     16        * UIProcess/API/gtk/WebKitWebViewGtk.cpp:
     17        (webkitWebViewScriptDialog): Pass the 80% of the web view size as the maximum size of script dialogs.
     18
    1192019-02-13  Ryosuke Niwa  <rniwa@webkit.org>
    220
  • trunk/Source/WebKit/UIProcess/API/gtk/WebKitScriptDialogImpl.cpp

    r236004 r241515  
    2929    WebKitScriptDialog* dialog;
    3030    GtkWidget* vbox;
     31    GtkWidget* swindow;
    3132    GtkWidget* title;
    3233    GtkWidget* label;
     
    8990    gtk_widget_set_size_request(box, -1, 16);
    9091    priv->title = gtk_label_new(nullptr);
     92    gtk_label_set_ellipsize(GTK_LABEL(priv->title), PANGO_ELLIPSIZE_END);
    9193    gtk_widget_set_margin_top(priv->title, 6);
    9294    gtk_widget_set_margin_bottom(priv->title, 6);
     
    107109    gtk_widget_show(messageArea);
    108110
     111    priv->swindow = gtk_scrolled_window_new(nullptr, nullptr);
     112    gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(priv->swindow), GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);
     113    gtk_box_pack_start(GTK_BOX(messageArea), priv->swindow, TRUE, TRUE, 0);
     114    gtk_widget_show(priv->swindow);
     115
    109116    priv->label = gtk_label_new(nullptr);
    110117    gtk_widget_set_halign(priv->label, GTK_ALIGN_CENTER);
     
    112119    gtk_label_set_line_wrap(GTK_LABEL(priv->label), TRUE);
    113120    gtk_label_set_max_width_chars(GTK_LABEL(priv->label), 60);
    114     gtk_box_pack_start(GTK_BOX(messageArea), priv->label, TRUE, FALSE, 0);
     121    gtk_container_add(GTK_CONTAINER(priv->swindow), priv->label);
    115122    gtk_widget_show(priv->label);
    116123
     
    152159}
    153160
     161static void webkitScriptDialogImplSetText(WebKitScriptDialogImpl* dialog, const char* text, GtkRequisition* maxSize)
     162{
     163    WebKitScriptDialogImplPrivate* priv = dialog->priv;
     164    gtk_label_set_text(GTK_LABEL(priv->label), text);
     165    GtkRequisition naturalRequisition;
     166    gtk_widget_get_preferred_size(priv->label, nullptr, &naturalRequisition);
     167    gtk_widget_set_size_request(priv->swindow, std::min(naturalRequisition.width, maxSize->width), std::min(maxSize->height, naturalRequisition.height));
     168}
     169
    154170static GtkWidget* webkitScriptDialogImplAddButton(WebKitScriptDialogImpl* dialog, const char* text)
    155171{
     
    167183}
    168184
    169 GtkWidget* webkitScriptDialogImplNew(WebKitScriptDialog* scriptDialog, const char* title)
     185GtkWidget* webkitScriptDialogImplNew(WebKitScriptDialog* scriptDialog, const char* title, GtkRequisition* maxSize)
    170186{
    171187    auto* dialog = WEBKIT_SCRIPT_DIALOG_IMPL(g_object_new(WEBKIT_TYPE_SCRIPT_DIALOG_IMPL, nullptr));
     
    180196        dialog->priv->defaultButton = button;
    181197        g_signal_connect_swapped(button, "clicked", G_CALLBACK(webkitScriptDialogImplCancel), dialog);
    182         gtk_label_set_text(GTK_LABEL(dialog->priv->label), scriptDialog->message.data());
     198        webkitScriptDialogImplSetText(dialog, scriptDialog->message.data(), maxSize);
    183199        break;
    184200    }
     
    199215        dialog->priv->defaultButton = button;
    200216        g_signal_connect_swapped(button, "clicked", G_CALLBACK(webkitScriptDialogImplConfirm), dialog);
    201         gtk_label_set_text(GTK_LABEL(dialog->priv->label), scriptDialog->message.data());
     217        webkitScriptDialogImplSetText(dialog, scriptDialog->message.data(), maxSize);
    202218        break;
    203219    }
     
    210226        dialog->priv->defaultButton = button;
    211227        g_signal_connect_swapped(button, "clicked", G_CALLBACK(webkitScriptDialogImplConfirm), dialog);
    212         gtk_label_set_text(GTK_LABEL(dialog->priv->label), scriptDialog->message.data());
     228        webkitScriptDialogImplSetText(dialog, scriptDialog->message.data(), maxSize);
    213229        break;
    214230    }
  • trunk/Source/WebKit/UIProcess/API/gtk/WebKitScriptDialogImpl.h

    r236004 r241515  
    4848
    4949GType webkit_script_dialog_impl_get_type();
    50 GtkWidget* webkitScriptDialogImplNew(WebKitScriptDialog*, const char* title);
     50GtkWidget* webkitScriptDialogImplNew(WebKitScriptDialog*, const char* title, GtkRequisition* maxSize);
    5151void webkitScriptDialogImplCancel(WebKitScriptDialogImpl*);
    5252void webkitScriptDialogImplConfirm(WebKitScriptDialogImpl*);
  • trunk/Source/WebKit/UIProcess/API/gtk/WebKitWebViewGtk.cpp

    r236004 r241515  
    4242{
    4343    GUniquePtr<char> title(g_strdup_printf("JavaScript - %s", webkitWebViewGetPage(webView).pageLoadState().url().utf8().data()));
    44     webkitWebViewBaseAddDialog(WEBKIT_WEB_VIEW_BASE(webView), webkitScriptDialogImplNew(scriptDialog, title.get()));
     44    // Limit script dialog size to 80% of the web view size.
     45    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) };
     46    webkitWebViewBaseAddDialog(WEBKIT_WEB_VIEW_BASE(webView), webkitScriptDialogImplNew(scriptDialog, title.get(), &maxSize));
    4547
    4648    return TRUE;
Note: See TracChangeset for help on using the changeset viewer.