[Gtk-sharp-list] refreshing Gtk.TextView and EntryCompletion

Javier Díaz javierdiazm@yahoo.com.mx
Thu, 23 Dec 2004 07:27:55 -0600


Hey guys

I'm writing an example of how to use Google Suggest technology in
gtk-sharp applications

here is part of the code:
......
public class GoogleCompletionGladeApp
{
	[Widget] Gtk.Entry query_entry;
	[Widget] Gtk.TextView res_textview;
	[Widget] Gtk.Combo combo_res;
	
	static Gtk.TextBuffer buffer;
	static ACRequestHandler request_handler;
	
	private static Thread search_thread;
	private static string search_query;
	private static string[] Args;
	
	public GoogleCompletionGladeApp (string[] args) 
	{
		Args = args;
		request_handler = new ACRequestHandler(); 
		
		Application.Init();

		Glade.XML gxml = new Glade.XML (null, "gui.glade", "window1", null);
		gxml.Autoconnect (this);
		
		buffer = res_textview.Buffer;

		Application.Run();
	}
	public void OnWindowDeleteEvent (object o, DeleteEventArgs args) 
	{
		Application.Quit ();
		args.RetVal = true;
	}
	public void on_exec_button_clicked (object o, EventArgs args)
	{
		// Not using threads Here.....
		
		buffer.Clear();
		foreach (string s in request_handler.Require(query_entry.Text)){
			buffer.Text += s + '\n';
		}
	}
	public void on_query_entry_changed (object o, EventArgs args)
	{
		// Using threads....
		
		// "search_query" is a static member
		// it is going to be used by SearchThread()
		// I don't want SearchThread() to access "query_entry"  
		search_query = query_entry.Text;
		
		if (search_thread != null){
			search_thread.Abort();
		}

		search_thread = new Thread (new ThreadStart (SearchThread));
		search_thread.Start();
	}
	private static void SearchThread()
	{
		try {
			lock (buffer){	
				buffer.Clear();

				foreach (string s in request_handler.Require(search_query)){
					buffer.Text += s + '\n';
				}
			}
		} catch (ThreadAbortException) {
			buffer.Clear();
		}
	}
}
------
You can download the full source code from:
http://isotopo.homeip.net/GooglehACe.tar.gz

I have the following problem:

The (Gtk.TextBuffer) buffer used to modify the (Gtk.TextView)
res_textview, it is locked and modified by the thread that searches
suggestions,... but the res_textview does not reloads the data from the
buffer, I don't know how to explicitly refresh res_textview.

I can see that res_textview redraws itself very well on Expose event.

Is there any way SearchThread() can redraw res_textview safely ??.

I wish I had some sort of Completion widget like Monodevelo's
CodeCompletion.CompletionWindow 

is there something like a Gtk.EntryCompletion on Gtk# 1.0.4 ?

-- 
Javier Díaz <javierdiazm@yahoo.com.mx>