|
Lines 1-6
a/Source/WebCore/platform/gtk/PasteboardHelper.cpp_sec1
|
| 1 |
/* |
1 |
/* |
| 2 |
* Copyright (C) 2010 Martin Robinson <mrobinson@webkit.org> |
2 |
* Copyright (C) 2010 Martin Robinson <mrobinson@webkit.org> |
| 3 |
* Copyright (C) Igalia S.L. |
3 |
* Copyright (C) Igalia S.L. |
|
|
4 |
* Copyright (C) 2013 Collabora Ltd. |
| 4 |
* All rights reserved. |
5 |
* All rights reserved. |
| 5 |
* |
6 |
* |
| 6 |
* This library is free software; you can redistribute it and/or |
7 |
* This library is free software; you can redistribute it and/or |
|
Lines 31-36
a/Source/WebCore/platform/gtk/PasteboardHelper.cpp_sec2
|
| 31 |
#include "TextResourceDecoder.h" |
32 |
#include "TextResourceDecoder.h" |
| 32 |
#include <gtk/gtk.h> |
33 |
#include <gtk/gtk.h> |
| 33 |
#include <wtf/gobject/GOwnPtr.h> |
34 |
#include <wtf/gobject/GOwnPtr.h> |
|
|
35 |
#include <wtf/gobject/GRefPtr.h> |
| 34 |
|
36 |
|
| 35 |
namespace WebCore { |
37 |
namespace WebCore { |
| 36 |
|
38 |
|
|
Lines 39-44
static GdkAtom markupAtom;
a/Source/WebCore/platform/gtk/PasteboardHelper.cpp_sec3
|
| 39 |
static GdkAtom netscapeURLAtom; |
41 |
static GdkAtom netscapeURLAtom; |
| 40 |
static GdkAtom uriListAtom; |
42 |
static GdkAtom uriListAtom; |
| 41 |
static GdkAtom smartPasteAtom; |
43 |
static GdkAtom smartPasteAtom; |
|
|
44 |
static GdkAtom unknownAtom; |
| 45 |
|
| 42 |
static String gMarkupPrefix; |
46 |
static String gMarkupPrefix; |
| 43 |
|
47 |
|
| 44 |
static void removeMarkupPrefix(String& markup) |
48 |
static void removeMarkupPrefix(String& markup) |
|
Lines 63-68
static void initGdkAtoms()
a/Source/WebCore/platform/gtk/PasteboardHelper.cpp_sec4
|
| 63 |
netscapeURLAtom = gdk_atom_intern("_NETSCAPE_URL", FALSE); |
67 |
netscapeURLAtom = gdk_atom_intern("_NETSCAPE_URL", FALSE); |
| 64 |
uriListAtom = gdk_atom_intern("text/uri-list", FALSE); |
68 |
uriListAtom = gdk_atom_intern("text/uri-list", FALSE); |
| 65 |
smartPasteAtom = gdk_atom_intern("application/vnd.webkitgtk.smartpaste", FALSE); |
69 |
smartPasteAtom = gdk_atom_intern("application/vnd.webkitgtk.smartpaste", FALSE); |
|
|
70 |
unknownAtom = gdk_atom_intern("application/vnd.webkitgtk.unknown", FALSE); |
| 66 |
gMarkupPrefix = "<meta http-equiv=\"content-type\" content=\"text/html; charset=utf-8\">"; |
71 |
gMarkupPrefix = "<meta http-equiv=\"content-type\" content=\"text/html; charset=utf-8\">"; |
| 67 |
} |
72 |
} |
| 68 |
|
73 |
|
|
Lines 82-87
PasteboardHelper::PasteboardHelper()
a/Source/WebCore/platform/gtk/PasteboardHelper.cpp_sec5
|
| 82 |
gtk_target_list_add_uri_targets(m_targetList, PasteboardHelper::TargetTypeURIList); |
87 |
gtk_target_list_add_uri_targets(m_targetList, PasteboardHelper::TargetTypeURIList); |
| 83 |
gtk_target_list_add(m_targetList, netscapeURLAtom, 0, PasteboardHelper::TargetTypeNetscapeURL); |
88 |
gtk_target_list_add(m_targetList, netscapeURLAtom, 0, PasteboardHelper::TargetTypeNetscapeURL); |
| 84 |
gtk_target_list_add_image_targets(m_targetList, PasteboardHelper::TargetTypeImage, TRUE); |
89 |
gtk_target_list_add_image_targets(m_targetList, PasteboardHelper::TargetTypeImage, TRUE); |
|
|
90 |
gtk_target_list_add(m_targetList, unknownAtom, 0, PasteboardHelper::TargetTypeUnknown); |
| 85 |
} |
91 |
} |
| 86 |
|
92 |
|
| 87 |
PasteboardHelper::~PasteboardHelper() |
93 |
PasteboardHelper::~PasteboardHelper() |
|
Lines 179-184
void PasteboardHelper::fillSelectionData(GtkSelectionData* selectionData, guint
a/Source/WebCore/platform/gtk/PasteboardHelper.cpp_sec6
|
| 179 |
|
185 |
|
| 180 |
else if (info == TargetTypeSmartPaste) |
186 |
else if (info == TargetTypeSmartPaste) |
| 181 |
gtk_selection_data_set_text(selectionData, "", -1); |
187 |
gtk_selection_data_set_text(selectionData, "", -1); |
|
|
188 |
|
| 189 |
else if (info == TargetTypeUnknown) { |
| 190 |
GVariantBuilder builder; |
| 191 |
g_variant_builder_init(&builder, G_VARIANT_TYPE_ARRAY); |
| 192 |
|
| 193 |
Vector<String> types = dataObject->unknownTypes(); |
| 194 |
for (size_t i = 0; i < types.size(); i++) { |
| 195 |
GOwnPtr<gchar> dictItem(g_strdup_printf("{'%s', '%s'}", types[i].utf8().data(), dataObject->unknownTypeData(types[i]).utf8().data())); |
| 196 |
g_variant_builder_add_parsed(&builder, dictItem.get()); |
| 197 |
} |
| 198 |
|
| 199 |
GRefPtr<GVariant> variant = adoptGRef(g_variant_builder_end(&builder)); |
| 200 |
GOwnPtr<gchar> serializedVariant(g_variant_print(variant.get(), TRUE)); |
| 201 |
gtk_selection_data_set(selectionData, unknownAtom, sizeof(char), reinterpret_cast<const guchar*>(serializedVariant.get()), strlen(serializedVariant.get())); |
| 202 |
} |
| 182 |
} |
203 |
} |
| 183 |
|
204 |
|
| 184 |
GtkTargetList* PasteboardHelper::targetListForDataObject(DataObjectGtk* dataObject, SmartPasteInclusion shouldInludeSmartPaste) |
205 |
GtkTargetList* PasteboardHelper::targetListForDataObject(DataObjectGtk* dataObject, SmartPasteInclusion shouldInludeSmartPaste) |
|
Lines 199-204
GtkTargetList* PasteboardHelper::targetListForDataObject(DataObjectGtk* dataObje
a/Source/WebCore/platform/gtk/PasteboardHelper.cpp_sec7
|
| 199 |
if (dataObject->hasImage()) |
220 |
if (dataObject->hasImage()) |
| 200 |
gtk_target_list_add_image_targets(list, TargetTypeImage, TRUE); |
221 |
gtk_target_list_add_image_targets(list, TargetTypeImage, TRUE); |
| 201 |
|
222 |
|
|
|
223 |
if (dataObject->hasUnknownTypeData()) |
| 224 |
gtk_target_list_add(list, unknownAtom, 0, TargetTypeUnknown); |
| 225 |
|
| 202 |
if (shouldInludeSmartPaste == IncludeSmartPaste) |
226 |
if (shouldInludeSmartPaste == IncludeSmartPaste) |
| 203 |
gtk_target_list_add(list, smartPasteAtom, 0, TargetTypeSmartPaste); |
227 |
gtk_target_list_add(list, smartPasteAtom, 0, TargetTypeSmartPaste); |
| 204 |
|
228 |
|
|
Lines 230-235
void PasteboardHelper::fillDataObjectFromDropData(GtkSelectionData* data, guint
a/Source/WebCore/platform/gtk/PasteboardHelper.cpp_sec8
|
| 230 |
dataObject->setURIList(pieces[0]); |
254 |
dataObject->setURIList(pieces[0]); |
| 231 |
if (pieces.size() > 1) |
255 |
if (pieces.size() > 1) |
| 232 |
dataObject->setText(pieces[1]); |
256 |
dataObject->setText(pieces[1]); |
|
|
257 |
} else if (target == unknownAtom) { |
| 258 |
GRefPtr<GVariant> variant = adoptGRef(g_variant_new_parsed(reinterpret_cast<const char*>(gtk_selection_data_get_data(data)))); |
| 259 |
|
| 260 |
GOwnPtr<gchar> key; |
| 261 |
GOwnPtr<gchar> value; |
| 262 |
GVariantIter iter; |
| 263 |
|
| 264 |
g_variant_iter_init(&iter, variant.get()); |
| 265 |
while (g_variant_iter_next(&iter, "{ss}", &key.outPtr(), &value.outPtr())) { |
| 266 |
dataObject->setUnknownTypeData(key.get(), value.get()); |
| 267 |
|
| 268 |
// FIXME: should GOwnPtr be smarter about this and replace the existing ptr when outPtr() is used? |
| 269 |
key.clear(); |
| 270 |
value.clear(); |
| 271 |
} |
| 233 |
} |
272 |
} |
| 234 |
} |
273 |
} |
| 235 |
|
274 |
|
|
Lines 241-246
Vector<GdkAtom> PasteboardHelper::dropAtomsForContext(GtkWidget* widget, GdkDrag
a/Source/WebCore/platform/gtk/PasteboardHelper.cpp_sec9
|
| 241 |
dropAtoms.append(markupAtom); |
280 |
dropAtoms.append(markupAtom); |
| 242 |
dropAtoms.append(uriListAtom); |
281 |
dropAtoms.append(uriListAtom); |
| 243 |
dropAtoms.append(netscapeURLAtom); |
282 |
dropAtoms.append(netscapeURLAtom); |
|
|
283 |
dropAtoms.append(unknownAtom); |
| 244 |
|
284 |
|
| 245 |
// For images, try to find the most applicable image type. |
285 |
// For images, try to find the most applicable image type. |
| 246 |
GRefPtr<GtkTargetList> list = adoptGRef(gtk_target_list_new(0, 0)); |
286 |
GRefPtr<GtkTargetList> list = adoptGRef(gtk_target_list_new(0, 0)); |