diff options
Diffstat (limited to 'WebKit/gtk/webkit')
-rw-r--r-- | WebKit/gtk/webkit/webkithittestresult.cpp | 8 | ||||
-rw-r--r-- | WebKit/gtk/webkit/webkitprivate.cpp | 3 | ||||
-rw-r--r-- | WebKit/gtk/webkit/webkitprivate.h | 2 | ||||
-rw-r--r-- | WebKit/gtk/webkit/webkitwebdatasource.cpp | 2 | ||||
-rw-r--r-- | WebKit/gtk/webkit/webkitwebframe.cpp | 11 | ||||
-rw-r--r-- | WebKit/gtk/webkit/webkitwebinspector.cpp | 18 | ||||
-rw-r--r-- | WebKit/gtk/webkit/webkitwebinspector.h | 4 | ||||
-rw-r--r-- | WebKit/gtk/webkit/webkitwebview.cpp | 136 | ||||
-rw-r--r-- | WebKit/gtk/webkit/webkitwebview.h | 15 |
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 |