This is more of an FAQ!
Basically what you have done is block the GUI, so it can not be updated.
There are many different ways to work with this.
First solution is the "quick and dirty way", and not really a way to be recommended unless you have a dialog window that is "modal".
So within your copying of data loop, every so often when you what to up date the display run this section of code.
/* computation going on... */
while (gtk_events_pending ())
/* ...computation continued */
Another way is to break up your data that is to be copied into smaller chunks and use g_idle_add() to add a call-back that does your copying and update of your progress bar. So within the g_idle_add() call-back you copy a small chunk of your data, then update your progress bar, if there is more data to be copied return TRUE (allow the call-back to continue) and if the copy has finished return FALSE (removes the call-back). What you will have to do is some how keep track of how much data you have copied and your position, then opening and closing of files etc..
The final way, as the last poster suggested is to use threads, it can also be the most efficient way of doing this if you have a multi CPU machine. It is also the most error prone, due to most people not really understanding how to use them properly and ending up with some very surprising run time results which will vary from machine to machine, and even from each time the application is run.
Basically what you will need to do is start a thread to do the copying (this is your worker thread). You then have to communicate from your worker thread to your main thread (the one GTK+ is on) when to update your progress bar. There are many ways to do this, the first and easiest is to use g_idle_add(GSourceFunc function, gpointer data) which is called in your worker thread (this is thread safe). You then use the user data to communicate how much data has been copied (probably as a percentage). The call-back will then be called in the main thread and in this you can then use the user data to update your progress bar and then you need to return FALSE to remove the call-back. (more will be added with the worker thread). There are also many other ways of doing, just use your search engine on Inter Process Communication.