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);
}
Esempio n. 2
0
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);
	}
}