static void clearClipboardContentsCallback(GtkClipboard* clipboard, gpointer data) { DataObjectGtk* dataObject = DataObjectGtk::forClipboard(clipboard); ASSERT(dataObject); // Only clear the DataObject for this clipboard if we are not currently setting it. if (dataObject != settingClipboardDataObject) dataObject->clear(); // Only collapse the selection if this is an X11 primary clipboard // and we aren't currently setting the clipboard for this WebView. if (!data || data == settingClipboardData) return; WebKitWebView* webView = reinterpret_cast<WebKitWebView*>(data); WebCore::Page* corePage = core(webView); if (!corePage || !corePage->focusController()) { g_object_unref(webView); return; } Frame* frame = corePage->focusController()->focusedOrMainFrame(); // Collapse the selection without clearing it ASSERT(frame); frame->selection()->setBase(frame->selection()->extent(), frame->selection()->affinity()); g_object_unref(webView); }
void Pasteboard::clear() { // TODO: Is there a way to get the widget's clipboard here? GtkClipboard* clipboard = PasteboardHelper::clipboard(); DataObjectGtk* dataObject = DataObjectGtk::forClipboard(clipboard); ASSERT(dataObject); dataObject->clear(); PasteboardHelper::helper()->writeClipboardContents(clipboard); }
static void clearClipboardContentsCallback(GtkClipboard* clipboard, gpointer data) { DataObjectGtk* dataObject = DataObjectGtk::forClipboard(clipboard); ASSERT(dataObject); // Only clear the DataObject for this clipboard if we are not currently setting it. if (dataObject != settingClipboardDataObject) dataObject->clear(); if (!data) return; GClosure* callback = static_cast<GClosure*>(data); GValue firstArgument = {0, {{0}}}; g_value_init(&firstArgument, G_TYPE_POINTER); g_value_set_pointer(&firstArgument, clipboard); g_closure_invoke(callback, 0, 1, &firstArgument, 0); g_closure_unref(callback); }
static void setSelectionPrimaryClipboardIfNeeded(WebKitWebView* webView) { if (!gtk_widget_has_screen(GTK_WIDGET(webView))) return; GtkClipboard* clipboard = gtk_widget_get_clipboard(GTK_WIDGET(webView), GDK_SELECTION_PRIMARY); DataObjectGtk* dataObject = DataObjectGtk::forClipboard(clipboard); WebCore::Page* corePage = core(webView); Frame* targetFrame = corePage->focusController()->focusedOrMainFrame(); if (!targetFrame->selection()->isRange()) return; dataObject->clear(); dataObject->setRange(targetFrame->selection()->toNormalizedRange()); viewSettingClipboard = webView; GClosure* callback = g_cclosure_new_object(G_CALLBACK(collapseSelection), G_OBJECT(webView)); g_closure_set_marshal(callback, g_cclosure_marshal_VOID__VOID); PasteboardHelper::defaultPasteboardHelper()->writeClipboardContents(clipboard, PasteboardHelper::DoNotIncludeSmartPaste, callback); viewSettingClipboard = 0; }