Changeset 38834 in webkit


Ignore:
Timestamp:
Nov 28, 2008 4:20:56 PM (15 years ago)
Author:
zecke@webkit.org
Message:

2008-11-28 Gustavo Noronha Silva <Gustavo Noronha Silva>

Reviewed and slightly modified by Holger Freyther.

https://bugs.webkit.org/show_bug.cgi?id=19130

ChromeClient::createWindow and friends need to be implemented

Code from Gustavo Noronha and Marco Barisione
<marco.barisione@collabora.co.uk> in this change set.

Implemented all the ChromeClient interfaces needed to have new
window creation functioning and exposed to client code. We
implemented a mirror GObject to the WindowFeatures object provided
by WebCore.

  • WebCoreSupport/ChromeClientGtk.cpp: (WebKit::ChromeClient::windowRect): (WebKit::ChromeClient::setWindowRect): (WebKit::ChromeClient::unfocus): (WebKit::ChromeClient::createWindow): (WebKit::ChromeClient::show): (WebKit::ChromeClient::setToolbarsVisible): (WebKit::ChromeClient::toolbarsVisible): (WebKit::ChromeClient::setStatusbarVisible): (WebKit::ChromeClient::statusbarVisible): (WebKit::ChromeClient::setScrollbarsVisible): (WebKit::ChromeClient::scrollbarsVisible): (WebKit::ChromeClient::setMenubarVisible): (WebKit::ChromeClient::menubarVisible): (WebKit::ChromeClient::setResizable):
  • WebCoreSupport/FrameLoaderClientGtk.cpp: (WebKit::FrameLoaderClient::dispatchDecidePolicyForNewWindowAction): (WebKit::FrameLoaderClient::dispatchShow): (WebKit::FrameLoaderClient::dispatchCreatePage):
  • webkit/webkit.h:
  • webkit/webkitdefines.h:
  • webkit/webkitprivate.h:
  • webkit/webkitwebview.cpp:
  • webkit/webkitwebview.h:
  • webkit/webkitwebwindowfeatures.cpp: Added. (_WebKitWebWindowFeaturesPrivate::webkit_web_window_features_class_init): (_WebKitWebWindowFeaturesPrivate::webkit_web_window_features_init): (_WebKitWebWindowFeaturesPrivate::webkit_web_window_features_finalize): (_WebKitWebWindowFeaturesPrivate::webkit_web_window_features_set_property): (_WebKitWebWindowFeaturesPrivate::webkit_web_window_features_get_property): (_WebKitWebWindowFeaturesPrivate::webkit_web_window_features_new): (_WebKitWebWindowFeaturesPrivate::webkit_web_window_features_new_from_core_features): (_WebKitWebWindowFeaturesPrivate::webkit_web_window_features_equal):
  • webkit/webkitwebwindowfeatures.h: Added.
Location:
trunk
Files:
2 added
13 edited

Legend:

Unmodified
Added
Removed
  • trunk/ChangeLog

    r38782 r38834  
     12008-11-28  Gustavo Noronha Silva  <gns@gnome.org>
     2
     3        Reviewed and slightly modified by Holger Freyther.
     4
     5        https://bugs.webkit.org/show_bug.cgi?id=19130
     6
     7        Added the new WebKitGtk files to be built:
     8        WebKit/gtk/webkit/webkitwebwindowfeatures.{cpp,h}
     9
     10        * GNUmakefile.am:
     11
    1122008-11-26  Kalle Vahlman  <kalle.vahlman@movial.com>
    213
  • trunk/GNUmakefile.am

    r38215 r38834  
    310310        WebKit/gtk/webkit/webkitwebinspector.h \
    311311        WebKit/gtk/webkit/webkitwebsettings.h \
     312        WebKit/gtk/webkit/webkitwebwindowfeatures.h \
    312313        WebKit/gtk/webkit/webkitwebview.h
    313314
     
    342343        WebKit/gtk/webkit/webkitwebinspector.cpp \
    343344        WebKit/gtk/webkit/webkitwebsettings.cpp \
    344         WebKit/gtk/webkit/webkitwebview.cpp
     345        WebKit/gtk/webkit/webkitwebview.cpp \
     346        WebKit/gtk/webkit/webkitwebwindowfeatures.cpp
    345347
    346348webkitgtk_cppflags += \
  • trunk/WebKit/gtk/ChangeLog

    r38738 r38834  
     12008-11-28  Gustavo Noronha Silva  <gns@gnome.org>
     2
     3        Reviewed and slightly modified by Holger Freyther.
     4
     5        https://bugs.webkit.org/show_bug.cgi?id=19130
     6
     7        ChromeClient::createWindow and friends need to be implemented
     8
     9        Code from Gustavo Noronha and Marco Barisione
     10        <marco.barisione@collabora.co.uk> in this change set.
     11
     12        Implemented all the ChromeClient interfaces needed to have new
     13        window creation functioning and exposed to client code. We
     14        implemented a mirror GObject to the WindowFeatures object provided
     15        by WebCore.
     16
     17        * WebCoreSupport/ChromeClientGtk.cpp:
     18        (WebKit::ChromeClient::windowRect):
     19        (WebKit::ChromeClient::setWindowRect):
     20        (WebKit::ChromeClient::unfocus):
     21        (WebKit::ChromeClient::createWindow):
     22        (WebKit::ChromeClient::show):
     23        (WebKit::ChromeClient::setToolbarsVisible):
     24        (WebKit::ChromeClient::toolbarsVisible):
     25        (WebKit::ChromeClient::setStatusbarVisible):
     26        (WebKit::ChromeClient::statusbarVisible):
     27        (WebKit::ChromeClient::setScrollbarsVisible):
     28        (WebKit::ChromeClient::scrollbarsVisible):
     29        (WebKit::ChromeClient::setMenubarVisible):
     30        (WebKit::ChromeClient::menubarVisible):
     31        (WebKit::ChromeClient::setResizable):
     32        * WebCoreSupport/FrameLoaderClientGtk.cpp:
     33        (WebKit::FrameLoaderClient::dispatchDecidePolicyForNewWindowAction):
     34        (WebKit::FrameLoaderClient::dispatchShow):
     35        (WebKit::FrameLoaderClient::dispatchCreatePage):
     36        * webkit/webkit.h:
     37        * webkit/webkitdefines.h:
     38        * webkit/webkitprivate.h:
     39        * webkit/webkitwebview.cpp:
     40        * webkit/webkitwebview.h:
     41        * webkit/webkitwebwindowfeatures.cpp: Added.
     42        (_WebKitWebWindowFeaturesPrivate::webkit_web_window_features_class_init):
     43        (_WebKitWebWindowFeaturesPrivate::webkit_web_window_features_init):
     44        (_WebKitWebWindowFeaturesPrivate::webkit_web_window_features_finalize):
     45        (_WebKitWebWindowFeaturesPrivate::webkit_web_window_features_set_property):
     46        (_WebKitWebWindowFeaturesPrivate::webkit_web_window_features_get_property):
     47        (_WebKitWebWindowFeaturesPrivate::webkit_web_window_features_new):
     48        (_WebKitWebWindowFeaturesPrivate::webkit_web_window_features_new_from_core_features):
     49        (_WebKitWebWindowFeaturesPrivate::webkit_web_window_features_equal):
     50        * webkit/webkitwebwindowfeatures.h: Added.
     51
    1522008-11-24  Darin Fisher  <darin@chromium.org>
    253
  • trunk/WebKit/gtk/WebCoreSupport/ChromeClientGtk.cpp

    r38179 r38834  
    44 * Copyright (C) 2008 Nuanti Ltd.
    55 * Copyright (C) 2008 Alp Toker <alp@atoker.com>
     6 * Copyright (C) 2008 Gustavo Noronha Silva <gns@gnome.org>
    67 *
    78 *  This library is free software; you can redistribute it and/or
     
    2627#include "FileChooser.h"
    2728#include "FloatRect.h"
     29#include "FrameLoadRequest.h"
    2830#include "IntRect.h"
    2931#include "PlatformString.h"
     
    3234#include "KURL.h"
    3335#include "webkitwebview.h"
     36#include "webkitnetworkrequest.h"
    3437#include "webkitprivate.h"
    3538#include "NotImplemented.h"
     
    6265        return FloatRect();
    6366    GtkWidget* window = gtk_widget_get_toplevel(GTK_WIDGET(m_webView));
    64     if (window) {
     67    if (GTK_WIDGET_TOPLEVEL(window)) {
    6568        gint left, top, width, height;
    6669        gtk_window_get_position(GTK_WINDOW(window), &left, &top);
     
    7174}
    7275
    73 void ChromeClient::setWindowRect(const FloatRect& r)
    74 {
    75     notImplemented();
     76void ChromeClient::setWindowRect(const FloatRect& rect)
     77{
     78    if (!m_webView)
     79        return;
     80
     81    IntRect intrect = IntRect(rect);
     82    WebKitWebWindowFeatures* webWindowFeatures = webkit_web_view_get_window_features(m_webView);
     83
     84    g_object_set(G_OBJECT(webWindowFeatures),
     85                 "x", intrect.x(),
     86                 "y", intrect.y(),
     87                 "width", intrect.width(),
     88                 "height", intrect.height(),
     89                 NULL);
    7690}
    7791
     
    102116        return;
    103117    GtkWidget* window = gtk_widget_get_toplevel(GTK_WIDGET(m_webView));
    104     if (window)
     118    if (GTK_WIDGET_TOPLEVEL(window))
    105119        gtk_window_set_focus(GTK_WINDOW(window), NULL);
    106120}
    107121
    108 Page* ChromeClient::createWindow(Frame*, const FrameLoadRequest&, const WindowFeatures& features)
    109 {
    110     if (features.dialog) {
    111         notImplemented();
     122Page* ChromeClient::createWindow(Frame* frame, const FrameLoadRequest& frameLoadRequest, const WindowFeatures& coreFeatures)
     123{
     124    WebKitWebView* webView = 0;
     125
     126    g_signal_emit_by_name(m_webView, "create-web-view", kit(frame), &webView);
     127
     128    if (!webView)
    112129        return 0;
    113     } else {
    114         /* TODO: FrameLoadRequest is not used */
    115         WebKitWebView* webView = WEBKIT_WEB_VIEW_GET_CLASS(m_webView)->create_web_view(m_webView);
    116         if (!webView)
    117             return 0;
    118 
    119         WebKitWebViewPrivate* privateData = WEBKIT_WEB_VIEW_GET_PRIVATE(webView);
    120         return privateData->corePage;
    121     }
     130
     131    WebKitWebWindowFeatures* webWindowFeatures = webkit_web_window_features_new_from_core_features(coreFeatures);
     132    webkit_web_view_set_window_features(webView, webWindowFeatures);
     133    g_object_unref(G_OBJECT(webWindowFeatures));
     134
     135    if (!frameLoadRequest.isEmpty())
     136        webkit_web_view_open(webView, frameLoadRequest.resourceRequest().url().string().utf8().data());
     137
     138    return core(webView);
    122139}
    123140
    124141void ChromeClient::show()
    125142{
    126     notImplemented();
     143    if (!m_webView)
     144        return;
     145
     146    webkit_web_view_notify_ready(m_webView);
    127147}
    128148
     
    138158}
    139159
    140 void ChromeClient::setToolbarsVisible(bool)
    141 {
    142     notImplemented();
     160void ChromeClient::setToolbarsVisible(bool visible)
     161{
     162    if (!m_webView)
     163        return;
     164
     165    WebKitWebWindowFeatures* webWindowFeatures = webkit_web_view_get_window_features(m_webView);
     166
     167    g_object_set(G_OBJECT(webWindowFeatures), "toolbar-visible", visible, NULL);
    143168}
    144169
    145170bool ChromeClient::toolbarsVisible()
    146171{
    147     notImplemented();
    148     return false;
    149 }
    150 
    151 void ChromeClient::setStatusbarVisible(bool)
    152 {
    153     notImplemented();
     172    if (!m_webView)
     173        return false;
     174
     175    WebKitWebWindowFeatures* webWindowFeatures = webkit_web_view_get_window_features(m_webView);
     176    gboolean visible;
     177
     178    g_object_get(G_OBJECT(webWindowFeatures), "toolbar-visible", &visible, NULL);
     179    return visible;
     180}
     181
     182void ChromeClient::setStatusbarVisible(bool visible)
     183{
     184    if (!m_webView)
     185        return;
     186
     187    WebKitWebWindowFeatures* webWindowFeatures = webkit_web_view_get_window_features(m_webView);
     188
     189    g_object_set(G_OBJECT(webWindowFeatures), "statusbar-visible", visible, NULL);
    154190}
    155191
    156192bool ChromeClient::statusbarVisible()
    157193{
    158     notImplemented();
    159     return false;
    160 }
    161 
    162 void ChromeClient::setScrollbarsVisible(bool)
    163 {
    164     notImplemented();
     194    if (!m_webView)
     195        return false;
     196
     197    WebKitWebWindowFeatures* webWindowFeatures = webkit_web_view_get_window_features(m_webView);
     198    gboolean visible;
     199
     200    g_object_get(G_OBJECT(webWindowFeatures), "statusbar-visible", &visible, NULL);
     201    return visible;
     202}
     203
     204void ChromeClient::setScrollbarsVisible(bool visible)
     205{
     206    if (!m_webView)
     207        return;
     208
     209    WebKitWebWindowFeatures* webWindowFeatures = webkit_web_view_get_window_features(m_webView);
     210
     211    g_object_set(G_OBJECT(webWindowFeatures), "scrollbar-visible", visible, NULL);
    165212}
    166213
    167214bool ChromeClient::scrollbarsVisible() {
    168     notImplemented();
    169     return false;
    170 }
    171 
    172 void ChromeClient::setMenubarVisible(bool)
    173 {
    174     notImplemented();
     215    if (!m_webView)
     216        return false;
     217
     218    WebKitWebWindowFeatures* webWindowFeatures = webkit_web_view_get_window_features(m_webView);
     219    gboolean visible;
     220
     221    g_object_get(G_OBJECT(webWindowFeatures), "scrollbar-visible", &visible, NULL);
     222    return visible;
     223}
     224
     225void ChromeClient::setMenubarVisible(bool visible)
     226{
     227    if (!m_webView)
     228        return;
     229
     230    WebKitWebWindowFeatures* webWindowFeatures = webkit_web_view_get_window_features(m_webView);
     231
     232    g_object_set(G_OBJECT(webWindowFeatures), "menubar-visible", visible, NULL);
    175233}
    176234
    177235bool ChromeClient::menubarVisible()
    178236{
    179     notImplemented();
    180     return false;
     237    if (!m_webView)
     238        return false;
     239
     240    WebKitWebWindowFeatures* webWindowFeatures = webkit_web_view_get_window_features(m_webView);
     241    gboolean visible;
     242
     243    g_object_get(G_OBJECT(webWindowFeatures), "menubar-visible", &visible, NULL);
     244    return visible;
    181245}
    182246
    183247void ChromeClient::setResizable(bool)
    184248{
    185     notImplemented();
     249    // Ignored for now
    186250}
    187251
  • trunk/WebKit/gtk/WebCoreSupport/FrameLoaderClientGtk.cpp

    r38732 r38834  
    4545#include "ScriptController.h"
    4646#include "webkitwebview.h"
     47#include "webkitnetworkrequest.h"
    4748#include "webkitwebframe.h"
    4849#include "webkitprivate.h"
     
    259260    // FIXME: I think Qt version marshals this to another thread so when we
    260261    // have multi-threaded download, we might need to do the same
    261     (core(m_frame)->loader()->*policyFunction)(PolicyIgnore);
     262    (core(m_frame)->loader()->*policyFunction)(PolicyUse);
    262263}
    263264
     
    544545void FrameLoaderClient::dispatchShow()
    545546{
    546     notImplemented();
     547    WebKitWebView* webView = getViewFromFrame(m_frame);
     548    webkit_web_view_notify_ready(webView);
    547549}
    548550
     
    717719Frame* FrameLoaderClient::dispatchCreatePage()
    718720{
    719     notImplemented();
    720     return 0;
     721    WebKitWebView* webView = getViewFromFrame(m_frame);
     722    WebKitWebView* newWebView = 0;
     723
     724    g_signal_emit_by_name(webView, "create-web-view", m_frame, &newWebView);
     725
     726    if (!newWebView)
     727        return 0;
     728
     729    WebKitWebViewPrivate* privateData = WEBKIT_WEB_VIEW_GET_PRIVATE(newWebView);
     730    return core(privateData->mainFrame);
    721731}
    722732
  • trunk/WebKit/gtk/docs/webkitgtk-docs.sgml

    r38696 r38834  
    2121    <xi:include href="xml/webkitnetworkrequest.xml"/>
    2222    <xi:include href="xml/webkitwebinspector.xml"/>
     23    <xi:include href="xml/webkitwebwindowfeatures.xml"/>
    2324  </chapter>
    2425
  • trunk/WebKit/gtk/docs/webkitgtk-sections.txt

    r38696 r38834  
    202202webkit_web_view_zoom_in
    203203webkit_web_view_zoom_out
     204webkit_web_view_get_window_features
     205webkit_web_view_set_window_features
    204206<SUBSECTION Standard>
    205207WEBKIT_WEB_VIEW
     
    215217WebKitWebViewClass
    216218WEBKIT_WEB_VIEW_GET_PRIVATE
     219</SECTION>
     220
     221<SECTION>
     222<FILE>webkitwebwindowfeatures</FILE>
     223<TITLE>WebKitWebWindowFeatures</TITLE>
     224WebKitWebWindowFeatures
     225webkit_web_window_features_equal
     226webkit_web_window_features_new
     227<SUBSECTION Standard>
     228WEBKIT_IS_WEB_WINDOW_FEATURES
     229WEBKIT_IS_WEB_WINDOW_FEATURES_CLASS
     230WEBKIT_TYPE_WEB_WINDOW_FEATURES
     231WEBKIT_WEB_WINDOW_FEATURES
     232WEBKIT_WEB_WINDOW_FEATURES_CLASS
     233WEBKIT_WEB_WINDOW_FEATURES_GET_CLASS
     234<SUBSECTION Private>
     235webkit_web_window_features_get_type
     236WebKitWebWindowFeatures
     237WebKitWebWindowFeaturesClass
     238WebKitWebWindowFeaturesPrivate
    217239</SECTION>
    218240
  • trunk/WebKit/gtk/docs/webkitgtk.types

    r38696 r38834  
    99webkit_navigation_response_get_type
    1010webkit_web_view_target_info_get_type
     11webkit_web_window_features_get_type
    1112
  • trunk/WebKit/gtk/webkit/webkit.h

    r37982 r38834  
    2727#include <webkit/webkitwebsettings.h>
    2828#include <webkit/webkitwebinspector.h>
     29#include <webkit/webkitwebwindowfeatures.h>
    2930#include <webkit/webkitwebview.h>
    3031#include <webkit/webkitwebbackforwardlist.h>
  • trunk/WebKit/gtk/webkit/webkitdefines.h

    r37982 r38834  
    5959typedef struct _WebKitWebInspectorClass WebKitWebInspectorClass;
    6060
     61typedef struct _WebKitWebWindowFeatures WebKitWebWindowFeatures;
     62typedef struct _WebKitWebWindowFeaturesClass WebKitWebWindowFeaturesClass;
     63
    6164typedef struct _WebKitWebView WebKitWebView;
    6265typedef struct _WebKitWebViewClass WebKitWebViewClass;
  • trunk/WebKit/gtk/webkit/webkitprivate.h

    r38710 r38834  
    3131#include <webkit/webkitwebframe.h>
    3232#include <webkit/webkitwebsettings.h>
     33#include <webkit/webkitwebwindowfeatures.h>
    3334#include <webkit/webkitwebbackforwardlist.h>
    3435
     
    4041#include "InspectorClientGtk.h"
    4142#include "FrameLoaderClient.h"
     43#include "WindowFeatures.h"
    4244
    4345#include <glib.h>
     
    7072        WebKitWebSettings* webSettings;
    7173        WebKitWebInspector* webInspector;
     74        WebKitWebWindowFeatures* webWindowFeatures;
    7275
    7376        WebKitWebFrame* mainFrame;
     
    122125    webkit_web_inspector_set_inspected_uri(WebKitWebInspector* web_inspector, const gchar* inspected_uri);
    123126
     127    WebKitWebWindowFeatures*
     128    webkit_web_window_features_new_from_core_features (const WebCore::WindowFeatures& features);
     129
     130    void
     131    webkit_web_view_notify_ready (WebKitWebView* web_view);
     132
    124133    // FIXME: Move these to webkitwebframe.h once their API has been discussed.
    125134
  • trunk/WebKit/gtk/webkit/webkitwebview.cpp

    r38695 r38834  
    55 *  Copyright (C) 2007, 2008 Alp Toker <alp@atoker.com>
    66 *  Copyright (C) 2008 Jan Alonzo <jmalonzo@unpluggable.com>
     7 *  Copyright (C) 2008 Gustavo Noronha Silva <gns@gnome.org>
    78 *  Copyright (C) 2008 Nuanti Ltd.
    89 *  Copyright (C) 2008 Collabora Ltd.
     
    7576    /* normal signals */
    7677    NAVIGATION_REQUESTED,
     78    CREATE_WEB_VIEW,
     79    WEB_VIEW_READY,
    7780    WINDOW_OBJECT_CLEARED,
    7881    LOAD_STARTED,
     
    105108    PROP_SETTINGS,
    106109    PROP_WEB_INSPECTOR,
     110    PROP_WINDOW_FEATURES,
    107111    PROP_TRANSPARENT,
    108112    PROP_ZOOM_LEVEL,
     
    247251        g_value_set_object(value, webkit_web_view_get_inspector(webView));
    248252        break;
     253    case PROP_WINDOW_FEATURES:
     254        g_value_set_object(value, webkit_web_view_get_window_features(webView));
     255        break;
    249256    case PROP_TRANSPARENT:
    250257        g_value_set_boolean(value, webkit_web_view_get_transparent(webView));
     
    271278    case PROP_SETTINGS:
    272279        webkit_web_view_set_settings(webView, WEBKIT_WEB_SETTINGS(g_value_get_object(value)));
     280        break;
     281    case PROP_WINDOW_FEATURES:
     282        webkit_web_view_set_window_features(webView, WEBKIT_WEB_WINDOW_FEATURES(g_value_get_object(value)));
    273283        break;
    274284    case PROP_TRANSPARENT:
     
    606616}
    607617
    608 static WebKitWebView* webkit_web_view_real_create_web_view(WebKitWebView*)
    609 {
    610     notImplemented();
     618static WebKitWebView* webkit_web_view_real_create_web_view(WebKitWebView*, WebKitWebFrame*)
     619{
    611620    return 0;
     621}
     622
     623static gboolean webkit_web_view_real_web_view_ready(WebKitWebView*)
     624{
     625    return FALSE;
    612626}
    613627
     
    771785    g_object_unref(priv->webSettings);
    772786    g_object_unref(priv->webInspector);
     787    g_object_unref(priv->webWindowFeatures);
    773788    g_object_unref(priv->mainFrame);
    774789    g_object_unref(priv->imContext);
     
    780795}
    781796
     797static gboolean webkit_create_web_view_request_handled(GSignalInvocationHint* ihint, GValue* returnAccu, const GValue* handlerReturn, gpointer dummy)
     798{
     799  gboolean continueEmission = TRUE;
     800  gpointer newWebView = g_value_get_object(handlerReturn);
     801  g_value_set_object(returnAccu, newWebView);
     802
     803  if (newWebView)
     804      continueEmission = FALSE;
     805
     806  return continueEmission;
     807}
     808
    782809static gboolean webkit_navigation_request_handled(GSignalInvocationHint* ihint, GValue* returnAccu, const GValue* handlerReturn, gpointer dummy)
    783810{
     
    821848     * Signals
    822849     */
     850
     851    /**
     852     * WebKitWebView::create-web-view:
     853     * @web_view: the object on which the signal is emitted
     854     * @frame: the #WebKitWebFrame
     855     * @return: a newly allocated #WebKitWebView or %NULL
     856     *
     857     * Emitted when the creation of a new window is requested.
     858     * If this signal is handled the signal handler should return the
     859     * newly created #WebKitWebView.
     860     *
     861     * The new #WebKitWebView should not be displayed to the user
     862     * until the #WebKitWebView::web-view-ready signal is emitted.
     863     *
     864     * The signal handlers should not try to deal with the reference
     865     * count for the new #WebKitWebView. The widget to which the
     866     * widget is added will handle that.
     867     *
     868     * Since 1.0.3
     869     */
     870    webkit_web_view_signals[CREATE_WEB_VIEW] = g_signal_new("create-web-view",
     871            G_TYPE_FROM_CLASS(webViewClass),
     872            (GSignalFlags)(G_SIGNAL_RUN_LAST | G_SIGNAL_ACTION),
     873            G_STRUCT_OFFSET (WebKitWebViewClass, create_web_view),
     874            webkit_create_web_view_request_handled,
     875            NULL,
     876            webkit_marshal_OBJECT__OBJECT,
     877            WEBKIT_TYPE_WEB_VIEW , 1,
     878            WEBKIT_TYPE_WEB_FRAME);
     879
     880    /**
     881     * WebKitWebView::web-view-ready:
     882     * @web_view: the object on which the signal is emitted
     883     * @return: %TRUE to stop other handlers from being invoked for
     884     * the event, %FALSE to propagate the event further
     885     *
     886     * Emitted after #WebKitWebView::create-web-view when the new #WebKitWebView
     887     * should be displayed to the user. When this signal is emitted
     888     * all the information about how the window should look, including
     889     * size, position, whether the location, status and scroll bars
     890     * should be displayed, is already set on the
     891     * #WebKitWebWindowFeatures object contained by the #WebKitWebView.
     892     *
     893     * Notice that some of that information may change during the life
     894     * time of the window, so you may want to connect to the ::notify
     895     * signal of the #WebKitWebWindowFeatures object to handle those.
     896     *
     897     * Since 1.0.3
     898     */
     899    webkit_web_view_signals[WEB_VIEW_READY] = g_signal_new("web-view-ready",
     900            G_TYPE_FROM_CLASS(webViewClass),
     901            (GSignalFlags)(G_SIGNAL_RUN_LAST),
     902            G_STRUCT_OFFSET (WebKitWebViewClass, web_view_ready),
     903            g_signal_accumulator_true_handled,
     904            NULL,
     905            webkit_marshal_BOOLEAN__VOID,
     906            G_TYPE_BOOLEAN, 0);
    823907
    824908    webkit_web_view_signals[NAVIGATION_REQUESTED] = g_signal_new("navigation-requested",
     
    11571241     */
    11581242    webViewClass->create_web_view = webkit_web_view_real_create_web_view;
     1243    webViewClass->web_view_ready = webkit_web_view_real_web_view_ready;
    11591244    webViewClass->navigation_requested = webkit_web_view_real_navigation_requested;
    11601245    webViewClass->window_object_cleared = webkit_web_view_real_window_object_cleared;
     
    12861371                                                        WEBKIT_TYPE_WEB_INSPECTOR,
    12871372                                                        WEBKIT_PARAM_READABLE));
     1373
     1374    /**
     1375    * WebKitWebView:window-features:
     1376    *
     1377    * An associated WebKitWebWindowFeatures instance.
     1378    *
     1379    * Since: 1.0.3
     1380    */
     1381    g_object_class_install_property(objectClass, PROP_WINDOW_FEATURES,
     1382                                    g_param_spec_object("window-features",
     1383                                                        "Window Features",
     1384                                                        "An associated WebKitWebWindowFeatures instance",
     1385                                                        WEBKIT_TYPE_WEB_WINDOW_FEATURES,
     1386                                                        WEBKIT_PARAM_READWRITE));
    12881387
    12891388    g_object_class_install_property(objectClass, PROP_EDITABLE,
     
    15411640    g_signal_connect(webView, "screen-changed", G_CALLBACK(webkit_web_view_screen_changed), NULL);
    15421641    g_signal_connect(priv->webSettings, "notify", G_CALLBACK(webkit_web_view_settings_notify), webView);
     1642
     1643    priv->webWindowFeatures = webkit_web_window_features_new();
    15431644}
    15441645
     
    15491650    return GTK_WIDGET(webView);
    15501651}
     1652
     1653// for internal use only
     1654void webkit_web_view_notify_ready(WebKitWebView* webView)
     1655{
     1656    g_return_if_fail(WEBKIT_IS_WEB_VIEW(webView));
     1657
     1658    gboolean isHandled = FALSE;
     1659    g_signal_emit(webView, webkit_web_view_signals[WEB_VIEW_READY], 0, &isHandled);
     1660}
     1661
    15511662
    15521663void webkit_web_view_set_settings(WebKitWebView* webView, WebKitWebSettings* webSettings)
     
    15951706    WebKitWebViewPrivate* priv = webView->priv;
    15961707    return priv->webInspector;
     1708}
     1709
     1710/**
     1711 * webkit_web_view_set_window_features
     1712 * @web_view: a #WebKitWebView
     1713 * @window_features: a #WebKitWebWindowFeatures
     1714 *
     1715 * This will set how the window containing the #WebKitWebView should
     1716 * look and behave. Applications may want to monitor this property and
     1717 * apply the settings it carries to the window holding the relevant
     1718 * #WebKitWebView.
     1719 *
     1720 * Since: 1.0.3
     1721 */
     1722void webkit_web_view_set_window_features(WebKitWebView* webView, WebKitWebWindowFeatures* webWindowFeatures)
     1723{
     1724    g_return_if_fail(WEBKIT_IS_WEB_VIEW(webView));
     1725    g_return_if_fail(WEBKIT_IS_WEB_WINDOW_FEATURES(webWindowFeatures));
     1726
     1727    WebKitWebViewPrivate* priv = webView->priv;
     1728
     1729    if(webkit_web_window_features_equal(priv->webWindowFeatures, webWindowFeatures))
     1730      return;
     1731
     1732    g_object_unref(priv->webWindowFeatures);
     1733    g_object_ref(webWindowFeatures);
     1734    priv->webWindowFeatures = webWindowFeatures;
     1735}
     1736
     1737/**
     1738 * webkit_web_view_get_window_features
     1739 * @web_view: a #WebKitWebView
     1740 *
     1741 * Returns the instance of #WebKitWebWindowFeatures held by the given
     1742 * #WebKitWebView.
     1743 *
     1744 * Return value: the #WebKitWebWindowFeatures
     1745 *
     1746 * Since: 1.0.3
     1747 */
     1748WebKitWebWindowFeatures* webkit_web_view_get_window_features(WebKitWebView* webView)
     1749{
     1750    g_return_val_if_fail(WEBKIT_IS_WEB_VIEW(webView), NULL);
     1751
     1752    WebKitWebViewPrivate* priv = webView->priv;
     1753    return priv->webWindowFeatures;
    15971754}
    15981755
  • trunk/WebKit/gtk/webkit/webkitwebview.h

    r38695 r38834  
    6666    /*
    6767     * default handler/virtual methods
    68      * DISCUSS: create_web_view needs a request and should we make this a signal with default handler? this would
    69      * require someone doing a g_signal_stop_emission_by_name
    70      * WebUIDelegate has nothing for create_frame, WebPolicyDelegate as well...
    7168     */
    72     WebKitWebView            * (* create_web_view)        (WebKitWebView* web_view);
     69    WebKitWebView            * (* create_web_view)        (WebKitWebView        *web_view,
     70                                                           WebKitWebFrame       *web_frame);
     71
     72    gboolean                   (* web_view_ready)          (WebKitWebView* web_view);
    7373
    7474    /*
     
    253253webkit_web_view_get_inspector                   (WebKitWebView        *web_view);
    254254
     255WEBKIT_API void
     256webkit_web_view_set_window_features             (WebKitWebView        *web_view,
     257                                                 WebKitWebWindowFeatures *window_features);
     258
     259WEBKIT_API WebKitWebWindowFeatures*
     260webkit_web_view_get_window_features             (WebKitWebView        *web_view);
     261
    255262WEBKIT_API gboolean
    256263webkit_web_view_get_transparent                 (WebKitWebView        *web_view);
Note: See TracChangeset for help on using the changeset viewer.