diff options
-rw-r--r-- | gtk/ScintillaGTK.cxx | 33 |
1 files changed, 15 insertions, 18 deletions
diff --git a/gtk/ScintillaGTK.cxx b/gtk/ScintillaGTK.cxx index 5475a1c2e..24af95bcc 100644 --- a/gtk/ScintillaGTK.cxx +++ b/gtk/ScintillaGTK.cxx @@ -198,6 +198,7 @@ private: void ReceivedDrop(GtkSelectionData *selection_data); static void GetSelection(GtkSelectionData *selection_data, guint info, SelectionText *selected); #ifdef USE_GTK_CLIPBOARD + void StoreOnClipboard(SelectionText *clipText); static void ClipboardGetSelection(GtkClipboard* clip, GtkSelectionData *selection_data, guint info, void *data); static void ClipboardClearSelection(GtkClipboard* clip, void *data); #endif @@ -1291,17 +1292,9 @@ void ScintillaGTK::CopyToClipboard(const SelectionText &selectedText) { atomClipboard, GDK_CURRENT_TIME); #else - GtkClipboard *clipBoard; - clipBoard = gtk_widget_get_clipboard(GTK_WIDGET(PWidget(wMain)), atomClipboard); - if (clipBoard == NULL) // Occurs if widget isn't in a toplevel - return; - SelectionText *clipText = new SelectionText(); clipText->Copy(selectedText); - - gtk_clipboard_set_with_data(clipBoard, clipboardCopyTargets, nClipboardCopyTargets, - ClipboardGetSelection, ClipboardClearSelection, clipText); - + StoreOnClipboard(clipText); #endif } @@ -1313,17 +1306,9 @@ void ScintillaGTK::Copy() { atomClipboard, GDK_CURRENT_TIME); #else - GtkClipboard *clipBoard; - clipBoard = gtk_widget_get_clipboard(GTK_WIDGET(PWidget(wMain)), atomClipboard); - if (clipBoard == NULL) // Occurs if widget isn't in a toplevel - return; - SelectionText *clipText = new SelectionText(); CopySelectionRange(clipText); - - gtk_clipboard_set_with_data(clipBoard, clipboardCopyTargets, nClipboardCopyTargets, - ClipboardGetSelection, ClipboardClearSelection, clipText); - + StoreOnClipboard(clipText); #endif #if PLAT_GTK_WIN32 if (selType == selRectangle) { @@ -1639,6 +1624,18 @@ void ScintillaGTK::GetSelection(GtkSelectionData *selection_data, guint info, Se } #ifdef USE_GTK_CLIPBOARD +void ScintillaGTK::StoreOnClipboard(SelectionText *clipText) { + GtkClipboard *clipBoard = + gtk_widget_get_clipboard(GTK_WIDGET(PWidget(wMain)), atomClipboard); + if (clipBoard == NULL) // Occurs if widget isn't in a toplevel + return; + + if (gtk_clipboard_set_with_data(clipBoard, clipboardCopyTargets, nClipboardCopyTargets, + ClipboardGetSelection, ClipboardClearSelection, clipText)) { + gtk_clipboard_set_can_store(clipBoard, clipboardCopyTargets, nClipboardCopyTargets); + } +} + void ScintillaGTK::ClipboardGetSelection(GtkClipboard *, GtkSelectionData *selection_data, guint info, void *data) { GetSelection(selection_data, info, static_cast<SelectionText*>(data)); } |