[Gtk-sharp-list] Problem with Gtk.Clipboard copy/paste

alf alf82@freemail.gr
Fri, 29 Oct 2004 17:43:08 +0300


Hello, 

I have been experimenting with the copy/paste clipboard features of Gtk#
and I have run into something that may be a bug. I am using Gtk# 1.0.2
and Mono 1.1.1.

For example:

<------------------------------------------------------------->
using System;
using Gtk;

class CopyPasteTest:Gtk.Window {

Gtk.Clipboard clipboard;

static TargetEntry[] targets= new TargetEntry[]{
new TargetEntry("UTF8_STRING", 0, 0)};

public static void Main(string[] args)
{
	Application.Init ();
	new CopyPasteTest ();
	Application.Run ();
}

public CopyPasteTest () : base ("CopyPasteTest")
{
	this.SetDefaultSize (400, 300);
	this.DeleteEvent += new DeleteEventHandler (OnDelete);

	clipboard=Gtk.Clipboard.Get(Gdk.Atom.Intern("CLIPBOARD", true));

	Button btn = new Button ("Copy");
	btn.Clicked += new EventHandler (OnCopyClicked);
	Add(btn);

	this.ShowAll ();
}


void OnClipboardGet(Clipboard cb, ref SelectionData sd, uint i)
{
	Gdk.Atom atom=Gdk.Atom.Intern("UTF8_STRING",false);
	sd.Set(atom, 8, new byte[]{0x31,0x32,0x33});
} 

void OnClipboardClear(Clipboard cb)
{


}

void OnCopyClicked(object o, EventArgs args)
{
	clipboard.SetWithData(targets, new ClipboardGetFunc(OnClipboardGet),
new ClipboardClearFunc(OnClipboardClear));

	// this works fine 
	//clipboard.SetText("fff");
} 

void OnDelete (object o, DeleteEventArgs args)
{
	Application.Quit ();
}

}
<----------------------------------------------------->

When I click on the copy button and try to paste in some other
application that accepts UTF8_STRING (eg gedit) my program crashes with:

Unhandled Exception: System.NullReferenceException: Object reference not
set to an instance of an object
in <0xffa6e8e0> (wrapper managed-to-native)
Gtk.SelectionData:gtk_selection_data_set (intptr,intptr,int,byte[],int)
in <0x00004> (wrapper managed-to-native)
Gtk.SelectionData:gtk_selection_data_set (intptr,intptr,int,byte[],int)
in <0x0003e> Gtk.SelectionData:Set (Gdk.Atom,int,byte[],int)
in <0x0001d> Gtk.SelectionData:Set (Gdk.Atom,int,byte[])
in [0x00025] (at /home/alf/Projects/CopyPasteTest/Main.cs:37)
CopyPasteTest:OnClipboardGet (Gtk.Clipboard,Gtk.SelectionData&,uint)
in <0x00076> (wrapper delegate-invoke)
System.MulticastDelegate:invoke_void_Clipboard_SelectionData&_uint
(Gtk.Clipboard,Gtk.SelectionData&,uint)
in <0x0007b> GtkSharp.ClipboardGetFuncWrapper:NativeCallback
(intptr,intptr&,uint,intptr)
in <0x0009f> (wrapper native-to-managed)
GtkSharp.ClipboardGetFuncWrapper:NativeCallback
(intptr,intptr&,uint,intptr)
in <0xff97bec1> (wrapper managed-to-native) Gtk.Application:gtk_main ()
in <0x00004> (wrapper managed-to-native) Gtk.Application:gtk_main ()
in <0x00007> Gtk.Application:Run ()
in [0x0000b] (at /home/alf/Projects/CopyPasteTest/Main.cs:15)
CopyPasteTest:Main (string[])


If in the method OnCopyClicked() I use clipboard.SetText() instead of
clipboard.SetWithData() everything runs normally. Unfortunately, I need
to use other types besides the string type.

I would post this to bugzilla but I first wanted to make sure that 
this is not a problem with my code.

Any thoughts?

Thanks,
Alexandros


____________________________________________________________________
http://www.freemail.gr - δωρεάν υπηρεσία ηλεκτρονικού ταχυδρομείου.
http://www.freemail.gr - free email service for the Greek-speaking.