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; }
void WebEditorClient::updateGlobalSelection(Frame* frame) { #if PLATFORM(X11) GtkClipboard* clipboard = PasteboardHelper::defaultPasteboardHelper()->getPrimarySelectionClipboard(frame); DataObjectGtk* dataObject = DataObjectGtk::forClipboard(clipboard); if (!frame->selection()->isRange()) return; dataObject->clearAll(); dataObject->setRange(frame->selection()->toNormalizedRange()); frameSettingClipboard = frame; GClosure* callback = g_cclosure_new(G_CALLBACK(collapseSelection), frame, 0); // This observer will be self-destroyed on closure finalization, // that will happen either after closure execution or after // closure invalidation. new EditorClientFrameDestructionObserver(frame, callback); g_closure_set_marshal(callback, g_cclosure_marshal_VOID__VOID); PasteboardHelper::defaultPasteboardHelper()->writeClipboardContents(clipboard, PasteboardHelper::DoNotIncludeSmartPaste, callback); frameSettingClipboard = 0; #endif }