| /* |
| * Copyright (C) 2015 Red Hat Inc. |
| * |
| * This library is free software; you can redistribute it and/or |
| * modify it under the terms of the GNU Lesser General Public |
| * License as published by the Free Software Foundation; either |
| * version 2,1 of the License, or (at your option) any later version. |
| * |
| * This library is distributed in the hope that it will be useful, |
| * but WITHOUT ANY WARRANTY; without even the implied warranty of |
| * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU |
| * Library General Public License for more details. |
| * |
| * You should have received a copy of the GNU Library General Public License |
| * along with this library; see the file COPYING.LIB. If not, write to |
| * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, |
| * Boston, MA 02110-1301, USA. |
| */ |
| |
| #include "config.h" |
| #include "WebKitWebEditor.h" |
| |
| #include "WebKitPrivate.h" |
| #include "WebKitWebEditorPrivate.h" |
| #include "WebKitWebPagePrivate.h" |
| #include "WKBundleAPICast.h" |
| |
| using namespace WebKit; |
| using namespace WebCore; |
| |
| /** |
| * SECTION: WebKitWebEditor |
| * @Short_description: Access to editing capabilities of a #WebKitWebPage |
| * @Title: WebKitWebEditor |
| * @See_also: #WebKitWebPage |
| * |
| * The WebKitWebEditor provides access to various editing capabilities of |
| * a #WebKitWebPage such as a possibility to react to the current selection in |
| * #WebKitWebPage. |
| * |
| * Since: 2.10 |
| */ |
| enum { |
| SELECTION_CHANGED, |
| |
| LAST_SIGNAL |
| }; |
| |
| struct _WebKitWebEditorPrivate { |
| WebKitWebPage* webPage; |
| }; |
| |
| static guint signals[LAST_SIGNAL] = { 0, }; |
| |
| WEBKIT_DEFINE_TYPE(WebKitWebEditor, webkit_web_editor, G_TYPE_OBJECT) |
| |
| static void webkit_web_editor_class_init(WebKitWebEditorClass* klass) |
| { |
| /** |
| * WebKitWebEditor::selection-changed: |
| * @editor: the #WebKitWebEditor on which the signal is emitted |
| * |
| * This signal is emitted for every selection change inside a #WebKitWebPage |
| * as well as for every caret position change as the caret is a collapsed |
| * selection. |
| * |
| * Since: 2.10 |
| */ |
| signals[SELECTION_CHANGED] = g_signal_new( |
| "selection-changed", |
| G_TYPE_FROM_CLASS(klass), |
| G_SIGNAL_RUN_LAST, |
| 0, nullptr, nullptr, |
| g_cclosure_marshal_VOID__VOID, |
| G_TYPE_NONE, 0); |
| } |
| |
| static void didChangeSelection(WKBundlePageRef, WKStringRef /* notificationName */, const void* clientInfo) |
| { |
| g_signal_emit(WEBKIT_WEB_EDITOR(clientInfo), signals[SELECTION_CHANGED], 0); |
| } |
| |
| WebKitWebEditor* webkitWebEditorCreate(WebKitWebPage* webPage) |
| { |
| WebKitWebEditor* editor = WEBKIT_WEB_EDITOR(g_object_new(WEBKIT_TYPE_WEB_EDITOR, nullptr)); |
| editor->priv->webPage = webPage; |
| |
| WKBundlePageEditorClientV0 editorClient = { |
| { |
| 0, // version |
| editor, // clientInfo |
| }, |
| nullptr, // shouldBeginEditing |
| nullptr, // shouldEndEditing |
| nullptr, // shouldInsertNode |
| nullptr, // shouldInsertText |
| nullptr, // shouldDeleteRange |
| nullptr, // shouldChangeSelectedRange |
| nullptr, // shouldApplyStyle |
| nullptr, // didBeginEditing |
| nullptr, // didEndEditing |
| nullptr, // didChange |
| didChangeSelection |
| }; |
| WKBundlePageSetEditorClient(toAPI(webkitWebPageGetPage(webPage)), &editorClient.base); |
| |
| return editor; |
| } |
| |
| /** |
| * webkit_web_editor_get_page: |
| * @editor: a #WebKitWebEditor |
| * |
| * Gets the #WebKitWebPage that is associated with the #WebKitWebEditor that can |
| * be used to access the #WebKitDOMDocument currently loaded into it. |
| * |
| * Returns: (transfer none): the associated #WebKitWebPage |
| * |
| * Since: 2.10 |
| */ |
| WebKitWebPage* webkit_web_editor_get_page(WebKitWebEditor* editor) |
| { |
| return editor->priv->webPage; |
| } |