summaryrefslogtreecommitdiffstats
path: root/WebKit/gtk/webkit
diff options
context:
space:
mode:
Diffstat (limited to 'WebKit/gtk/webkit')
-rw-r--r--WebKit/gtk/webkit/webkithittestresult.cpp8
-rw-r--r--WebKit/gtk/webkit/webkitprivate.cpp3
-rw-r--r--WebKit/gtk/webkit/webkitprivate.h2
-rw-r--r--WebKit/gtk/webkit/webkitwebdatasource.cpp2
-rw-r--r--WebKit/gtk/webkit/webkitwebframe.cpp11
-rw-r--r--WebKit/gtk/webkit/webkitwebinspector.cpp18
-rw-r--r--WebKit/gtk/webkit/webkitwebinspector.h4
-rw-r--r--WebKit/gtk/webkit/webkitwebview.cpp136
-rw-r--r--WebKit/gtk/webkit/webkitwebview.h15
9 files changed, 183 insertions, 16 deletions
diff --git a/WebKit/gtk/webkit/webkithittestresult.cpp b/WebKit/gtk/webkit/webkithittestresult.cpp
index 862d94a..931289e 100644
--- a/WebKit/gtk/webkit/webkithittestresult.cpp
+++ b/WebKit/gtk/webkit/webkithittestresult.cpp
@@ -71,6 +71,13 @@ static void webkit_hit_test_result_finalize(GObject* object)
G_OBJECT_CLASS(webkit_hit_test_result_parent_class)->finalize(object);
}
+static void webkit_hit_test_result_dispose(GObject* object)
+{
+ g_object_unref(WEBKIT_HIT_TEST_RESULT(object)->priv->innerNode);
+
+ G_OBJECT_CLASS(webkit_hit_test_result_parent_class)->dispose(object);
+}
+
static void webkit_hit_test_result_get_property(GObject* object, guint propertyID, GValue* value, GParamSpec* pspec)
{
WebKitHitTestResult* web_hit_test_result = WEBKIT_HIT_TEST_RESULT(object);
@@ -131,6 +138,7 @@ static void webkit_hit_test_result_class_init(WebKitHitTestResultClass* webHitTe
GObjectClass* objectClass = G_OBJECT_CLASS(webHitTestResultClass);
objectClass->finalize = webkit_hit_test_result_finalize;
+ objectClass->dispose = webkit_hit_test_result_dispose;
objectClass->get_property = webkit_hit_test_result_get_property;
objectClass->set_property = webkit_hit_test_result_set_property;
diff --git a/WebKit/gtk/webkit/webkitprivate.cpp b/WebKit/gtk/webkit/webkitprivate.cpp
index aa3d3da..4ec6362 100644
--- a/WebKit/gtk/webkit/webkitprivate.cpp
+++ b/WebKit/gtk/webkit/webkitprivate.cpp
@@ -24,6 +24,7 @@
#include "ApplicationCacheStorage.h"
#include "Chrome.h"
#include "ChromeClientGtk.h"
+#include "Element.h"
#include "Frame.h"
#include "FrameLoader.h"
#include "FrameLoaderClientGtk.h"
@@ -173,7 +174,7 @@ WebKitHitTestResult* kit(const WebCore::HitTestResult& result)
context |= WEBKIT_HIT_TEST_RESULT_CONTEXT_EDITABLE;
if (result.innerNonSharedNode())
- node = static_cast<WebKitDOMNode*>(kit(result.innerNonSharedNode()));
+ node = kit(result.innerNonSharedNode());
return WEBKIT_HIT_TEST_RESULT(g_object_new(WEBKIT_TYPE_HIT_TEST_RESULT,
"link-uri", linkURI.get(),
diff --git a/WebKit/gtk/webkit/webkitprivate.h b/WebKit/gtk/webkit/webkitprivate.h
index 7385677..e090ed4 100644
--- a/WebKit/gtk/webkit/webkitprivate.h
+++ b/WebKit/gtk/webkit/webkitprivate.h
@@ -55,6 +55,7 @@
#include "HistoryItem.h"
#include "InspectorClientGtk.h"
#include "IntPoint.h"
+#include "IntRect.h"
#include "FrameLoaderClient.h"
#include "FullscreenVideoController.h"
#include "Node.h"
@@ -181,6 +182,7 @@ extern "C" {
CString mainResourceIdentifier;
PlatformRefPtr<GHashTable> subResources;
CString tooltipText;
+ WebCore::IntRect tooltipArea;
int currentClickCount;
WebCore::IntPoint previousClickPoint;
diff --git a/WebKit/gtk/webkit/webkitwebdatasource.cpp b/WebKit/gtk/webkit/webkitwebdatasource.cpp
index 38c9c48..3673a99 100644
--- a/WebKit/gtk/webkit/webkitwebdatasource.cpp
+++ b/WebKit/gtk/webkit/webkitwebdatasource.cpp
@@ -318,7 +318,7 @@ G_CONST_RETURN gchar* webkit_web_data_source_get_encoding(WebKitWebDataSource* w
*/
gboolean webkit_web_data_source_is_loading(WebKitWebDataSource* webDataSource)
{
- g_return_val_if_fail(WEBKIT_IS_WEB_DATA_SOURCE(webDataSource), NULL);
+ g_return_val_if_fail(WEBKIT_IS_WEB_DATA_SOURCE(webDataSource), FALSE);
WebKitWebDataSourcePrivate* priv = webDataSource->priv;
diff --git a/WebKit/gtk/webkit/webkitwebframe.cpp b/WebKit/gtk/webkit/webkitwebframe.cpp
index 63a2413..0e0c3c6 100644
--- a/WebKit/gtk/webkit/webkitwebframe.cpp
+++ b/WebKit/gtk/webkit/webkitwebframe.cpp
@@ -35,6 +35,7 @@
#include "AccessibilityObjectWrapperAtk.h"
#include "AnimationController.h"
#include "AXObjectCache.h"
+#include "DOMObjectCache.h"
#include "DocumentLoader.h"
#include "DocumentLoaderGtk.h"
#include "FrameLoader.h"
@@ -146,7 +147,10 @@ static void webkit_web_frame_get_property(GObject* object, guint prop_id, GValue
void webkit_web_frame_core_frame_gone(WebKitWebFrame* frame)
{
ASSERT(WEBKIT_IS_WEB_FRAME(frame));
- frame->priv->coreFrame = 0;
+ WebKitWebFramePrivate* priv = frame->priv;
+ if (priv->coreFrame)
+ DOMObjectCache::clearByFrame(priv->coreFrame);
+ priv->coreFrame = 0;
}
static WebKitWebDataSource* webkit_web_frame_get_data_source_from_core_loader(WebCore::DocumentLoader* loader)
@@ -160,6 +164,7 @@ static void webkit_web_frame_finalize(GObject* object)
WebKitWebFramePrivate* priv = frame->priv;
if (priv->coreFrame) {
+ DOMObjectCache::clearByFrame(priv->coreFrame);
priv->coreFrame->loader()->cancelAndClear();
priv->coreFrame = 0;
}
@@ -842,7 +847,7 @@ gchar* webkit_web_frame_counter_value_for_element_by_id(WebKitWebFrame* frame, c
*/
int webkit_web_frame_page_number_for_element_by_id(WebKitWebFrame* frame, const gchar* id, float pageWidth, float pageHeight)
{
- g_return_val_if_fail(WEBKIT_IS_WEB_FRAME(frame), NULL);
+ g_return_val_if_fail(WEBKIT_IS_WEB_FRAME(frame), 0);
Frame* coreFrame = core(frame);
if (!coreFrame)
@@ -864,7 +869,7 @@ int webkit_web_frame_page_number_for_element_by_id(WebKitWebFrame* frame, const
*/
int webkit_web_frame_number_of_pages(WebKitWebFrame* frame, float pageWidth, float pageHeight)
{
- g_return_val_if_fail(WEBKIT_IS_WEB_FRAME(frame), NULL);
+ g_return_val_if_fail(WEBKIT_IS_WEB_FRAME(frame), 0);
Frame* coreFrame = core(frame);
if (!coreFrame)
diff --git a/WebKit/gtk/webkit/webkitwebinspector.cpp b/WebKit/gtk/webkit/webkitwebinspector.cpp
index f207906..626df32 100644
--- a/WebKit/gtk/webkit/webkitwebinspector.cpp
+++ b/WebKit/gtk/webkit/webkitwebinspector.cpp
@@ -32,6 +32,7 @@
#include "Page.h"
#include "RenderLayer.h"
#include "RenderView.h"
+#include "webkit/WebKitDOMNodePrivate.h"
#include "webkitmarshal.h"
#include "webkitprivate.h"
@@ -499,6 +500,23 @@ void webkit_web_inspector_show(WebKitWebInspector* webInspector)
}
/**
+ * webkit_web_inspector_inspect_node:
+ * @web_inspector: the #WebKitWebInspector that will do the inspection
+ * @node: the #WebKitDOMNode to inspect
+ *
+ * Causes the Web Inspector to inspect the given node.
+ *
+ * Since: 1.3.7
+ */
+void webkit_web_inspector_inspect_node(WebKitWebInspector* webInspector, WebKitDOMNode* node)
+{
+ g_return_if_fail(WEBKIT_IS_WEB_INSPECTOR(webInspector));
+ g_return_if_fail(WEBKIT_DOM_IS_NODE(node));
+
+ webInspector->priv->page->inspectorController()->inspect(core(node));
+}
+
+/**
* webkit_web_inspector_inspect_coordinates:
* @web_inspector: the #WebKitWebInspector that will do the inspection
* @x: the X coordinate of the node to be inspected
diff --git a/WebKit/gtk/webkit/webkitwebinspector.h b/WebKit/gtk/webkit/webkitwebinspector.h
index bde4854..458e370 100644
--- a/WebKit/gtk/webkit/webkitwebinspector.h
+++ b/WebKit/gtk/webkit/webkitwebinspector.h
@@ -22,6 +22,7 @@
#include <glib-object.h>
+#include <webkit/webkitdomdefines.h>
#include <webkit/webkitdefines.h>
G_BEGIN_DECLS
@@ -61,6 +62,9 @@ WEBKIT_API const gchar*
webkit_web_inspector_get_inspected_uri(WebKitWebInspector* web_inspector);
WEBKIT_API void
+webkit_web_inspector_inspect_node(WebKitWebInspector* webInspector, WebKitDOMNode* node);
+
+WEBKIT_API void
webkit_web_inspector_inspect_coordinates(WebKitWebInspector* web_inspector, gdouble x, gdouble y);
WEBKIT_API void
diff --git a/WebKit/gtk/webkit/webkitwebview.cpp b/WebKit/gtk/webkit/webkitwebview.cpp
index 0dc19f3..90be935 100644
--- a/WebKit/gtk/webkit/webkitwebview.cpp
+++ b/WebKit/gtk/webkit/webkitwebview.cpp
@@ -173,6 +173,19 @@ enum {
GEOLOCATION_POLICY_DECISION_CANCELLED,
ONLOAD_EVENT,
FRAME_CREATED,
+
+ SHOULD_BEGIN_EDITING,
+ SHOULD_END_EDITING,
+ SHOULD_INSERT_NODE,
+ SHOULD_INSERT_TEXT,
+ SHOULD_DELETE_RANGE,
+ SHOULD_SHOW_DELETE_INTERFACE_FOR_ELEMENT,
+ SHOULD_CHANGE_SELECTED_RANGE,
+ SHOULD_APPLY_STYLE,
+ EDITING_BEGAN,
+ USER_CHANGED_CONTENTS,
+ EDITING_ENDED,
+
LAST_SIGNAL
};
@@ -1311,6 +1324,11 @@ static void webkit_web_view_real_paste_clipboard(WebKitWebView* webView)
frame->editor()->command("Paste").execute();
}
+static gboolean webkit_web_view_real_should_allow_editing_action(WebKitWebView*)
+{
+ return TRUE;
+}
+
static void webkit_web_view_dispose(GObject* object)
{
WebKitWebView* webView = WEBKIT_WEB_VIEW(object);
@@ -1636,13 +1654,58 @@ static gboolean webkit_web_view_query_tooltip(GtkWidget *widget, gint x, gint y,
{
WebKitWebViewPrivate* priv = WEBKIT_WEB_VIEW_GET_PRIVATE(widget);
+ if (keyboard_mode) {
+ WebKitWebView* webView = WEBKIT_WEB_VIEW(widget);
+
+ // Get the title of the current focused element.
+ Frame* coreFrame = core(webView)->focusController()->focusedOrMainFrame();
+ if (!coreFrame)
+ return FALSE;
+
+ Node* node = getFocusedNode(coreFrame);
+ if (!node)
+ return FALSE;
+
+ for (Node* titleNode = node; titleNode; titleNode = titleNode->parentNode()) {
+ if (titleNode->isElementNode()) {
+ String title = static_cast<Element*>(titleNode)->title();
+ if (!title.isEmpty()) {
+ if (FrameView* view = coreFrame->view()) {
+ GdkRectangle area = view->contentsToWindow(node->getRect());
+ gtk_tooltip_set_tip_area(tooltip, &area);
+ }
+ gtk_tooltip_set_text(tooltip, title.utf8().data());
+
+ return TRUE;
+ }
+ }
+ }
+
+ return FALSE;
+ }
+
if (priv->tooltipText.length() > 0) {
+ if (!keyboard_mode) {
+ if (!priv->tooltipArea.isEmpty()) {
+ GdkRectangle area = priv->tooltipArea;
+ gtk_tooltip_set_tip_area(tooltip, &area);
+ } else
+ gtk_tooltip_set_tip_area(tooltip, 0);
+ }
gtk_tooltip_set_text(tooltip, priv->tooltipText.data());
return TRUE;
}
return FALSE;
}
+
+static gboolean webkit_web_view_show_help(GtkWidget* widget, GtkWidgetHelpType help_type)
+{
+ if (help_type == GTK_WIDGET_HELP_TOOLTIP)
+ gtk_widget_set_has_tooltip(widget, TRUE);
+
+ return GTK_WIDGET_CLASS(webkit_web_view_parent_class)->show_help(widget, help_type);
+}
#endif
static GtkIMContext* webkit_web_view_get_im_context(WebKitWebView* webView)
@@ -2197,15 +2260,6 @@ static void webkit_web_view_class_init(WebKitWebViewClass* webViewClass)
G_TYPE_NONE, 1,
G_TYPE_STRING);
- webkit_web_view_signals[SELECTION_CHANGED] = g_signal_new("selection-changed",
- G_TYPE_FROM_CLASS(webViewClass),
- (GSignalFlags)G_SIGNAL_RUN_LAST,
- 0,
- NULL,
- NULL,
- g_cclosure_marshal_VOID__VOID,
- G_TYPE_NONE, 0);
-
/**
* WebKitWebView::console-message:
* @webView: the object on which the signal is emitted
@@ -2603,6 +2657,66 @@ static void webkit_web_view_class_init(WebKitWebViewClass* webViewClass)
G_TYPE_NONE, 1,
WEBKIT_TYPE_WEB_FRAME);
+ webkit_web_view_signals[SHOULD_BEGIN_EDITING] = g_signal_new("should-begin-editing",
+ G_TYPE_FROM_CLASS(webViewClass), static_cast<GSignalFlags>(G_SIGNAL_RUN_LAST | G_SIGNAL_ACTION),
+ G_STRUCT_OFFSET(WebKitWebViewClass, should_allow_editing_action), g_signal_accumulator_first_wins, 0,
+ webkit_marshal_BOOLEAN__OBJECT, G_TYPE_BOOLEAN, 1, WEBKIT_TYPE_DOM_RANGE);
+
+ webkit_web_view_signals[SHOULD_END_EDITING] = g_signal_new("should-end-editing", G_TYPE_FROM_CLASS(webViewClass),
+ static_cast<GSignalFlags>(G_SIGNAL_RUN_LAST | G_SIGNAL_ACTION),
+ G_STRUCT_OFFSET(WebKitWebViewClass, should_allow_editing_action), g_signal_accumulator_first_wins, 0,
+ webkit_marshal_BOOLEAN__OBJECT, G_TYPE_BOOLEAN, 1, WEBKIT_TYPE_DOM_RANGE);
+
+ webkit_web_view_signals[SHOULD_INSERT_NODE] = g_signal_new("should-insert-node", G_TYPE_FROM_CLASS(webViewClass),
+ static_cast<GSignalFlags>(G_SIGNAL_RUN_LAST | G_SIGNAL_ACTION),
+ G_STRUCT_OFFSET(WebKitWebViewClass, should_allow_editing_action), g_signal_accumulator_first_wins, 0,
+ webkit_marshal_BOOLEAN__OBJECT_OBJECT_ENUM, G_TYPE_BOOLEAN,
+ 3, WEBKIT_TYPE_DOM_NODE, WEBKIT_TYPE_DOM_RANGE, WEBKIT_TYPE_INSERT_ACTION);
+
+ webkit_web_view_signals[SHOULD_INSERT_TEXT] = g_signal_new("should-insert-text", G_TYPE_FROM_CLASS(webViewClass),
+ static_cast<GSignalFlags>(G_SIGNAL_RUN_LAST | G_SIGNAL_ACTION),
+ G_STRUCT_OFFSET(WebKitWebViewClass, should_allow_editing_action), g_signal_accumulator_first_wins, 0,
+ webkit_marshal_BOOLEAN__STRING_OBJECT_ENUM, G_TYPE_BOOLEAN,
+ 3, G_TYPE_STRING, WEBKIT_TYPE_DOM_RANGE, WEBKIT_TYPE_INSERT_ACTION);
+
+ webkit_web_view_signals[SHOULD_DELETE_RANGE] = g_signal_new("should-delete-range", G_TYPE_FROM_CLASS(webViewClass),
+ static_cast<GSignalFlags>(G_SIGNAL_RUN_LAST | G_SIGNAL_ACTION),
+ G_STRUCT_OFFSET(WebKitWebViewClass, should_allow_editing_action), g_signal_accumulator_first_wins, 0,
+ webkit_marshal_BOOLEAN__OBJECT, G_TYPE_BOOLEAN, 1, WEBKIT_TYPE_DOM_RANGE);
+
+ webkit_web_view_signals[SHOULD_SHOW_DELETE_INTERFACE_FOR_ELEMENT] = g_signal_new("should-show-delete-interface-for-element",
+ G_TYPE_FROM_CLASS(webViewClass), static_cast<GSignalFlags>(G_SIGNAL_RUN_LAST | G_SIGNAL_ACTION),
+ G_STRUCT_OFFSET(WebKitWebViewClass, should_allow_editing_action), g_signal_accumulator_first_wins, 0,
+ webkit_marshal_BOOLEAN__OBJECT, G_TYPE_BOOLEAN, 1, WEBKIT_TYPE_DOM_HTML_ELEMENT);
+
+ webkit_web_view_signals[SHOULD_CHANGE_SELECTED_RANGE] = g_signal_new("should-change-selected-range",
+ G_TYPE_FROM_CLASS(webViewClass), static_cast<GSignalFlags>(G_SIGNAL_RUN_LAST | G_SIGNAL_ACTION),
+ G_STRUCT_OFFSET(WebKitWebViewClass, should_allow_editing_action), g_signal_accumulator_first_wins, 0,
+ webkit_marshal_BOOLEAN__OBJECT_OBJECT_ENUM_BOOLEAN, G_TYPE_BOOLEAN,
+ 4, WEBKIT_TYPE_DOM_RANGE, WEBKIT_TYPE_DOM_RANGE, WEBKIT_TYPE_SELECTION_AFFINITY, G_TYPE_BOOLEAN);
+
+ webkit_web_view_signals[SHOULD_APPLY_STYLE] = g_signal_new("should-apply-style",
+ G_TYPE_FROM_CLASS(webViewClass), static_cast<GSignalFlags>(G_SIGNAL_RUN_LAST | G_SIGNAL_ACTION),
+ G_STRUCT_OFFSET(WebKitWebViewClass, should_allow_editing_action), g_signal_accumulator_first_wins, 0,
+ webkit_marshal_BOOLEAN__OBJECT_OBJECT, G_TYPE_BOOLEAN,
+ 2, WEBKIT_TYPE_DOM_CSS_STYLE_DECLARATION, WEBKIT_TYPE_DOM_RANGE);
+
+ webkit_web_view_signals[EDITING_BEGAN] = g_signal_new("editing-began",
+ G_TYPE_FROM_CLASS(webViewClass), static_cast<GSignalFlags>(G_SIGNAL_RUN_LAST | G_SIGNAL_ACTION), 0, 0, 0,
+ g_cclosure_marshal_VOID__VOID, G_TYPE_NONE, 0);
+
+ webkit_web_view_signals[USER_CHANGED_CONTENTS] = g_signal_new("user-changed-contents",
+ G_TYPE_FROM_CLASS(webViewClass), static_cast<GSignalFlags>(G_SIGNAL_RUN_LAST | G_SIGNAL_ACTION), 0, 0, 0,
+ g_cclosure_marshal_VOID__VOID, G_TYPE_NONE, 0);
+
+ webkit_web_view_signals[EDITING_ENDED] = g_signal_new("editing-ended",
+ G_TYPE_FROM_CLASS(webViewClass), static_cast<GSignalFlags>(G_SIGNAL_RUN_LAST | G_SIGNAL_ACTION), 0, 0, 0,
+ g_cclosure_marshal_VOID__VOID, G_TYPE_NONE, 0);
+
+ webkit_web_view_signals[SELECTION_CHANGED] = g_signal_new("selection-changed",
+ G_TYPE_FROM_CLASS(webViewClass), static_cast<GSignalFlags>(G_SIGNAL_RUN_LAST | G_SIGNAL_ACTION), 0, 0, 0,
+ g_cclosure_marshal_VOID__VOID, G_TYPE_NONE, 0);
+
/*
* implementations of virtual methods
*/
@@ -2623,6 +2737,7 @@ static void webkit_web_view_class_init(WebKitWebViewClass* webViewClass)
webViewClass->undo = webkit_web_view_real_undo;
webViewClass->redo = webkit_web_view_real_redo;
webViewClass->move_cursor = webkit_web_view_real_move_cursor;
+ webViewClass->should_allow_editing_action = webkit_web_view_real_should_allow_editing_action;
GObjectClass* objectClass = G_OBJECT_CLASS(webViewClass);
objectClass->dispose = webkit_web_view_dispose;
@@ -2664,6 +2779,7 @@ static void webkit_web_view_class_init(WebKitWebViewClass* webViewClass)
widgetClass->drag_data_received = webkit_web_view_drag_data_received;
#if GTK_CHECK_VERSION(2, 12, 0)
widgetClass->query_tooltip = webkit_web_view_query_tooltip;
+ widgetClass->show_help = webkit_web_view_show_help;
#endif
GtkContainerClass* containerClass = GTK_CONTAINER_CLASS(webViewClass);
@@ -4800,7 +4916,7 @@ webkit_web_view_get_dom_document(WebKitWebView* webView)
if (!doc)
return 0;
- return static_cast<WebKitDOMDocument*>(kit(doc));
+ return kit(doc);
}
/**
diff --git a/WebKit/gtk/webkit/webkitwebview.h b/WebKit/gtk/webkit/webkitwebview.h
index 9dfb654..cf8e669 100644
--- a/WebKit/gtk/webkit/webkitwebview.h
+++ b/WebKit/gtk/webkit/webkitwebview.h
@@ -73,6 +73,19 @@ typedef enum
WEBKIT_WEB_VIEW_VIEW_MODE_MINIMIZED
} WebKitWebViewViewMode;
+typedef enum
+{
+ WEBKIT_SELECTION_AFFINITY_UPSTREAM,
+ WEBKIT_SELECTION_AFFINITY_DOWNSTREAM,
+} WebKitSelectionAffinity;
+
+typedef enum
+{
+ WEBKIT_INSERT_ACTION_TYPED,
+ WEBKIT_INSERT_ACTION_PASTED,
+ WEBKIT_INSERT_ACTION_DROPPED,
+} WebKitInsertAction;
+
struct _WebKitWebView {
GtkContainer parent_instance;
@@ -137,12 +150,12 @@ struct _WebKitWebViewClass {
void (* undo) (WebKitWebView *web_view);
void (* redo) (WebKitWebView *web_view);
+ gboolean (* should_allow_editing_action) (WebKitWebView *web_view);
/* Padding for future expansion */
void (*_webkit_reserved0) (void);
void (*_webkit_reserved1) (void);
void (*_webkit_reserved2) (void);
- void (*_webkit_reserved3) (void);
};
WEBKIT_API GType