static void merge_in_clipboard_menu_items (GObject *widget_as_object, TargetCallbackData *target_data) { gboolean add_selection_callback; g_assert (target_data != NULL); add_selection_callback = target_data->shares_selection_changes; gtk_ui_manager_insert_action_group (target_data->ui_manager, target_data->action_group, 0); set_paste_sensitive_if_clipboard_contains_data (target_data->action_group); g_signal_connect (gtk_clipboard_get (GDK_SELECTION_CLIPBOARD), "owner_change", G_CALLBACK (owner_change_callback), target_data); if (add_selection_callback) { target_data->connect_callbacks (widget_as_object, target_data); } else { /* If we don't use sensitivity, everything should be on */ set_clipboard_menu_items_sensitive (target_data->action_group); } set_clipboard_items_are_merged_in (widget_as_object, TRUE); }
static void text_buffer_update_sensitivity (GtkTextBuffer *buffer, TargetCallbackData *target_data) { g_assert (GTK_IS_TEXT_BUFFER (buffer)); g_assert (target_data != NULL); if (gtk_text_buffer_get_selection_bounds (buffer, NULL, NULL)) { set_clipboard_menu_items_sensitive (target_data->action_group); } else { set_clipboard_menu_items_insensitive (target_data->action_group); } }
static void selection_changed_callback (GtkWidget *widget, gpointer callback_data) { TargetCallbackData *target_data; GtkEditable *editable; int start, end; target_data = (TargetCallbackData *) callback_data; g_assert (target_data != NULL); editable = GTK_EDITABLE (widget); g_assert (editable != NULL); if (gtk_editable_get_selection_bounds (editable, &start, &end) && start != end) { set_clipboard_menu_items_sensitive (target_data->action_group); } else { set_clipboard_menu_items_insensitive (target_data->action_group); } }