2007-12-21 Christian Dywan <christian@twotoasts.de>
authoralp@webkit.org <alp@webkit.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Sat, 22 Dec 2007 00:36:46 +0000 (00:36 +0000)
committeralp@webkit.org <alp@webkit.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Sat, 22 Dec 2007 00:36:46 +0000 (00:36 +0000)
        Reviewed by Alp Toker.

        http://bugs.webkit.org/show_bug.cgi?id=16144
        [GTK] Clipboard/ selection handling functions

        * WebView/webkitprivate.h:
        * WebView/webkitwebview.cpp:
        * WebView/webkitwebview.h:

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@28942 268f45cc-cd09-0410-ab3c-d52691b4dbfc

WebKit/gtk/ChangeLog
WebKit/gtk/WebView/webkitprivate.h
WebKit/gtk/WebView/webkitwebview.cpp
WebKit/gtk/WebView/webkitwebview.h

index 3213cfb243f8b3129419bb6600b5bf32d45c029c..1bad4e58b6a9c09864f07821e84e7236b0db9f87 100644 (file)
@@ -1,3 +1,14 @@
+2007-12-21  Christian Dywan  <christian@twotoasts.de>
+
+        Reviewed by Alp Toker.
+
+        http://bugs.webkit.org/show_bug.cgi?id=16144
+        [GTK] Clipboard/ selection handling functions
+
+        * WebView/webkitprivate.h:
+        * WebView/webkitwebview.cpp:
+        * WebView/webkitwebview.h:
+
 2007-12-19  Christian Dywan  <christian@twotoasts.de> 
 
         Reviewed by Alp Toker.
index 0bd04ec758f4f7c6820b4fdcd03ebd87fffab84c..2a47aa7309e7c10081073919634ebaaeeab798a2 100644 (file)
@@ -97,6 +97,9 @@ extern "C" {
 
     WEBKIT_API void
     webkit_web_frame_print (WebKitWebFrame* frame);
+
+    WEBKIT_API gchar*
+    webkit_web_view_get_selected_text (WebKitWebView* web_view);
 }
 
 #endif
index 00ca4bb0f1812c33dbc97d1908fdf8ed7b0fe476..1f69653604c6ed708f37b6fd683670ba8e3e8263 100644 (file)
@@ -26,6 +26,7 @@
 #include "webkitprivate.h"
 
 #include "NotImplemented.h"
+#include "CString.h"
 #include "ChromeClientGtk.h"
 #include "ContextMenuClientGtk.h"
 #include "DragClientGtk.h"
@@ -1040,6 +1041,155 @@ void webkit_web_view_execute_script(WebKitWebView* webView, const gchar* script)
         loader->executeScript(String::fromUTF8(script), true);
 }
 
+/**
+ * webkit_web_view_cut_clipboard:
+ * @web_view: a #WebKitWebView
+ *
+ * Determines wether or not it is currently possible to cut to the clipboard.
+ *
+ * Return value: %TRUE if a selection can be cut, %FALSE if not
+ */
+gboolean webkit_web_view_can_cut_clipboard(WebKitWebView* webView)
+{
+    g_return_val_if_fail(WEBKIT_IS_WEB_VIEW(webView), FALSE);
+
+    Frame* frame = core(webView)->focusController()->focusedOrMainFrame();
+    return frame->editor()->canCut() || frame->editor()->canDHTMLCut();
+}
+
+/**
+ * webkit_web_view_copy_clipboard:
+ * @web_view: a #WebKitWebView
+ *
+ * Determines wether or not it is currently possible to copy to the clipboard.
+ *
+ * Return value: %TRUE if a selection can be copied, %FALSE if not
+ */
+gboolean webkit_web_view_can_copy_clipboard(WebKitWebView* webView)
+{
+    g_return_val_if_fail(WEBKIT_IS_WEB_VIEW(webView), FALSE);
+
+    Frame* frame = core(webView)->focusController()->focusedOrMainFrame();
+    return frame->editor()->canCopy() || frame->editor()->canDHTMLCopy();
+}
+
+/**
+ * webkit_web_view_paste_clipboard:
+ * @web_view: a #WebKitWebView
+ *
+ * Determines wether or not it is currently possible to paste from the clipboard.
+ *
+ * Return value: %TRUE if a selection can be pasted, %FALSE if not
+ */
+gboolean webkit_web_view_can_paste_clipboard(WebKitWebView* webView)
+{
+    g_return_val_if_fail(WEBKIT_IS_WEB_VIEW(webView), FALSE);
+
+    Frame* frame = core(webView)->focusController()->focusedOrMainFrame();
+    return frame->editor()->canPaste() || frame->editor()->canDHTMLPaste();
+}
+
+/**
+ * webkit_web_view_cut_clipboard:
+ * @web_view: a #WebKitWebView
+ *
+ * Cuts the current selection inside the @web_view to the clipboard.
+ */
+void webkit_web_view_cut_clipboard(WebKitWebView* webView)
+{
+    g_return_if_fail(WEBKIT_IS_WEB_VIEW(webView));
+
+    if (webkit_web_view_can_cut_clipboard(webView))
+        g_signal_emit(webView, CUT_CLIPBOARD, 0);
+}
+
+/**
+ * webkit_web_view_copy_clipboard:
+ * @web_view: a #WebKitWebView
+ *
+ * Copies the current selection inside the @web_view to the clipboard.
+ */
+void webkit_web_view_copy_clipboard(WebKitWebView* webView)
+{
+    g_return_if_fail(WEBKIT_IS_WEB_VIEW(webView));
+
+    if (webkit_web_view_can_copy_clipboard(webView))
+        g_signal_emit(webView, COPY_CLIPBOARD, 0);
+}
+
+/**
+ * webkit_web_view_paste_clipboard:
+ * @web_view: a #WebKitWebView
+ *
+ * Pastes the current contents of the clipboard to the @web_view.
+ */
+void webkit_web_view_paste_clipboard(WebKitWebView* webView)
+{
+    g_return_if_fail(WEBKIT_IS_WEB_VIEW(webView));
+
+    if (webkit_web_view_can_paste_clipboard(webView))
+        g_signal_emit(webView, PASTE_CLIPBOARD, 0);
+}
+
+/**
+ * webkit_web_view_delete_selection:
+ * @web_view: a #WebKitWebView
+ *
+ * Deletes the current selection inside the @web_view.
+ */
+void webkit_web_view_delete_selection(WebKitWebView* webView)
+{
+    g_return_if_fail(WEBKIT_IS_WEB_VIEW(webView));
+
+    Frame* frame = core(webView)->focusController()->focusedOrMainFrame();
+    frame->editor()->performDelete();
+}
+
+/**
+ * webkit_web_view_has_selection:
+ * @web_view: a #WebKitWebView
+ *
+ * Determines wether text was selected.
+ *
+ * Return value: %TRUE if there is selected text, %FALSE if not
+ */
+gboolean webkit_web_view_has_selection(WebKitWebView* webView)
+{
+    g_return_val_if_fail(WEBKIT_IS_WEB_VIEW(webView), FALSE);
+
+    WebKitWebViewPrivate* webViewData = WEBKIT_WEB_VIEW_GET_PRIVATE(webView);
+    return webViewData->corePage->selection().isNone() ? TRUE : FALSE;
+}
+
+/**
+ * webkit_web_view_get_selected_text:
+ * @web_view: a #WebKitWebView
+ *
+ * Retrieves the selected text if any.
+ *
+ * Return value: a newly allocated string with the selection or %NULL
+ */
+gchar* webkit_web_view_get_selected_text(WebKitWebView* webView)
+{
+    g_return_val_if_fail(WEBKIT_IS_WEB_VIEW(webView), 0);
+
+    Frame* frame = core(webView)->focusController()->focusedOrMainFrame();
+    return g_strdup(frame->selectedText().utf8().data());
+}
+
+/**
+ * webkit_web_view_select_all:
+ * @web_view: a #WebKitWebView
+ *
+ * Attempts to select everything inside the @web_view.
+ */
+void webkit_web_view_select_all(WebKitWebView* webView)
+{
+    g_return_if_fail(WEBKIT_IS_WEB_VIEW(webView));
+
+    g_signal_emit(webView, SELECT_ALL, 0);
+}
+
 /**
  * webkit_web_view_get_editable:
  * @web_view: a #WebKitWebView
index 2d6d848f3e7237cdb0d5804302924216a6dd082e..db4ad6f000c5564c1696eed074b9d4426190ca9c 100644 (file)
@@ -131,6 +131,33 @@ webkit_web_view_get_main_frame (WebKitWebView* web_view);
 WEBKIT_API void
 webkit_web_view_execute_script (WebKitWebView* web_view, const gchar* script);
 
+WEBKIT_API gboolean
+webkit_web_view_can_cut_clipboard (WebKitWebView* web_view);
+
+WEBKIT_API gboolean
+webkit_web_view_can_copy_clipboard (WebKitWebView* web_view);
+
+WEBKIT_API gboolean
+webkit_web_view_can_paste_clipboard (WebKitWebView* web_view);
+
+WEBKIT_API void
+webkit_web_view_cut_clipboard (WebKitWebView* web_view);
+
+WEBKIT_API void
+webkit_web_view_copy_clipboard (WebKitWebView* web_view);
+
+WEBKIT_API void
+webkit_web_view_paste_clipboard (WebKitWebView* web_view);
+
+WEBKIT_API void
+webkit_web_view_delete_selection (WebKitWebView* web_view);
+
+WEBKIT_API gboolean
+webkit_web_view_has_selection (WebKitWebView* web_view);
+
+WEBKIT_API void
+webkit_web_view_select_all (WebKitWebView* web_view);
+
 WEBKIT_API gboolean
 webkit_web_view_get_editable (WebKitWebView* web_view);