void ChromeClient::enterFullScreenForElement(WebCore::Element* element)
{
    gboolean returnValue;
    GRefPtr<WebKitDOMHTMLElement> kitElement(adoptGRef(kit(reinterpret_cast<HTMLElement*>(element))));
    g_signal_emit_by_name(m_webView, "entering-fullscreen", kitElement.get(), &returnValue);
    if (returnValue)
        return;

#if ENABLE(VIDEO) && USE(NATIVE_FULLSCREEN_VIDEO)
    if (element && element->isMediaElement()) {
        HTMLMediaElement* mediaElement = toHTMLMediaElement(element);
        if (mediaElement->player() && mediaElement->player()->canEnterFullscreen()) {
            element->document()->webkitWillEnterFullScreenForElement(element);
            mediaElement->player()->enterFullscreen();
            m_fullScreenElement = element;
            element->document()->webkitDidEnterFullScreenForElement(element);
        }
        return;
    }
#endif

    GtkWidget* window = gtk_widget_get_toplevel(GTK_WIDGET(m_webView));
    if (!widgetIsOnscreenToplevelWindow(window))
        return;

    g_signal_connect(window, "key-press-event", G_CALLBACK(onFullscreenGtkKeyPressEvent), this);

    m_fullScreenElement = element;

    element->document()->webkitWillEnterFullScreenForElement(element);
    m_adjustmentWatcher.disableAllScrollbars();
    gtk_window_fullscreen(GTK_WINDOW(window));
    element->document()->webkitDidEnterFullScreenForElement(element);
}
Exemplo n.º 2
0
bool EditorClient::shouldShowDeleteInterface(HTMLElement* element)
{
    gboolean accept = TRUE;
    GRefPtr<WebKitDOMHTMLElement> kitElement(adoptGRef(kit(element)));
    g_signal_emit_by_name(m_webView, "should-show-delete-interface-for-element", kitElement.get(), &accept);
    return accept;
}
void ChromeClient::exitFullScreenForElement(WebCore::Element*)
{
    // The element passed into this function is not reliable, i.e. it could
    // be null. In addition the parameter may be disappearing in the future.
    // So we use the reference to the element we saved above.
    ASSERT(m_fullScreenElement);

    gboolean returnValue;
    GRefPtr<WebKitDOMHTMLElement> kitElement(adoptGRef(kit(reinterpret_cast<HTMLElement*>(m_fullScreenElement.get()))));
    g_signal_emit_by_name(m_webView, "leaving-fullscreen", kitElement.get(), &returnValue);
    if (returnValue)
        return;

#if ENABLE(VIDEO) && USE(NATIVE_FULLSCREEN_VIDEO)
    if (m_fullScreenElement && m_fullScreenElement->isMediaElement()) {
        m_fullScreenElement->document()->webkitWillExitFullScreenForElement(m_fullScreenElement.get());
        HTMLMediaElement* mediaElement = toHTMLMediaElement(m_fullScreenElement.get());
        if (mediaElement->player()) {
            mediaElement->player()->exitFullscreen();
            m_fullScreenElement->document()->webkitDidExitFullScreenForElement(m_fullScreenElement.get());
            m_fullScreenElement.clear();
        }
        return;
    }
#endif

    GtkWidget* window = gtk_widget_get_toplevel(GTK_WIDGET(m_webView));
    ASSERT(widgetIsOnscreenToplevelWindow(window));
    g_signal_handlers_disconnect_by_func(window, reinterpret_cast<void*>(onFullscreenGtkKeyPressEvent), this);

    m_fullScreenElement->document()->webkitWillExitFullScreenForElement(m_fullScreenElement.get());
    gtk_window_unfullscreen(GTK_WINDOW(window));
    m_adjustmentWatcher.enableAllScrollbars();
    m_fullScreenElement->document()->webkitDidExitFullScreenForElement(m_fullScreenElement.get());
    m_fullScreenElement.clear();
}