summaryrefslogtreecommitdiffstats
path: root/WebCore/platform/gtk/ClipboardGtk.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'WebCore/platform/gtk/ClipboardGtk.cpp')
-rw-r--r--WebCore/platform/gtk/ClipboardGtk.cpp335
1 files changed, 0 insertions, 335 deletions
diff --git a/WebCore/platform/gtk/ClipboardGtk.cpp b/WebCore/platform/gtk/ClipboardGtk.cpp
deleted file mode 100644
index 49bcb7d..0000000
--- a/WebCore/platform/gtk/ClipboardGtk.cpp
+++ /dev/null
@@ -1,335 +0,0 @@
-/*
- * 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 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
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
- */
-
-#include "config.h"
-#include "ClipboardGtk.h"
-
-#include "CachedImage.h"
-#include "DragData.h"
-#include "Editor.h"
-#include "Element.h"
-#include "FileList.h"
-#include "Frame.h"
-#include "HTMLNames.h"
-#include "Image.h"
-#include "NotImplemented.h"
-#include "Pasteboard.h"
-#include "PasteboardHelper.h"
-#include "RenderImage.h"
-#include "ScriptExecutionContext.h"
-#include "markup.h"
-#include <wtf/text/CString.h>
-#include <wtf/text/StringHash.h>
-#include <gtk/gtk.h>
-
-namespace WebCore {
-
-enum ClipboardDataType {
- ClipboardDataTypeText,
- ClipboardDataTypeMarkup,
- ClipboardDataTypeURIList,
- ClipboardDataTypeURL,
- ClipboardDataTypeImage,
- ClipboardDataTypeUnknown
-};
-
-PassRefPtr<Clipboard> Editor::newGeneralClipboard(ClipboardAccessPolicy policy, Frame* frame)
-{
- return ClipboardGtk::create(policy, gtk_clipboard_get_for_display(gdk_display_get_default(), GDK_SELECTION_CLIPBOARD), frame);
-}
-
-PassRefPtr<Clipboard> Clipboard::create(ClipboardAccessPolicy policy, DragData* dragData, Frame* frame)
-{
- return ClipboardGtk::create(policy, dragData->platformData(), DragAndDrop, frame);
-}
-
-ClipboardGtk::ClipboardGtk(ClipboardAccessPolicy policy, GtkClipboard* clipboard, Frame* frame)
- : Clipboard(policy, CopyAndPaste)
- , m_dataObject(DataObjectGtk::forClipboard(clipboard))
- , m_clipboard(clipboard)
- , m_helper(Pasteboard::generalPasteboard()->helper())
- , m_frame(frame)
-{
-}
-
-ClipboardGtk::ClipboardGtk(ClipboardAccessPolicy policy, PassRefPtr<DataObjectGtk> dataObject, ClipboardType clipboardType, Frame* frame)
- : Clipboard(policy, clipboardType)
- , m_dataObject(dataObject)
- , m_clipboard(0)
- , m_helper(Pasteboard::generalPasteboard()->helper())
- , m_frame(frame)
-{
-}
-
-ClipboardGtk::~ClipboardGtk()
-{
-}
-
-static ClipboardDataType dataObjectTypeFromHTMLClipboardType(const String& rawType)
-{
- String type(rawType.stripWhiteSpace());
-
- // Two special cases for IE compatibility
- if (type == "Text")
- return ClipboardDataTypeText;
- if (type == "URL")
- return ClipboardDataTypeURL;
-
- // From the Mac port: Ignore any trailing charset - JS strings are
- // Unicode, which encapsulates the charset issue.
- if (type == "text/plain" || type.startsWith("text/plain;"))
- return ClipboardDataTypeText;
- if (type == "text/html" || type.startsWith("text/html;"))
- return ClipboardDataTypeMarkup;
- if (type == "Files" || type == "text/uri-list" || type.startsWith("text/uri-list;"))
- return ClipboardDataTypeURIList;
-
- // Not a known type, so just default to using the text portion.
- return ClipboardDataTypeUnknown;
-}
-
-void ClipboardGtk::clearData(const String& typeString)
-{
- if (policy() != ClipboardWritable)
- return;
-
- ClipboardDataType type = dataObjectTypeFromHTMLClipboardType(typeString);
- switch (type) {
- case ClipboardDataTypeURIList:
- case ClipboardDataTypeURL:
- m_dataObject->clearURIList();
- break;
- case ClipboardDataTypeMarkup:
- m_dataObject->clearMarkup();
- break;
- case ClipboardDataTypeText:
- m_dataObject->clearText();
- break;
- case ClipboardDataTypeUnknown:
- default:
- m_dataObject->clear();
- }
-
- if (m_clipboard)
- m_helper->writeClipboardContents(m_clipboard);
-}
-
-
-void ClipboardGtk::clearAllData()
-{
- if (policy() != ClipboardWritable)
- return;
-
- m_dataObject->clear();
-
- if (m_clipboard)
- m_helper->writeClipboardContents(m_clipboard);
-}
-
-String ClipboardGtk::getData(const String& typeString, bool& success) const
-{
- success = true; // According to http://www.whatwg.org/specs/web-apps/current-work/multipage/dnd.html
- // "The getData(format) method must return the data that is associated with the type format converted
- // to ASCII lowercase, if any, and must return the empty string otherwise." Since success == false
- // results in an 'undefined' return value, we always want to return success == true. This parameter
- // should eventually be removed.
- if (policy() != ClipboardReadable || !m_dataObject)
- return String();
-
- if (m_clipboard)
- m_helper->getClipboardContents(m_clipboard);
-
- ClipboardDataType type = dataObjectTypeFromHTMLClipboardType(typeString);
- if (type == ClipboardDataTypeURIList)
- return m_dataObject->uriList();
- if (type == ClipboardDataTypeURL)
- return m_dataObject->url();
- if (type == ClipboardDataTypeMarkup)
- return m_dataObject->markup();
- if (type == ClipboardDataTypeText)
- return m_dataObject->text();
-
- return String();
-}
-
-bool ClipboardGtk::setData(const String& typeString, const String& data)
-{
- if (policy() != ClipboardWritable)
- return false;
-
- bool success = false;
- ClipboardDataType type = dataObjectTypeFromHTMLClipboardType(typeString);
- if (type == ClipboardDataTypeURIList || type == ClipboardDataTypeURL) {
- m_dataObject->setURIList(data);
- success = true;
- } else if (type == ClipboardDataTypeMarkup) {
- m_dataObject->setMarkup(data);
- success = true;
- } else if (type == ClipboardDataTypeText) {
- m_dataObject->setText(data);
- success = true;
- }
-
- if (success && m_clipboard)
- m_helper->writeClipboardContents(m_clipboard);
-
- return success;
-}
-
-HashSet<String> ClipboardGtk::types() const
-{
- if (policy() != ClipboardReadable && policy() != ClipboardTypesReadable)
- return HashSet<String>();
-
- if (m_clipboard)
- m_helper->getClipboardContents(m_clipboard);
-
- HashSet<String> types;
- if (m_dataObject->hasText()) {
- types.add("text/plain");
- types.add("Text");
- }
-
- if (m_dataObject->hasMarkup())
- types.add("text/html");
-
- if (m_dataObject->hasURIList()) {
- types.add("text/uri-list");
- types.add("URL");
- }
-
- if (m_dataObject->hasFilenames())
- types.add("Files");
-
- return types;
-}
-
-PassRefPtr<FileList> ClipboardGtk::files() const
-{
- if (policy() != ClipboardReadable)
- return FileList::create();
-
- if (m_clipboard)
- m_helper->getClipboardContents(m_clipboard);
-
- RefPtr<FileList> fileList = FileList::create();
- const Vector<String>& filenames = m_dataObject->filenames();
- for (size_t i = 0; i < filenames.size(); i++)
- fileList->append(File::create(filenames[i]));
- return fileList.release();
-}
-
-void ClipboardGtk::setDragImage(CachedImage* image, const IntPoint& location)
-{
- setDragImage(image, 0, location);
-}
-
-void ClipboardGtk::setDragImageElement(Node* element, const IntPoint& location)
-{
- setDragImage(0, element, location);
-}
-
-void ClipboardGtk::setDragImage(CachedImage* image, Node* element, const IntPoint& location)
-{
- if (policy() != ClipboardImageWritable && policy() != ClipboardWritable)
- return;
-
- if (m_dragImage)
- m_dragImage->removeClient(this);
- m_dragImage = image;
- if (m_dragImage)
- m_dragImage->addClient(this);
-
- m_dragLoc = location;
- m_dragImageElement = element;
-}
-
-DragImageRef ClipboardGtk::createDragImage(IntPoint& location) const
-{
- location = m_dragLoc;
- if (!m_dragImage)
- return 0;
-
- return createDragImageFromImage(m_dragImage->image());
-}
-
-static CachedImage* getCachedImage(Element* element)
-{
- // Attempt to pull CachedImage from element
- ASSERT(element);
- RenderObject* renderer = element->renderer();
- if (!renderer || !renderer->isImage())
- return 0;
-
- RenderImage* image = static_cast<RenderImage*>(renderer);
- if (image->cachedImage() && !image->cachedImage()->errorOccurred())
- return image->cachedImage();
-
- return 0;
-}
-
-void ClipboardGtk::declareAndWriteDragImage(Element* element, const KURL& url, const String& label, Frame* frame)
-{
- m_dataObject->setURL(url, label);
- m_dataObject->setMarkup(createMarkup(element, IncludeNode, 0, AbsoluteURLs));
-
- CachedImage* image = getCachedImage(element);
- if (!image || !image->isLoaded())
- return;
-
- PlatformRefPtr<GdkPixbuf> pixbuf = adoptPlatformRef(image->image()->getGdkPixbuf());
- if (!pixbuf)
- return;
-
- m_dataObject->setImage(pixbuf.get());
-}
-
-void ClipboardGtk::writeURL(const KURL& url, const String& label, Frame*)
-{
- m_dataObject->setURL(url, label);
- if (m_clipboard)
- m_helper->writeClipboardContents(m_clipboard);
-}
-
-void ClipboardGtk::writeRange(Range* range, Frame* frame)
-{
- ASSERT(range);
-
- m_dataObject->setText(frame->editor()->selectedText());
- m_dataObject->setMarkup(createMarkup(range, 0, AnnotateForInterchange, false, AbsoluteURLs));
-
- if (m_clipboard)
- m_helper->writeClipboardContents(m_clipboard);
-}
-
-void ClipboardGtk::writePlainText(const String& text)
-{
- m_dataObject->setText(text);
-
- if (m_clipboard)
- m_helper->writeClipboardContents(m_clipboard);
-}
-
-bool ClipboardGtk::hasData()
-{
- if (m_clipboard)
- m_helper->getClipboardContents(m_clipboard);
-
- return m_dataObject->hasText() || m_dataObject->hasMarkup()
- || m_dataObject->hasURIList() || m_dataObject->hasImage();
-}
-
-}