Changeset 205958 in webkit
- Timestamp:
- Sep 15, 2016 1:02:20 AM (8 years ago)
- Location:
- releases/WebKitGTK/webkit-2.14/Source
- Files:
-
- 12 edited
Legend:
- Unmodified
- Added
- Removed
-
releases/WebKitGTK/webkit-2.14/Source/WebCore/ChangeLog
r205957 r205958 1 2016-09-13 Carlos Garcia Campos <cgarcia@igalia.com> 2 3 [GTK] Get rid of DataObjectGtk::forClipboard and cleanup pasteboard code 4 https://bugs.webkit.org/show_bug.cgi?id=161907 5 6 Reviewed by Michael Catanzaro. 7 8 We don't really need to keep a DataObjectGtk for every clipboard, we could simply pass the DataObjectGtk to read 9 and write methods of PasteboardHelper. 10 11 * editing/gtk/EditorGtk.cpp: 12 (WebCore::createFragmentFromPasteboardData): Update for DataObjectGtk API changes. 13 * platform/Pasteboard.h: 14 * platform/gtk/DataObjectGtk.cpp: Remove forClipboard() static method. 15 * platform/gtk/DataObjectGtk.h: Ditto. 16 * platform/gtk/PasteboardGtk.cpp: 17 (WebCore::Pasteboard::Pasteboard): Always create a new DataObjectGtk. 18 (WebCore::Pasteboard::dataObject): Return a const reference instead of a pointer. 19 (WebCore::Pasteboard::writePlainText): Pass the DataObjectGtk to PasteboardHelper. 20 (WebCore::Pasteboard::write): Ditto. 21 (WebCore::Pasteboard::writePasteboard): Ditto. 22 (WebCore::Pasteboard::clear): Ditto. 23 (WebCore::Pasteboard::read): Ditto. 24 (WebCore::Pasteboard::hasData): Ditto. 25 (WebCore::Pasteboard::types): Ditto. 26 (WebCore::Pasteboard::readString): Ditto. 27 (WebCore::Pasteboard::readFilenames): Ditto. 28 * platform/gtk/PasteboardHelper.cpp: 29 (WebCore::PasteboardHelper::getClipboardContents): Update the given DataObjectGtk. 30 (WebCore::PasteboardHelper::fillSelectionData): Use a const reference to DataObjectGtk instead of a pointer. 31 (WebCore::PasteboardHelper::targetListForDataObject): Ditto. 32 (WebCore::PasteboardHelper::fillDataObjectFromDropData): Use a reference to DataObjectGtk instead of a pointer. 33 (WebCore::ClipboardSetData::ClipboardSetData): Helper struct to pass DataObjectGtk and callback to clipboard callbacks. 34 (WebCore::ClipboardSetData::~ClipboardSetData): 35 (WebCore::getClipboardContentsCallback): Get the DataObjectGtk from ClipboardSetData struct passed as user data. 36 (WebCore::clearClipboardContentsCallback): Get the DataObjectGtk and callback from ClipboardSetData struct 37 passed as user data. 38 (WebCore::PasteboardHelper::writeClipboardContents): Write the given DataObjectGtk. 39 * platform/gtk/PasteboardHelper.h: 40 1 41 2016-09-12 Carlos Garcia Campos <cgarcia@igalia.com> 2 42 -
releases/WebKitGTK/webkit-2.14/Source/WebCore/editing/gtk/EditorGtk.cpp
r203324 r205958 54 54 return nullptr; 55 55 56 DataObjectGtk*dataObject = pasteboard.dataObject();57 if (dataObject ->hasMarkup() && frame.document())58 return createFragmentFromMarkup(*frame.document(), dataObject ->markup(), emptyString(), DisallowScriptingAndPluginContent);56 const auto& dataObject = pasteboard.dataObject(); 57 if (dataObject.hasMarkup() && frame.document()) 58 return createFragmentFromMarkup(*frame.document(), dataObject.markup(), emptyString(), DisallowScriptingAndPluginContent); 59 59 60 60 if (!allowPlainText) 61 61 return nullptr; 62 62 63 if (dataObject ->hasText()) {63 if (dataObject.hasText()) { 64 64 chosePlainText = true; 65 return createFragmentFromText(range, dataObject ->text());65 return createFragmentFromText(range, dataObject.text()); 66 66 } 67 67 -
releases/WebKitGTK/webkit-2.14/Source/WebCore/platform/Pasteboard.h
r198177 r205958 194 194 195 195 #if PLATFORM(GTK) 196 DataObjectGtk*dataObject() const;196 const DataObjectGtk& dataObject() const; 197 197 static std::unique_ptr<Pasteboard> createForGlobalSelection(); 198 198 #endif -
releases/WebKitGTK/webkit-2.14/Source/WebCore/platform/gtk/DataObjectGtk.cpp
r198209 r205958 148 148 } 149 149 150 DataObjectGtk* DataObjectGtk::forClipboard(GtkClipboard* clipboard)151 {152 static HashMap<GtkClipboard*, RefPtr<DataObjectGtk> > objectMap;153 154 auto addResult = objectMap.add(clipboard, nullptr);155 if (addResult.isNewEntry)156 addResult.iterator->value = DataObjectGtk::create();157 158 return addResult.iterator->value.get();159 150 } 160 161 } -
releases/WebKitGTK/webkit-2.14/Source/WebCore/platform/gtk/DataObjectGtk.h
r204467 r205958 67 67 void clearMarkup(); 68 68 69 static DataObjectGtk* forClipboard(GtkClipboard*);70 71 69 private: 72 70 String m_text; -
releases/WebKitGTK/webkit-2.14/Source/WebCore/platform/gtk/PasteboardGtk.cpp
r198177 r205958 83 83 84 84 Pasteboard::Pasteboard(GtkClipboard* gtkClipboard) 85 : m_dataObject(DataObjectGtk:: forClipboard(gtkClipboard))85 : m_dataObject(DataObjectGtk::create()) 86 86 , m_gtkClipboard(gtkClipboard) 87 87 { … … 94 94 } 95 95 96 DataObjectGtk*Pasteboard::dataObject() const97 { 98 return m_dataObject.get();96 const DataObjectGtk& Pasteboard::dataObject() const 97 { 98 return *m_dataObject; 99 99 } 100 100 … … 149 149 150 150 if (m_gtkClipboard) 151 PasteboardHelper::singleton().writeClipboardContents(m_gtkClipboard, (smartReplaceOption == CanSmartReplace) ? PasteboardHelper::IncludeSmartPaste : PasteboardHelper::DoNotIncludeSmartPaste);151 PasteboardHelper::singleton().writeClipboardContents(m_gtkClipboard, *m_dataObject, (smartReplaceOption == CanSmartReplace) ? PasteboardHelper::IncludeSmartPaste : PasteboardHelper::DoNotIncludeSmartPaste); 152 152 } 153 153 … … 160 160 161 161 if (m_gtkClipboard) 162 PasteboardHelper::singleton().writeClipboardContents(m_gtkClipboard );162 PasteboardHelper::singleton().writeClipboardContents(m_gtkClipboard, *m_dataObject); 163 163 } 164 164 … … 176 176 177 177 if (m_gtkClipboard) 178 PasteboardHelper::singleton().writeClipboardContents(m_gtkClipboard );178 PasteboardHelper::singleton().writeClipboardContents(m_gtkClipboard, *m_dataObject); 179 179 } 180 180 … … 186 186 187 187 if (m_gtkClipboard) 188 PasteboardHelper::singleton().writeClipboardContents(m_gtkClipboard, pasteboardContent.canSmartCopyOrDelete ? PasteboardHelper::IncludeSmartPaste : PasteboardHelper::DoNotIncludeSmartPaste, pasteboardContent.callback.get());188 PasteboardHelper::singleton().writeClipboardContents(m_gtkClipboard, *m_dataObject, pasteboardContent.canSmartCopyOrDelete ? PasteboardHelper::IncludeSmartPaste : PasteboardHelper::DoNotIncludeSmartPaste, pasteboardContent.callback.get()); 189 189 } 190 190 191 191 void Pasteboard::writePasteboard(const Pasteboard& sourcePasteboard) 192 192 { 193 RefPtr<DataObjectGtk>sourceDataObject = sourcePasteboard.dataObject();194 m_dataObject->clearAll(); 195 196 if (sourceDataObject ->hasText())197 m_dataObject->setText(sourceDataObject ->text());198 if (sourceDataObject ->hasMarkup())199 m_dataObject->setMarkup(sourceDataObject ->markup());200 if (sourceDataObject ->hasURL())201 m_dataObject->setURL(sourceDataObject ->url(), sourceDataObject->urlLabel());202 if (sourceDataObject ->hasURIList())203 m_dataObject->setURIList(sourceDataObject ->uriList());204 if (sourceDataObject ->hasImage())205 m_dataObject->setImage(sourceDataObject ->image());206 if (sourceDataObject ->hasUnknownTypeData()) {207 for (auto& it : m_dataObject->unknownTypes())193 const auto& sourceDataObject = sourcePasteboard.dataObject(); 194 m_dataObject->clearAll(); 195 196 if (sourceDataObject.hasText()) 197 m_dataObject->setText(sourceDataObject.text()); 198 if (sourceDataObject.hasMarkup()) 199 m_dataObject->setMarkup(sourceDataObject.markup()); 200 if (sourceDataObject.hasURL()) 201 m_dataObject->setURL(sourceDataObject.url(), sourceDataObject.urlLabel()); 202 if (sourceDataObject.hasURIList()) 203 m_dataObject->setURIList(sourceDataObject.uriList()); 204 if (sourceDataObject.hasImage()) 205 m_dataObject->setImage(sourceDataObject.image()); 206 if (sourceDataObject.hasUnknownTypeData()) { 207 for (auto& it : sourceDataObject.unknownTypes()) 208 208 m_dataObject->setUnknownTypeData(it.key, it.value); 209 209 } 210 210 211 211 if (m_gtkClipboard) 212 PasteboardHelper::singleton().writeClipboardContents(m_gtkClipboard );212 PasteboardHelper::singleton().writeClipboardContents(m_gtkClipboard, *m_dataObject); 213 213 } 214 214 … … 222 222 223 223 if (m_gtkClipboard) 224 PasteboardHelper::singleton().writeClipboardContents(m_gtkClipboard );224 PasteboardHelper::singleton().writeClipboardContents(m_gtkClipboard, *m_dataObject); 225 225 } 226 226 … … 247 247 248 248 if (m_gtkClipboard) 249 PasteboardHelper::singleton().writeClipboardContents(m_gtkClipboard );249 PasteboardHelper::singleton().writeClipboardContents(m_gtkClipboard, *m_dataObject); 250 250 } 251 251 … … 264 264 { 265 265 if (m_gtkClipboard) 266 PasteboardHelper::singleton().getClipboardContents(m_gtkClipboard );266 PasteboardHelper::singleton().getClipboardContents(m_gtkClipboard, *m_dataObject); 267 267 text.text = m_dataObject->text(); 268 268 } … … 271 271 { 272 272 if (m_gtkClipboard) 273 PasteboardHelper::singleton().getClipboardContents(m_gtkClipboard );273 PasteboardHelper::singleton().getClipboardContents(m_gtkClipboard, *m_dataObject); 274 274 275 275 return m_dataObject->hasText() || m_dataObject->hasMarkup() || m_dataObject->hasURIList() || m_dataObject->hasImage() || m_dataObject->hasUnknownTypeData(); … … 279 279 { 280 280 if (m_gtkClipboard) 281 PasteboardHelper::singleton().getClipboardContents(m_gtkClipboard );281 PasteboardHelper::singleton().getClipboardContents(m_gtkClipboard, *m_dataObject); 282 282 283 283 Vector<String> types; … … 308 308 { 309 309 if (m_gtkClipboard) 310 PasteboardHelper::singleton().getClipboardContents(m_gtkClipboard );310 PasteboardHelper::singleton().getClipboardContents(m_gtkClipboard, *m_dataObject); 311 311 312 312 switch (dataObjectTypeFromHTMLClipboardType(type)) { … … 331 331 { 332 332 if (m_gtkClipboard) 333 PasteboardHelper::singleton().getClipboardContents(m_gtkClipboard );333 PasteboardHelper::singleton().getClipboardContents(m_gtkClipboard, *m_dataObject); 334 334 335 335 return m_dataObject->filenames(); -
releases/WebKitGTK/webkit-2.14/Source/WebCore/platform/gtk/PasteboardHelper.cpp
r187640 r205958 25 25 26 26 #include "DataObjectGtk.h" 27 #include "GRefPtrGtk.h"28 27 #include "GtkVersioning.h" 29 28 #include "Pasteboard.h" … … 94 93 } 95 94 96 void PasteboardHelper::getClipboardContents(GtkClipboard* clipboard) 97 { 98 DataObjectGtk* dataObject = DataObjectGtk::forClipboard(clipboard); 99 ASSERT(dataObject); 100 95 void PasteboardHelper::getClipboardContents(GtkClipboard* clipboard, DataObjectGtk& dataObject) 96 { 101 97 if (gtk_clipboard_wait_is_text_available(clipboard)) { 102 98 GUniquePtr<gchar> textData(gtk_clipboard_wait_for_text(clipboard)); 103 99 if (textData) 104 dataObject ->setText(String::fromUTF8(textData.get()));100 dataObject.setText(String::fromUTF8(textData.get())); 105 101 } 106 102 … … 109 105 String markup(selectionDataToUTF8String(data)); 110 106 removeMarkupPrefix(markup); 111 dataObject ->setMarkup(markup);107 dataObject.setMarkup(markup); 112 108 gtk_selection_data_free(data); 113 109 } … … 116 112 if (gtk_clipboard_wait_is_target_available(clipboard, uriListAtom)) { 117 113 if (GtkSelectionData* data = gtk_clipboard_wait_for_contents(clipboard, uriListAtom)) { 118 dataObject ->setURIList(selectionDataToUTF8String(data));114 dataObject.setURIList(selectionDataToUTF8String(data)); 119 115 gtk_selection_data_free(data); 120 116 } … … 122 118 } 123 119 124 void PasteboardHelper::fillSelectionData(GtkSelectionData* selectionData, guint info, DataObjectGtk*dataObject)120 void PasteboardHelper::fillSelectionData(GtkSelectionData* selectionData, guint info, const DataObjectGtk& dataObject) 125 121 { 126 122 if (info == TargetTypeText) 127 gtk_selection_data_set_text(selectionData, dataObject ->text().utf8().data(), -1);123 gtk_selection_data_set_text(selectionData, dataObject.text().utf8().data(), -1); 128 124 129 125 else if (info == TargetTypeMarkup) { 130 126 // Some Linux applications refuse to accept pasted markup unless it is 131 127 // prefixed by a content-type meta tag. 132 CString markup = String(gMarkupPrefix + dataObject ->markup()).utf8();128 CString markup = String(gMarkupPrefix + dataObject.markup()).utf8(); 133 129 gtk_selection_data_set(selectionData, markupAtom, 8, 134 130 reinterpret_cast<const guchar*>(markup.data()), markup.length()); 135 131 136 132 } else if (info == TargetTypeURIList) { 137 CString uriList = dataObject ->uriList().utf8();133 CString uriList = dataObject.uriList().utf8(); 138 134 gtk_selection_data_set(selectionData, uriListAtom, 8, 139 135 reinterpret_cast<const guchar*>(uriList.data()), uriList.length()); 140 136 141 } else if (info == TargetTypeNetscapeURL && dataObject ->hasURL()) {142 String url(dataObject ->url());137 } else if (info == TargetTypeNetscapeURL && dataObject.hasURL()) { 138 String url(dataObject.url()); 143 139 String result(url); 144 140 result.append("\n"); 145 141 146 if (dataObject ->hasText())147 result.append(dataObject ->text());142 if (dataObject.hasText()) 143 result.append(dataObject.text()); 148 144 else 149 145 result.append(url); … … 154 150 155 151 } else if (info == TargetTypeImage) 156 gtk_selection_data_set_pixbuf(selectionData, dataObject ->image());152 gtk_selection_data_set_pixbuf(selectionData, dataObject.image()); 157 153 158 154 else if (info == TargetTypeSmartPaste) … … 163 159 g_variant_builder_init(&builder, G_VARIANT_TYPE_ARRAY); 164 160 165 for (auto& it : dataObject ->unknownTypes()) {161 for (auto& it : dataObject.unknownTypes()) { 166 162 GUniquePtr<gchar> dictItem(g_strdup_printf("{'%s', '%s'}", it.key.utf8().data(), it.value.utf8().data())); 167 163 g_variant_builder_add_parsed(&builder, dictItem.get()); … … 174 170 } 175 171 176 G tkTargetList* PasteboardHelper::targetListForDataObject(DataObjectGtk*dataObject, SmartPasteInclusion shouldInludeSmartPaste)177 { 178 G tkTargetList* list = gtk_target_list_new(nullptr, 0);179 180 if (dataObject ->hasText())181 gtk_target_list_add_text_targets(list , TargetTypeText);182 183 if (dataObject ->hasMarkup())184 gtk_target_list_add(list , markupAtom, 0, TargetTypeMarkup);185 186 if (dataObject ->hasURIList()) {187 gtk_target_list_add_uri_targets(list , TargetTypeURIList);188 gtk_target_list_add(list , netscapeURLAtom, 0, TargetTypeNetscapeURL);189 } 190 191 if (dataObject ->hasImage())192 gtk_target_list_add_image_targets(list , TargetTypeImage, TRUE);193 194 if (dataObject ->hasUnknownTypeData())195 gtk_target_list_add(list , unknownAtom, 0, TargetTypeUnknown);172 GRefPtr<GtkTargetList> PasteboardHelper::targetListForDataObject(const DataObjectGtk& dataObject, SmartPasteInclusion shouldInludeSmartPaste) 173 { 174 GRefPtr<GtkTargetList> list = adoptGRef(gtk_target_list_new(nullptr, 0)); 175 176 if (dataObject.hasText()) 177 gtk_target_list_add_text_targets(list.get(), TargetTypeText); 178 179 if (dataObject.hasMarkup()) 180 gtk_target_list_add(list.get(), markupAtom, 0, TargetTypeMarkup); 181 182 if (dataObject.hasURIList()) { 183 gtk_target_list_add_uri_targets(list.get(), TargetTypeURIList); 184 gtk_target_list_add(list.get(), netscapeURLAtom, 0, TargetTypeNetscapeURL); 185 } 186 187 if (dataObject.hasImage()) 188 gtk_target_list_add_image_targets(list.get(), TargetTypeImage, TRUE); 189 190 if (dataObject.hasUnknownTypeData()) 191 gtk_target_list_add(list.get(), unknownAtom, 0, TargetTypeUnknown); 196 192 197 193 if (shouldInludeSmartPaste == IncludeSmartPaste) 198 gtk_target_list_add(list , smartPasteAtom, 0, TargetTypeSmartPaste);194 gtk_target_list_add(list.get(), smartPasteAtom, 0, TargetTypeSmartPaste); 199 195 200 196 return list; 201 197 } 202 198 203 void PasteboardHelper::fillDataObjectFromDropData(GtkSelectionData* data, guint /* info */, DataObjectGtk *dataObject)199 void PasteboardHelper::fillDataObjectFromDropData(GtkSelectionData* data, guint /* info */, DataObjectGtk& dataObject) 204 200 { 205 201 if (!gtk_selection_data_get_data(data)) … … 208 204 GdkAtom target = gtk_selection_data_get_target(data); 209 205 if (target == textPlainAtom) 210 dataObject ->setText(selectionDataToUTF8String(data));206 dataObject.setText(selectionDataToUTF8String(data)); 211 207 else if (target == markupAtom) { 212 208 String markup(selectionDataToUTF8String(data)); 213 209 removeMarkupPrefix(markup); 214 dataObject ->setMarkup(markup);210 dataObject.setMarkup(markup); 215 211 } else if (target == uriListAtom) { 216 dataObject ->setURIList(selectionDataToUTF8String(data));212 dataObject.setURIList(selectionDataToUTF8String(data)); 217 213 } else if (target == netscapeURLAtom) { 218 214 String urlWithLabel(selectionDataToUTF8String(data)); … … 222 218 // Give preference to text/uri-list here, as it can hold more 223 219 // than one URI but still take the label if there is one. 224 if (!dataObject ->hasURIList())225 dataObject ->setURIList(pieces[0]);220 if (!dataObject.hasURIList()) 221 dataObject.setURIList(pieces[0]); 226 222 if (pieces.size() > 1) 227 dataObject ->setText(pieces[1]);223 dataObject.setText(pieces[1]); 228 224 } else if (target == unknownAtom) { 229 225 GRefPtr<GVariant> variant = g_variant_new_parsed(reinterpret_cast<const char*>(gtk_selection_data_get_data(data))); … … 235 231 g_variant_iter_init(&iter, variant.get()); 236 232 while (g_variant_iter_next(&iter, "{ss}", &key.outPtr(), &value.outPtr())) 237 dataObject ->setUnknownTypeData(key.get(), value.get());233 dataObject.setUnknownTypeData(key.get(), value.get()); 238 234 } 239 235 } … … 261 257 static DataObjectGtk* settingClipboardDataObject = 0; 262 258 263 static void getClipboardContentsCallback(GtkClipboard* clipboard, GtkSelectionData *selectionData, guint info, gpointer) 264 { 265 DataObjectGtk* dataObject = DataObjectGtk::forClipboard(clipboard); 266 ASSERT(dataObject); 267 PasteboardHelper::singleton().fillSelectionData(selectionData, info, dataObject); 268 } 269 270 static void clearClipboardContentsCallback(GtkClipboard* clipboard, gpointer data) 271 { 272 DataObjectGtk* dataObject = DataObjectGtk::forClipboard(clipboard); 273 ASSERT(dataObject); 259 struct ClipboardSetData { 260 ClipboardSetData(DataObjectGtk* dataObject, GClosure* callback) 261 : dataObject(dataObject) 262 , callback(callback) 263 { 264 } 265 266 ~ClipboardSetData() 267 { 268 } 269 270 RefPtr<DataObjectGtk> dataObject; 271 GRefPtr<GClosure> callback; 272 }; 273 274 static void getClipboardContentsCallback(GtkClipboard*, GtkSelectionData *selectionData, guint info, gpointer userData) 275 { 276 auto* data = static_cast<ClipboardSetData*>(userData); 277 PasteboardHelper::singleton().fillSelectionData(selectionData, info, *data->dataObject); 278 } 279 280 static void clearClipboardContentsCallback(GtkClipboard* clipboard, gpointer userData) 281 { 282 std::unique_ptr<ClipboardSetData> data(static_cast<ClipboardSetData*>(userData)); 274 283 275 284 // Only clear the DataObject for this clipboard if we are not currently setting it. 276 if (data Object!= settingClipboardDataObject)277 data Object->clearAll();278 279 if (!data )285 if (data->dataObject.get() != settingClipboardDataObject) 286 data->dataObject->clearAll(); 287 288 if (!data->callback) 280 289 return; 281 290 282 GRefPtr<GClosure> callback = adoptGRef(static_cast<GClosure*>(data));283 291 GValue firstArgument = {0, {{0}}}; 284 292 g_value_init(&firstArgument, G_TYPE_POINTER); 285 293 g_value_set_pointer(&firstArgument, clipboard); 286 g_closure_invoke(callback.get(), nullptr, 1, &firstArgument, 0); 287 } 288 289 void PasteboardHelper::writeClipboardContents(GtkClipboard* clipboard, SmartPasteInclusion includeSmartPaste, GClosure* callback) 290 { 291 DataObjectGtk* dataObject = DataObjectGtk::forClipboard(clipboard); 292 GtkTargetList* list = targetListForDataObject(dataObject, includeSmartPaste); 294 g_closure_invoke(data->callback.get(), nullptr, 1, &firstArgument, 0); 295 } 296 297 void PasteboardHelper::writeClipboardContents(GtkClipboard* clipboard, const DataObjectGtk& dataObject, SmartPasteInclusion includeSmartPaste, GClosure* callback) 298 { 299 GRefPtr<GtkTargetList> list = targetListForDataObject(dataObject, includeSmartPaste); 293 300 294 301 int numberOfTargets; 295 GtkTargetEntry* table = gtk_target_table_new_from_list(list , &numberOfTargets);302 GtkTargetEntry* table = gtk_target_table_new_from_list(list.get(), &numberOfTargets); 296 303 297 304 if (numberOfTargets > 0 && table) { 298 settingClipboardDataObject = dataObject; 299 300 if (gtk_clipboard_set_with_data(clipboard, table, numberOfTargets, getClipboardContentsCallback, clearClipboardContentsCallback, callback ? g_closure_ref(callback) : nullptr)) 305 settingClipboardDataObject = const_cast<DataObjectGtk*>(&dataObject); 306 307 auto data = std::make_unique<ClipboardSetData>(settingClipboardDataObject, callback); 308 if (gtk_clipboard_set_with_data(clipboard, table, numberOfTargets, getClipboardContentsCallback, clearClipboardContentsCallback, data.get())) { 301 309 gtk_clipboard_set_can_store(clipboard, nullptr, 0); 302 else { 303 // When gtk_clipboard_set_with_data fails the callbacks are ignored, so we need to release the reference we were passing to clearClipboardContentsCallback. 304 if (callback) 305 g_closure_unref(callback); 310 // When gtk_clipboard_set_with_data() succeeds clearClipboardContentsCallback takes the ownership of data, so we leak it here. 311 data.release(); 306 312 } 307 313 308 314 settingClipboardDataObject = nullptr; 309 310 315 } else 311 316 gtk_clipboard_clear(clipboard); … … 313 318 if (table) 314 319 gtk_target_table_free(table, numberOfTargets); 315 gtk_target_list_unref(list);316 320 } 317 321 -
releases/WebKitGTK/webkit-2.14/Source/WebCore/platform/gtk/PasteboardHelper.h
r187580 r205958 26 26 #define PasteboardHelper_h 27 27 28 #include "GRefPtrGtk.h" 28 29 #include <wtf/HashSet.h> 29 30 #include <wtf/Noncopyable.h> … … 43 44 44 45 GtkTargetList* targetList() const; 45 G tkTargetList* targetListForDataObject(DataObjectGtk*, SmartPasteInclusion = DoNotIncludeSmartPaste);46 void fillSelectionData(GtkSelectionData*, guint, DataObjectGtk*);47 void fillDataObjectFromDropData(GtkSelectionData*, guint, DataObjectGtk *);46 GRefPtr<GtkTargetList> targetListForDataObject(const DataObjectGtk&, SmartPasteInclusion = DoNotIncludeSmartPaste); 47 void fillSelectionData(GtkSelectionData*, guint, const DataObjectGtk&); 48 void fillDataObjectFromDropData(GtkSelectionData*, guint, DataObjectGtk&); 48 49 Vector<GdkAtom> dropAtomsForContext(GtkWidget*, GdkDragContext*); 49 void writeClipboardContents(GtkClipboard*, SmartPasteInclusion = DoNotIncludeSmartPaste, GClosure* = 0);50 void getClipboardContents(GtkClipboard* );50 void writeClipboardContents(GtkClipboard*, const DataObjectGtk&, SmartPasteInclusion = DoNotIncludeSmartPaste, GClosure* = 0); 51 void getClipboardContents(GtkClipboard*, DataObjectGtk&); 51 52 52 53 enum PasteboardTargetType { TargetTypeMarkup, TargetTypeText, TargetTypeImage, TargetTypeURIList, TargetTypeNetscapeURL, TargetTypeSmartPaste, TargetTypeUnknown }; -
releases/WebKitGTK/webkit-2.14/Source/WebKit2/ChangeLog
r205738 r205958 1 2016-09-13 Carlos Garcia Campos <cgarcia@igalia.com> 2 3 [GTK] Get rid of DataObjectGtk::forClipboard and cleanup pasteboard code 4 https://bugs.webkit.org/show_bug.cgi?id=161907 5 6 Reviewed by Michael Catanzaro. 7 8 Update to DataObjectGtk and PasteboardHelper API changes. 9 10 * UIProcess/gtk/DragAndDropHandler.cpp: 11 (WebKit::DragAndDropHandler::startDrag): 12 (WebKit::DragAndDropHandler::fillDragData): 13 (WebKit::DragAndDropHandler::dataObjectForDropData): 14 * WebProcess/WebCoreSupport/gtk/WebDragClientGtk.cpp: 15 (WebKit::WebDragClient::startDrag): 16 * WebProcess/WebCoreSupport/gtk/WebEditorClientGtk.cpp: 17 (WebKit::collapseSelection): 18 (WebKit::WebEditorClient::updateGlobalSelection): Remove wrong X11 guards, since that code is not X11 specific. 19 1 20 2016-09-09 Carlos Garcia Campos <cgarcia@igalia.com> 2 21 -
releases/WebKitGTK/webkit-2.14/Source/WebKit2/UIProcess/gtk/DragAndDropHandler.cpp
r195811 r205958 116 116 #if GTK_CHECK_VERSION(3, 16, 0) 117 117 m_draggingDataObject = adoptRef(dragData.platformData()); 118 GRefPtr<GtkTargetList> targetList = adoptGRef(PasteboardHelper::singleton().targetListForDataObject(m_draggingDataObject.get()));118 GRefPtr<GtkTargetList> targetList = PasteboardHelper::singleton().targetListForDataObject(*m_draggingDataObject); 119 119 #else 120 120 RefPtr<DataObjectGtk> dataObject = adoptRef(dragData.platformData()); 121 GRefPtr<GtkTargetList> targetList = adoptGRef(PasteboardHelper::singleton().targetListForDataObject(dataObject.get()));121 GRefPtr<GtkTargetList> targetList = PasteboardHelper::singleton().targetListForDataObject(*dataObject); 122 122 #endif 123 123 … … 157 157 158 158 ASSERT(m_draggingDataObject); 159 PasteboardHelper::singleton().fillSelectionData(selectionData, info, m_draggingDataObject.get());159 PasteboardHelper::singleton().fillSelectionData(selectionData, info, *m_draggingDataObject); 160 160 #else 161 161 if (DataObjectGtk* dataObject = m_draggingDataObjects.get(context)) 162 PasteboardHelper::singleton().fillSelectionData(selectionData, info, dataObject);162 PasteboardHelper::singleton().fillSelectionData(selectionData, info, *dataObject); 163 163 #endif 164 164 } … … 197 197 198 198 droppingContext->pendingDataRequests--; 199 PasteboardHelper::singleton().fillDataObjectFromDropData(selectionData, info, droppingContext->dataObject.get());199 PasteboardHelper::singleton().fillDataObjectFromDropData(selectionData, info, *droppingContext->dataObject); 200 200 if (droppingContext->pendingDataRequests) 201 201 return nullptr; -
releases/WebKitGTK/webkit-2.14/Source/WebKit2/WebProcess/WebCoreSupport/gtk/WebDragClientGtk.cpp
r189144 r205958 66 66 return; 67 67 68 RefPtr<DataObjectGtk>dataObject = dataTransfer.pasteboard().dataObject();69 DragData dragData( dataObject.get(), clientPosition, globalPosition, dataTransfer.sourceOperation());68 const auto& dataObject = dataTransfer.pasteboard().dataObject(); 69 DragData dragData(const_cast<DataObjectGtk*>(&dataObject), clientPosition, globalPosition, dataTransfer.sourceOperation()); 70 70 m_page->send(Messages::WebPageProxy::StartDrag(dragData, handle)); 71 71 } -
releases/WebKitGTK/webkit-2.14/Source/WebKit2/WebProcess/WebCoreSupport/gtk/WebEditorClientGtk.cpp
r202807 r205958 120 120 } 121 121 122 #if PLATFORM(X11)123 122 class EditorClientFrameDestructionObserver : FrameDestructionObserver { 124 123 public: … … 159 158 frame->selection().setBase(selection.extent(), selection.affinity()); 160 159 } 161 #endif162 160 163 161 void WebEditorClient::updateGlobalSelection(Frame* frame) 164 162 { 165 #if PLATFORM(X11)166 163 if (!frame->selection().isRange()) 167 164 return; … … 185 182 Pasteboard::createForGlobalSelection()->write(pasteboardContent); 186 183 frameSettingClipboard = nullptr; 187 #endif188 184 } 189 185
Note: See TracChangeset
for help on using the changeset viewer.