Hey Carlo, Thanks man. Your idea works, but .... I am still not able to figure out how it works ..... Let me first tell you all what I have done. I have a button which when clicked shall start iterating from 0 to 1000[say], and for each iteration, does some work[counts another variable j for some time]. Total work to be done here = 1000 * counting js Periodically I want my progress bar to keep me updated on how much of this above work has been completed. I compute fraction = (i+1)/1000. This much of work has been done at that point of time. I have written a time out function for the progress bar[which times out when fraction is >=0.99] which will be called every 1 second. This function looks at the fraction of work done, and update the fraction at the progress bar accordingly. Problem: for every iteration in i[from 1 to 1000], I kept updating value fraction, and passed this fraction to the progress bar inside the for loop for getting prgress bar updated. I always saw that only when the fraction was 0.99[that is when the work was complete] did control pass to progress bars timeout function, and so the first value to progress bar was itself 0.99. So, progress bar waited for operation to finish and then displays a fully completed picture. The problem was then solved [Thanks to everyone who contributed, special thanks to Carlo] and here is the code that updates progress bar while the work is on[and not only after the work is complete]: ****************START CODE ************************************************ #ifdef HAVE_CONFIG_H # include <config.h> #endif #include <gtk/gtk.h> //C Related includes #include<unistd.h> #include<stdlib.h> #include "callbacks.h" #include "interface.h" #include "support.h" typedef struct { GtkWidget *pbar; gdouble fraction; }ProgressData; void on_button1_clicked (GtkButton *button, gpointer user_data) { GtkWidget *wdgt_progress_bar; ProgressData *pdata; gint i = 0; gint j = 0; gint range = 1000000; wdgt_progress_bar = lookup_widget(GTK_WIDGET(button),"progressbar1"); pdata = (ProgressData *)g_malloc0(sizeof(ProgressData)); pdata->pbar = wdgt_progress_bar; //Call progress_timeout() every 1 second. g_timeout_add (100, progress_timeout, pdata); for(i=0;i<range;i++) { //Do work w1. //g_print("(%d)",i); while(j<100000)//To kill time, keep counting until a lakh j++; j = 0;//Make j 0 for the next loop. //Update fraction pdata->fraction = (gdouble)i/(gdouble)(range); g_print("(%f)",pdata->fraction); /*MYSTERIOUS CODE [FOR ME] -- WORKS !! :-)*/ while (gtk_events_pending ()) { g_print("[.]"); gtk_main_iteration (); } }//End for i = start_count to end_count } /* Update the value of the progress bar so that we get * some movement */ static gboolean progress_timeout( gpointer data) { ProgressData *pdata = (ProgressData *)data; gtk_progress_bar_set_fraction (GTK_PROGRESS_BAR (pdata->pbar), pdata->fraction); if(pdata->fraction>=0.99)//If work is complete. return FALSE;//Stop updating. else//If work is not complete. return TRUE; } ****************************END CODE *************************************** I am still not clear as to how this works. Inclusion of this piece of code is what made it work. while (gtk_events_pending ()) { gtk_main_iteration (); } 1. What does gtk_events_pending() signify ? for the code running when the button is clicked, is the timeout function of the progress bar a pending event ? 2. What is the use of gtk_main_iteration() ? From the docs, I see that it calls gtk_main() once. As I know when gtk_main() is called, the program automatically starts listening to X events. 3.Why should this be put into the while loop of gtk_events_pending() ? 4. When does this while loop end ? Is that random [because that is how it looked to me when I put values into the while loop and observed fraction values at which this was called] Carlo, it will be good if you can throw more light on how this code snippet made it work. Coming back to discussion with Dan, I still dont understand how you would say memory is being leaked when I malloc(50) and then use only less than that from the return value of get_text[that is what was returned from the text box in UI]. [By the way, memory wasted is some_size - strlen(something_else) :-)]. I feel allocating space to variables which will receive values whose size it doesnt know is important becuase the program atleast deals with memory which it knows about. Comment on that statement Dan. Thanks you very much folks, this is a great place to be part of. One might wonder why g++ compiler when most things I use is C. The point is, there are certain modules which have been developed in C++ and I wanted the compiler to be consistent across code. Moreover, g++ is more stringent compared to gcc when it comes to usage of variables. Vijay On Mon, January 7, 2008 4:18 pm, Dan H wrote: > On Mon, 7 Jan 2008 14:51:11 +0530 (IST) > [EMAIL PROTECTED] wrote: > >> IN REPLY TO DANS COMMENTS: >> >> >> 1. I am using the g++ compiler and g++ doesnt let a gpointer[return >> type of g_malloc0()] or a void pointer point a gchar or a ProgressData >> pointer. That is why the typecast. > > Ah, so you're using it in C++ mode. Yes, C++ requires the cast, C > doesn't. > >> >> 2. I need more explanation here: >> >> >> txt_start_count = (gchar >>>> *)gtk_entry_get_text(GTK_ENTRY(wdgt_start_count)); >>>> >>>> >>> >>> Useless (possibly dangerous) cast, and you're leaking the memory >>> g_malloced() above. >> >> >> Why do you think memory is leaked ? >> > > Because this is, briefly, what you do in your code: > > > foo = malloc(some_size) foo = something_else > > This leaks some_size bytes of memory. The question is: What is the > purpose of g_malloc() in the first place? > >> I have already done a >> lookup_widget on wdgt_start_count. gtk_entry_get_text() returns a const >> gchar * value while mine is a gchar *, and that is why the typecast. > > Well then declare txt_start_count as a const char as well. > > > The typecast is both unneccessary and dangerous in the (unlikely) event > that some new version of GTK+, gtk_entry_get_text() returns something > other than a gchar *. > > You really need to get your C act together before embarking on such a > project. > > --D. > _______________________________________________ > gtk-app-devel-list mailing list gtk-app-devel-list@gnome.org > http://mail.gnome.org/mailman/listinfo/gtk-app-devel-list > ************************************************************************** > *********** > DISCLAIMER > This e-mail and any files transmitted with it are for the sole use of the > intended recipient(s) and may contain confidential and privileged > information. Any use,distribution,copying or disclosure by any other > person is strictly prohibited. If you have received this transmission in > error please notify SETS immediately either by replying to this e-mail or > by telephone +91-44-28205655 and then delete this e-mail. The sender does > not accept any responsibility for any damage which you sustain as a > result of software viruses or malicious programs. You should therefore > scan attachments (if any) prior to opening them. > ************************************************************************* > *********** > > > > > > > Vijayasarathy Senior Research Associate SETS *************************************************************************** DISCLAIMER This e-mail and any files transmitted with it are for the sole use of the intended recipient(s) and may contain confidential and privileged information. Any use, distribution, copying or disclosure by any other person is strictly prohibited. If you have received this transmission in error please notify SETS immediately either by replying to this e-mail or by telephone on +91-44-28205655 and then delete this e-mail. The sender does not accept any responsibility for any damage which you sustain as a result of software viruses or malicious programs. You should therefore scan attachments (if any) prior to opening them. **************************************************************************
************************************************************************************* DISCLAIMER This e-mail and any files transmitted with it are for the sole use of the intended recipient(s) and may contain confidential and privileged information. Any use,distribution,copying or disclosure by any other person is strictly prohibited. If you have received this transmission in error please notify SETS immediately either by replying to this e-mail or by telephone +91-44-28205655 and then delete this e-mail. The sender does not accept any responsibility for any damage which you sustain as a result of software viruses or malicious programs. You should therefore scan attachments (if any) prior to opening them. ************************************************************************************
_______________________________________________ gtk-app-devel-list mailing list gtk-app-devel-list@gnome.org http://mail.gnome.org/mailman/listinfo/gtk-app-devel-list