#!/usr/bin/env python

import threading
import signal
import gtk

def timerfunc():
    if not thread_finished:
        gtk.threads_enter()
        pbar.pulse()
	print 'Plusing ProgressBar, since '+ \
	    'thread_finished is'+`thread_finished`
        gtk.threads_leave()
    return not thread_finished

def threadfunc():
    for i in range(25):
	k = 0
	for j in range(1000000):
	    k += 1

        string = 'foo '+`i`
        print 'Appending to TreeView "'+string+'"'
        gtk.threads_enter()
        store.append([string])
	gtk.threads_leave()
    thread_finished = True
    print 'thread_finished is True'

def on_window_map_event(event, param):
    print 'Window mapped'
    while gtk.events_pending():
        gtk.main_iteration(False)
    thread_finished = False
    gtk.timeout_add(50, timerfunc)
    thread = threading.Thread(target=threadfunc)
    thread.run()

store = gtk.ListStore(str)
renderer = gtk.CellRendererText()
column = gtk.TreeViewColumn('Foos', renderer, text=0)
view = gtk.TreeView(store)
view.append_column(column)
sw = gtk.ScrolledWindow()
sw.add(view)
pbar = gtk.ProgressBar()
vbox = gtk.VBox()
vbox.pack_start(sw)
vbox.pack_start(pbar, False)
window = gtk.Window()
window.set_default_size(100, 600)
window.add(vbox)
window.show_all()
window.connect('map_event', on_window_map_event)
window.connect('destroy', gtk.main_quit)

signal.signal(signal.SIGINT, signal.SIG_DFL)
gtk.threads_init()
gtk.threads_enter()
gtk.main()
gtk.threads_leave()
